【轉載】Kaggle 資料探勘比賽經驗分享
【轉載】Kaggle 資料探勘比賽經驗分享
原文:https://blog.csdn.net/catherine_985/article/details/78781825
簡介
Kaggle 於 2010 年創立,專注資料科學,機器學習競賽的舉辦,是全球最大的資料科學社群和資料競賽平臺。筆者從 2013 年開始,陸續參加了多場 Kaggle上面舉辦的比賽,相繼獲得了 CrowdFlower 搜尋相關性比賽第一名(1326支隊伍)和 HomeDepot 商品搜尋相關性比賽第三名(2125支隊伍),曾在 Kaggle 資料科學家排行榜排名全球第十,國內第一。筆者目前在騰訊社交與效果廣告部任職資料探勘工程師,負責 Lookalike 相似人群擴充套件相關工作。此文分享筆者在參加資料探勘比賽過程中的一點心得體會。
1.Kaggle 基本介紹
Kaggle 於 2010 年創立,專注資料科學,機器學習競賽的舉辦,是全球最大的資料科學社群和資料競賽平臺。在 Kaggle 上,企業或者研究機構釋出商業和科研難題,懸賞吸引全球的資料科學家,通過眾包的方式解決建模問題。而參賽者可以接觸到豐富的真實資料,解決實際問題,角逐名次,贏取獎金。諸如 Google,Facebook,Microsoft 等知名科技公司均在 Kaggle 上面舉辦過資料探勘比賽。2017年3月,Kaggle 被 Google CloudNext 收購。
1.1 參賽方式
可以以個人或者組隊的形式參加比賽。組隊人數一般沒有限制,但需要在 Merger Deadline 前完成組隊。為了能參與到比賽中,需要在 Entry Deadline 前進行至少一次有效提交。最簡單地,可以直接提交官方提供的 Sample Submission。關於組隊,建議先單獨個人進行資料探索和模型構建,以個人身份進行比賽,在比賽後期(譬如離比賽結束還有 2~3 周)再進行組隊,以充分發揮組隊的效果(類似於模型整合,模型差異性越大,越有可能有助於效果的提升,超越單模型的效果)。當然也可以一開始就組好隊,方便分工協作,討論問題和碰撞火花。
Kaggle 對比賽的公正性相當重視。在比賽中,每個人只允許使用一個賬號進行提交。在比賽結束後 1~2 周內,Kaggle 會對使用多賬號提交的 Cheater 進行剔除(一般會對 Top 100 的隊伍進行 Cheater Detection)。在被剔除者的 Kaggle 個人頁面上,該比賽的成績也會被刪除,相當於該選手從沒參加過這個比賽。此外,隊伍之間也不能私自分享程式碼或者資料,除非在論壇上面公開發布。
比賽一般只提交測試集的預測結果,無需提交程式碼。每人(或每個隊伍)每天有提交次數的限制,一般為2次或者5次,在 Submission 頁面會有提示。
1.2 比賽獲獎
Kaggle 比賽獎金豐厚,一般前三名均可以獲得獎金。在最近落幕的第二屆 National Data Science Bowl 中,總獎金池高達 100W 美刀,其中第一名可以獲得 50W 美刀的獎勵,即使是第十名也能收穫 2.5W 美刀的獎金。
獲獎的隊伍需要在比賽結束後 1~2 周內,準備好可執行的程式碼以及 README,演算法說明文件等提交給 Kaggle 來進行獲獎資格的稽核。Kaggle 會邀請獲獎隊伍在 Kaggle Blog 中發表 Interview,來分享比賽故事和經驗心得。對於某些比賽,Kaggle 或者主辦方會邀請獲獎隊伍進行電話/視訊會議,獲獎隊伍進行 Presentation,並與主辦方團隊進行交流。
1.3 比賽型別
從 Kaggle 提供的官方分類來看,可以劃分為以下型別(如下圖1所示):
◆ Featured:商業或科研難題,獎金一般較為豐厚;
◆ Recruitment:比賽的獎勵為面試機會;
◆ Research:科研和學術性較強的比賽,也會有一定的獎金,一般需要較強的領域和專業知識;
◆ Playground:提供一些公開的資料集用於嘗試模型和演算法;
◆ Getting Started:提供一些簡單的任務用於熟悉平臺和比賽;
◆ In Class:用於課堂專案作業或者考試。
圖1. Kaggle 比賽型別
從領域歸屬劃分:包含搜尋相關性,廣告點選率預估,銷量預估,貸款違約判定,癌症檢測等。
從任務目標劃分:包含迴歸,分類(二分類,多分類,多標籤),排序,混合體(分類+迴歸)等。
從資料載體劃分:包含文字,語音,影象和時序序列等。
從特徵形式劃分:包含原始資料,明文特徵,脫敏特徵(特徵的含義不清楚)等。
1.4 比賽流程
一個數據挖掘比賽的基本流程如下圖2所示,具體的模組我將在下一章進行展開陳述。
圖2. 資料探勘比賽基本流程
這裡想特別強調的一點是,Kaggle 在計算得分的時候,有Public Leaderboard (LB)和 Private LB 之分。具體而言,參賽選手提交整個測試集的預測結果,Kaggle 使用測試集的一部分計算得分和排名,實時顯示在 Public LB上,用於給選手提供及時的反饋和動態展示比賽的進行情況;測試集的剩餘部分用於計算參賽選手的最終得分和排名,此即為 Private LB,在比賽結束後會揭曉。用於計算 Public LB 和 Private LB 的資料有不同的劃分方式,具體視比賽和資料的型別而定,一般有隨機劃分,按時間劃分或者按一定規則劃分。
這個過程可以概括如下圖3所示,其目的是避免模型過擬合,以得到泛化能力好的模型。如果不設定 Private LB(即所有的測試資料都用於計算 Public LB),選手不斷地從 Public LB(即測試集)中獲得反饋,進而調整或篩選模型。這種情況下,測試集實際上是作為驗證集參與到模型的構建和調優中來。Public LB上面的效果並非是在真實未知資料上面的效果,不能可靠地反映模型的效果。劃分 Public LB 和 Private LB 這樣的設定,也在提醒參賽者,我們建模的目標是要獲得一個在未知資料上表現良好的模型,而並非僅僅是在已知資料上效果好。
圖3. 劃分 Public LB 和 Private LB的目的(圖參考 Owenzhang 的分享 [1])
2.資料探勘比賽基本流程
從上面圖2可以看到,做一個數據挖掘比賽,主要包含了資料分析,資料清洗,特徵工程,模型訓練和驗證等四個大的模組,以下來一一對其進行介紹。
2.1 資料分析
資料分析可能涉及以下方面:
◆ 分析特徵變數的分佈
◇ 特徵變數為連續值:如果為長尾分佈並且考慮使用線性模型,可以對變數進行冪變換或者對數變換。
◇ 特徵變數為離散值:觀察每個離散值的頻率分佈,對於頻次較低的特徵,可以考慮統一編碼為“其他”類別。
◆ 分析目標變數的分佈
◇ 目標變數為連續值:檢視其值域範圍是否較大,如果較大,可以考慮對其進行對數變換,並以變換後的值作為新的目標變數進行建模(在這種情況下,需要對預測結果進行逆變換)。一般情況下,可以對連續變數進行Box-Cox變換。通過變換可以使得模型更好的優化,通常也會帶來效果上的提升。
◇ 目標變數為離散值:如果資料分佈不平衡,考慮是否需要上取樣/下采樣;如果目標變數在某個ID上面分佈不平衡,在劃分本地訓練集和驗證集的時候,需要考慮分層取樣(Stratified Sampling)。
◆ 分析變數之間兩兩的分佈和相關度
◇ 可以用於發現高相關和共線性的特徵。
通過對資料進行探索性分析(甚至有些情況下需要肉眼觀察樣本),還可以有助於啟發資料清洗和特徵抽取,譬如缺失值和異常值的處理,文字資料是否需要進行拼寫糾正等。
2.2 資料清洗
資料清洗是指對提供的原始資料進行一定的加工,使得其方便後續的特徵抽取。其與特徵抽取的界限有時也沒有那麼明確。常用的資料清洗一般包括:
◆ 資料的拼接
◇ 提供的資料散落在多個檔案,需要根據相應的鍵值進行資料的拼接。
◆ 特徵缺失值的處理
◇ 特徵值為連續值:按不同的分佈型別對缺失值進行補全:偏正態分佈,使用均值代替,可以保持資料的均值;偏長尾分佈,使用中值代替,避免受 outlier 的影響;
◇ 特徵值為離散值:使用眾數代替。
◆ 文字資料的清洗
◇ 在比賽當中,如果資料包含文字,往往需要進行大量的資料清洗工作。如去除HTML 標籤,分詞,拼寫糾正, 同義詞替換,去除停詞,抽詞幹,數字和單位格式統一等。
2.3 特徵工程
有一種說法是,特徵決定了效果的上限,而不同模型只是以不同的方式或不同的程度來逼近這個上限。這樣來看,好的特徵輸入對於模型的效果至關重要,正所謂”Garbage in, garbage out”。要做好特徵工程,往往跟領域知識和對問題的理解程度有很大的關係,也跟一個人的經驗相關。特徵工程的做法也是Case by Case,以下就一些點,談談自己的一些看法。
2.3.1 特徵變換
主要針對一些長尾分佈的特徵,需要進行冪變換或者對數變換,使得模型(LR或者DNN)能更好的優化。需要注意的是,Random Forest 和 GBDT 等模型對單調的函式變換不敏感。其原因在於樹模型在求解分裂點的時候,只考慮排序分位點。
2.3.2 特徵編碼
對於離散的類別特徵,往往需要進行必要的特徵轉換/編碼才能將其作為特徵輸入到模型中。常用的編碼方式有 LabelEncoder,OneHotEncoder(sklearn裡面的介面)。譬如對於”性別”這個特徵(取值為男性和女性),使用這兩種方式可以分別編碼為{0,1}和{[1,0], [0,1]}。
對於取值較多(如幾十萬)的類別特徵(ID特徵),直接進行OneHotEncoder編碼會導致特徵矩陣非常巨大,影響模型效果。可以使用如下的方式進行處理:
◆ 統計每個取值在樣本中出現的頻率,取 Top N 的取值進行 One-hot 編碼,剩下的類別分到“其他“類目下,其中 N 需要根據模型效果進行調優;
◆ 統計每個 ID 特徵的一些統計量(譬如歷史平均點選率,歷史平均瀏覽率)等代替該 ID 取值作為特徵,具體可以參考 Avazu 點選率預估比賽第二名的獲獎方案;
◆ 參考 word2vec 的方式,將每個類別特徵的取值對映到一個連續的向量,對這個向量進行初始化,跟模型一起訓練。訓練結束後,可以同時得到每個ID的Embedding。具體的使用方式,可以參考 Rossmann 銷量預估競賽第三名的獲獎方案,entron/entity-embedding-rossmann。
對於 Random Forest 和 GBDT 等模型,如果類別特徵存在較多的取值,可以直接使用 LabelEncoder 後的結果作為特徵。
2.4 模型訓練和驗證
2.4.1 模型選擇
在處理好特徵後,我們可以進行模型的訓練和驗證。
◆ 對於稀疏型特徵(如文字特徵,One-hot的ID類特徵),我們一般使用線性模型,譬如 Linear Regression 或者 Logistic Regression。Random Forest 和 GBDT 等樹模型不太適用於稀疏的特徵,但可以先對特徵進行降維(如PCA,SVD/LSA等),再使用這些特徵。稀疏特徵直接輸入 DNN 會導致網路 weight 較多,不利於優化,也可以考慮先降維,或者對 ID 類特徵使用 Embedding 的方式;
◆ 對於稠密型特徵,推薦使用 XGBoost 進行建模,簡單易用效果好;
◆ 資料中既有稀疏特徵,又有稠密特徵,可以考慮使用線性模型對稀疏特徵進行建模,將其輸出與稠密特徵一起再輸入 XGBoost/DNN 建模,具體可以參考2.5.2節 Stacking 部分。
2.4.2 調參和模型驗證
對於選定的特徵和模型,我們往往還需要對模型進行超引數的調優,才能獲得比較理想的效果。調參一般可以概括為以下三個步驟:
1. 訓練集和驗證集的劃分。根據比賽提供的訓練集和測試集,模擬其劃分方式對訓練集進行劃分為本地訓練集和本地驗證集。劃分的方式視具體比賽和資料而定,常用的方式有:
a) 隨機劃分:譬如隨機取樣 70% 作為訓練集,剩餘的 30% 作為測試集。在這種情況下,本地可以採用 KFold 或者 Stratified KFold 的方法來構造訓練集和驗證集。
b) 按時間劃分:一般對應於時序序列資料,譬如取前 7 天資料作為訓練集,後 1 天資料作為測試集。這種情況下,劃分本地訓練集和驗證集也需要按時間先後劃分。常見的錯誤方式是隨機劃分,這種劃分方式可能會導致模型效果被高估。
c) 按某些規則劃分:在 HomeDepot 搜尋相關性比賽中,訓練集和測試集中的 Query 集合並非完全重合,兩者只有部分交集。而在另外一個相似的比賽中(CrowdFlower 搜尋相關性比賽),訓練集和測試集具有完全一致的 Query 集合。對於 HomeDepot 這個比賽中,訓練集和驗證集資料的劃分,需要考慮 Query 集合並非完全重合這個情況,其中的一種方法可以參考第三名的獲獎方案,https://github.com/ChenglongChen/Kaggle_HomeDepot。
2. 指定引數空間。在指定引數空間的時候,需要對模型引數以及其如何影響模型的效果有一定的瞭解,才能指定出合理的引數空間。譬如DNN或者XGBoost中學習率這個引數,一般就選 0.01 左右就 OK 了(太大可能會導致優化演算法錯過最優化點,太小導致優化收斂過慢)。再如 Random Forest,一般設定樹的棵數範圍為 100~200 就能有不錯的效果,當然也有人固定數棵數為 500,然後只調整其他的超引數。
3. 按照一定的方法進行引數搜尋。常用的引數搜尋方法有,Grid Search,Random Search以及一些自動化的方法(如 Hyperopt)。其中,Hyperopt 的方法,根據歷史已經評估過的引數組合的效果,來推測本次評估使用哪個引數組合更有可能獲得更好的效果。有關這些方法的介紹和對比,可以參考文獻 [2]。
2.4.3 適當利用 Public LB 的反饋
在2.4.2節中我們提到本地驗證(Local Validation)結果,當將預測結果提交到 Kaggle 上時,我們還會接收到 Public LB 的反饋結果。如果這兩個結果的變化趨勢是一致的,如 Local Validation 有提升,Public LB 也有提升,我們可以藉助 Local Validation 的變化來感知模型的演進情況,而無需靠大量的 Submission。如果兩者的變化趨勢不一致,需要考慮2.4.2節中提及的本地訓練集和驗證集的劃分方式,是否跟訓練集和測試集的劃分方式一致。
另外,在以下一些情況下,往往 Public LB 反饋亦會提供有用資訊,適當地使用這些反饋也許會給你帶來優勢。如圖4所示,(a)和(b)表示資料與時間沒有明顯的關係(如影象分類),(c)和(d)表示資料隨時間變化(如銷量預估中的時序序列)。(a)和(b)的區別在於,訓練集樣本數相對於 Public LB 的量級大小,其中(a)中訓練集樣本數遠超於 Public LB 的樣本數,這種情況下基於訓練集的 Local Validation 更可靠;而(b)中,訓練集數目與 Public LB 相當,這種情況下,可以結合 Public LB 的反饋來指導模型的選擇。一種融合的方式是根據 Local Validation 和 Public LB 的樣本數目,按比例進行加權。譬如評估標準為正確率,Local Validation 的樣本數為 N_l,正確率為 A_l;Public LB 的樣本數為 N_p,正確率為 A_p。則可以使用融合後的指標:(N_l * A_l + N_p * A_p)/(N_l + N_p),來進行模型的篩選。對於(c)和(d),由於資料分佈跟時間相關,很有必要使用 Public LB 的反饋來進行模型的選擇,尤其對於(c)圖所示的情況。
圖4. 適當利用 Public LB 的反饋(圖參考 Owenzhang 的分享 [1])
2.5 模型整合
如果想在比賽中獲得名次,幾乎都要進行模型整合(組隊也是一種模型整合)。關於模型整合的介紹,已經有比較好的博文了,可以參考 [3]。在這裡,我簡單介紹下常用的方法,以及個人的一些經驗。
2.5.1 Averaging 和 Voting
直接對多個模型的預測結果求平均或者投票。對於目標變數為連續值的任務,使用平均;對於目標變數為離散值的任務,使用投票的方式。
2.5.2 Stacking
圖5. 5-Fold Stacking(圖參考 Jeong-Yoon Lee 的分享 [4])
圖5展示了使用 5-Fold 進行一次 Stacking 的過程(當然在其上可以再疊加 Stage 2, Stage 3 等)。其主要的步驟如下:
1. 資料集劃分。將訓練資料按照5-Fold進行劃分(如果資料跟時間有關,需要按時間劃分,更一般的劃分方式請參考3.4.2節,這裡不再贅述);
2. 基礎模型訓練 I(如圖5第一行左半部分所示)。按照交叉驗證(Cross Validation)的方法,在訓練集(Training Fold)上面訓練模型(如圖灰色部分所示),並在驗證集(Validation Fold)上面做預測,得到預測結果(如圖黃色部分所示)。最後綜合得到整個訓練集上面的預測結果(如圖第一個黃色部分的CV Prediction所示)。
3. 基礎模型訓練 II(如圖5第二和三行左半部分所示)。在全量的訓練集上訓練模型(如圖第二行灰色部分所示),並在測試集上面做預測,得到預測結果(如圖第三行虛線後綠色部分所示)。
4. Stage 1 模型整合訓練 I(如圖5第一行右半部分所示)。將步驟 2 中得到的 CV Prediction 當作新的訓練集,按照步驟 2 可以得到 Stage 1模型整合的 CV Prediction。
5. Stage 1 模型整合訓練 II(如圖5第二和三行右半部分所示)。將步驟 2 中得到的 CV Prediction 當作新的訓練集和步驟 3 中得到的 Prediction 當作新的測試集,按照步驟 3 可以得到 Stage 1 模型整合的測試集 Prediction。此為 Stage 1 的輸出,可以提交至 Kaggle 驗證其效果。
在圖5中,基礎模型只展示了一個,而實際應用中,基礎模型可以多種多樣,如SVM,DNN,XGBoost 等。也可以相同的模型,不同的引數,或者不同的樣本權重。重複4和5兩個步驟,可以相繼疊加 Stage 2, Stage 3 等模型。
2.5.3 Blending
Blending 與 Stacking 類似,但單獨留出一部分資料(如 20%)用於訓練 Stage X 模型。
2.5.4 Bagging Ensemble Selection
Bagging Ensemble Selection [5] 是我在 CrowdFlower 搜尋相關性比賽中使用的方法,其主要的優點在於可以以優化任意的指標來進行模型整合。這些指標可以是可導的(如 LogLoss 等)和不可導的(如正確率,AUC,Quadratic Weighted Kappa等)。它是一個前向貪婪演算法,存在過擬合的可能性,作者在文獻 [5] 中提出了一系列的方法(如 Bagging)來降低這種風險,穩定整合模型的效能。使用這個方法,需要有成百上千的基礎模型。為此,在 CrowdFlower 的比賽中,我把在調參過程中所有的中間模型以及相應的預測結果保留下來,作為基礎模型。這樣做的好處是,不僅僅能夠找到最優的單模型(Best Single Model),而且所有的中間模型還可以參與模型整合,進一步提升效果。
2.6 自動化框架
從上面的介紹可以看到,做一個數據挖掘比賽涉及到的模組非常多,若有一個較自動化的框架會使得整個過程更加的高效。在 CrowdFlower 比賽較前期,我對整一個專案的程式碼架構進行了重構,抽象出來特徵工程,模型調參和驗證,以及模型整合等三大模組,極大的提高了嘗試新特徵,新模型的效率,也是我最終能斬獲名次的一個有利因素。這份程式碼開源在 Github 上面,目前是 Github 有關 Kaggle 競賽解決方案的 Most Stars,地址:ChenglongChen/Kaggle_CrowdFlower。
其主要包含以下部分:
1. 模組化特徵工程
a) 介面統一,只需寫少量的程式碼就能夠生成新的特徵;
b) 自動將單獨的特徵拼接成特徵矩陣。
2. 自動化模型調參和驗證
a) 自定義訓練集和驗證集的劃分方法;
b) 使用 Grid Search / Hyperopt 等方法,對特定的模型在指定的引數空間進行調優,並記錄最佳的模型引數以及相應的效能。
3. 自動化模型整合
a) 對於指定的基礎模型,按照一定的方法(如Averaging/Stacking/Blending 等)生成整合模型。
3.Kaggle競賽方案盤點
到目前為止,Kaggle 平臺上面已經舉辦了大大小小不同的賽事,覆蓋影象分類,銷量預估,搜尋相關性,點選率預估等應用場景。在不少的比賽中,獲勝者都會把自己的方案開源出來,並且非常樂於分享比賽經驗和技巧心得。這些開源方案和經驗分享對於廣大的新手和老手來說,是入門和進階非常好的參考資料。以下筆者結合自身的背景和興趣,對不同場景的競賽開源方案作一個簡單的盤點,總結其常用的方法和工具,以期啟發思路。
3.1 影象分類
3.1.1 任務名稱
National Data Science Bowl
3.1.2 任務詳情
隨著深度學習在視覺影象領域獲得巨大成功,Kaggle 上面出現了越來越多跟視覺影象相關的比賽。這些比賽的釋出吸引了眾多參賽選手,探索基於深度學習的方法來解決垂直領域的影象問題。NDSB就是其中一個比較早期的影象分類相關的比賽。這個比賽的目標是利用提供的大量的海洋浮游生物的二值影象,通過構建模型,從而實現自動分類。
3.1.3 獲獎方案
● 1st place:Cyclic Pooling + Rolling Feature Maps + Unsupervised and Semi-Supervised Approaches。值得一提的是,這個隊伍的主力隊員也是Galaxy Zoo行星影象分類比賽的第一名,其也是Theano中基於FFT的Fast Conv的開發者。在兩次比賽中,使用的都是 Theano,而且用的非常溜。方案連結:Classifying plankton with deep neural networks
● 2nd place:Deep CNN designing theory + VGG-like model + RReLU。這個隊伍陣容也相當強大,有前MSRA 的研究員Xudong Cao,還有大神Tianqi Chen,Naiyan Wang,Bing XU等。Tianqi 等大神當時使用的是 CXXNet(MXNet 的前身),也在這個比賽中進行了推廣。Tianqi 大神另外一個大名鼎鼎的作品就是 XGBoost,現在 Kaggle 上面幾乎每場比賽的 Top 10 隊伍都會使用。方案連結:National Data Science Bowl
● 17th place:Realtime data augmentation + BN + PReLU。方案連結:ChenglongChen/caffe-windows
3.1.4 常用工具
▲ Theano: Welcome - Theano 0.9.0 documentation
▲ Keras: Keras Documentation
▲ Cuda-convnet2: akrizhevsky/cuda-convnet2
▲ Caffe: Caffe | Deep Learning Framework
▲ CXXNET: dmlc/cxxnet
▲ MXNet: dmlc/mxnet
▲ PaddlePaddle: PaddlePaddle ---- PArallel Distributed Deep LEarning
3.2 銷量預估
3.2.1 任務名稱
Walmart Recruiting - Store Sales Forecasting
3.2.2 任務詳情
Walmart 提供 2010-02-05 到 2012-11-01 期間的周銷售記錄作為訓練資料,需要參賽選手建立模型預測 2012-11-02 到 2013-07-26 周銷售量。比賽提供的特徵資料包含:Store ID, Department ID, CPI,氣溫,汽油價格,失業率,是否節假日等。
3.2.3 獲獎方案
● 1st place:Time series forecasting method: stlf + arima + ets。主要是基於時序序列的統計方法,大量使用了 Rob J Hyndman 的 forecast R 包。方案連結:Walmart Recruiting - Store Sales Forecasting
● 2nd place:Time series forecasting + ML: arima + RF + LR + PCR。時序序列的統計方法+傳統機器學習方法的混合;方案連結:Walmart Recruiting - Store Sales Forecasting
● 16th place:Feature engineering + GBM。方案連結:ChenglongChen/Kaggle_Walmart-Recruiting-Store-Sales-Forecasting
3.2.4 常用工具
▲ R forecast package: https://cran.r-project.org/web/packages/forecast/index.html
▲ R GBM package: https://cran.r-project.org/web/packages/gbm/index.html
3.3 搜尋相關性
3.3.1 任務名稱
CrowdFlower Search Results Relevance
3.3.2 任務詳情
比賽要求選手利用約幾萬個 (query, title, description) 元組的資料作為訓練樣本,構建模型預測其相關性打分 {1, 2, 3, 4}。比賽提供了 query, title和description的原始文字資料。比賽使用 Quadratic Weighted Kappa 作為評估標準,使得該任務有別於常見的迴歸和分類任務。
3.3.3 獲獎方案
● 1st place:Data Cleaning + Feature Engineering + Base Model + Ensemble。對原始文字資料進行清洗後,提取了屬性特徵,距離特徵和基於分組的統計特徵等大量的特徵,使用了不同的目標函式訓練不同的模型(迴歸,分類,排序等),最後使用模型整合的方法對不同模型的預測結果進行融合。方案連結:ChenglongChen/Kaggle_CrowdFlower
● 2nd place:A Similar Workflow
● 3rd place: A Similar Workflow
3.3.4 常用工具
▲ NLTK: Natural Language Toolkit
▲ Gensim: gensim: topic modelling for humans
▲ XGBoost: dmlc/xgboost
▲ RGF: baidu/fast_rgf
3.4 點選率預估 I
3.4.1 任務名稱
Criteo Display Advertising Challenge
3.4.2 任務詳情
經典的點選率預估比賽。該比賽中提供了7天的訓練資料,1 天的測試資料。其中有13 個整數特徵,26 個類別特徵,均脫敏,因此無法知道具體特徵含義。
3.4.3 獲獎方案
● 1st place:GBDT 特徵編碼 + FFM。臺大的隊伍,借鑑了Facebook的方案 [6],使用 GBDT 對特徵進行編碼,然後將編碼後的特徵以及其他特徵輸入到 Field-aware Factorization Machine(FFM) 中進行建模。方案連結:Display Advertising Challenge | Kaggle
● 3rd place:Quadratic Feature Generation + FTRL。傳統特徵工程和 FTRL 線性模型的結合。方案連結:Display Advertising Challenge | Kaggle
● 4th place:Feature Engineering + Sparse DNN
3.4.4 常用工具
▲ Vowpal Wabbit: JohnLangford/vowpal_wabbit
▲ XGBoost: dmlc/xgboost
▲ LIBFFM: LIBFFM: A Library for Field-aware Factorization Machines
3.5 點選率預估 II
3.5.1 任務名稱
Avazu Click-Through Rate Prediction
3.5.2 任務詳情
點選率預估比賽。提供了 10 天的訓練資料,1 天的測試資料,並且提供時間,banner 位置,site, app, device 特徵等,8個脫敏類別特徵。
3.5.3 獲獎方案
● 1st place:Feature Engineering + FFM + Ensemble。還是臺大的隊伍,這次比賽,他們大量使用了 FFM,並只基於 FFM 進行整合。方案連結:Click-Through Rate Prediction | Kaggle
● 2nd place:Feature Engineering + GBDT 特徵編碼 + FFM + Blending。Owenzhang(曾經長時間雄霸 Kaggle 排行榜第一)的競賽方案。Owenzhang 的特徵工程做得非常有參考價值。方案連結:owenzhang/kaggle-avazu
3.5.4 常用工具
▲ LIBFFM: LIBFFM: A Library for Field-aware Factorization Machines
▲ XGBoost: dmlc/xgboost
4.參考資料
[1] Owenzhang 的分享: Tips for Data Science Competitions
[2] Algorithms for Hyper-Parameter Optimization
[3] MLWave部落格:Kaggle Ensembling Guide
[4] Jeong-Yoon Lee 的分享:Winning Data Science Competitions
[5] Ensemble Selection from Libraries of Models
[6] Practical Lessons from Predicting Clicks on Ads at Facebook
5.結語
作為曾經的學生黨,十分感激和慶幸有 Kaggle 這樣的平臺,提供了不同領域極具挑戰的任務以及豐富多樣的資料。讓我這種空有滿(yi)腔(xie)理(wai)論(li)的資料探勘小白,可以在真實的問題場景和業務資料中進行實操練手,提升自己的資料探勘技能,一不小心,還能拿名次,贏獎金。如果你也躍躍欲試,不妨選一個合適的任務,開啟資料探勘之旅吧。哦,對了,我們部門今年舉辦了“騰訊社交廣告高校演算法大賽”,做移動 App 廣告轉化率預估,有大量的真實資料,豐厚的獎品和獎金,Top 20隊伍還能獲得校招綠色通道,你要不要來試試?傳送門:大賽主頁 - T派
更多詳情,請登入活動官方網站:大賽主頁 - T派
大賽報名渠道:高校演算法大賽 - 騰訊社交廣告
報名方式當然還有:
一言不合就送禮的演算法大賽官方微信:TSA-Contest
作者簡介
陳成龍, 2015 年博士畢業於中山大學,研究影象篡改檢測,在影象領域頂級期刊IEEE TIP上發表論文2篇,Kaggle CrowdFlower 和 HomeDepot 搜尋相關性比賽分獲第一和第三名,曾在 Kaggle 資料科學家排行榜上排名全球第十,國內第一。目前在騰訊社交與效果廣告部任職資料探勘工程師,負責 Lookalike 相似人群擴充套件相關工作。
資料探勘資料分析大資料