Kaggle 数据挖掘比赛经验分享(转)
簡介?
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?銷量預估競賽第三名的獲獎方案,https://github.com/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,地址:https://github.com/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,而且用的非常溜。方案鏈接:http://benanne.github.io/2015/03/17/plankton.html
●?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?隊伍都會使用。方案鏈接:https://www.kaggle.com/c/datasciencebowl/discussion/13166
●?17th?place:Realtime?data?augmentation?+?BN?+?PReLU。方案鏈接:https://github.com/ChenglongChen/caffe-windows
3.1.4 常用工具
▲?Theano:?http://deeplearning.net/software/theano/
▲?Keras:?https://keras.io/
▲?Cuda-convnet2:?https://github.com/akrizhevsky/cuda-convnet2
▲?Caffe:?http://caffe.berkeleyvision.org/
▲?CXXNET:?https://github.com/dmlc/cxxnet
▲?MXNet:?https://github.com/dmlc/mxnet
▲?PaddlePaddle:?http://www.paddlepaddle.org/cn/index.html
?
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?包。方案鏈接:https://www.kaggle.com/c/walmart-recruiting-store-sales-forecasting/discussion/8125
●?2nd?place:Time?series?forecasting?+?ML:?arima?+?RF?+?LR?+?PCR。時序序列的統計方法+傳統機器學習方法的混合;方案鏈接:https://www.kaggle.com/c/walmart-recruiting-store-sales-forecasting/discussion/8023
●?16th?place:Feature?engineering?+?GBM。方案鏈接:https://github.com/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。對原始文本數據進行清洗后,提取了屬性特征,距離特征和基于分組的統計特征等大量的特征,使用了不同的目標函數訓練不同的模型(回歸,分類,排序等),最后使用模型集成的方法對不同模型的預測結果進行融合。方案鏈接:https://github.com/ChenglongChen/Kaggle_CrowdFlower
●?2nd?place:A?Similar?Workflow
●?3rd?place:?A?Similar?Workflow
3.3.4 常用工具
▲?NLTK:?http://www.nltk.org/
▲?Gensim:?https://radimrehurek.com/gensim/
▲?XGBoost:?https://github.com/dmlc/xgboost
▲?RGF:?https://github.com/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)?中進行建模。方案鏈接:https://www.kaggle.com/c/criteo-display-ad-challenge/discussion/10555
●?3rd?place:Quadratic?Feature?Generation?+?FTRL。傳統特征工程和?FTRL?線性模型的結合。方案鏈接:https://www.kaggle.com/c/criteo-display-ad-challenge/discussion/10534
●?4th?place:Feature?Engineering?+?Sparse?DNN
3.4.4 常用工具
▲?Vowpal?Wabbit:?https://github.com/JohnLangford/vowpal_wabbit
▲?XGBoost:?https://github.com/dmlc/xgboost
▲?LIBFFM:?http://www.csie.ntu.edu.tw/~r01922136/libffm/
?
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?進行集成。方案鏈接:https://www.kaggle.com/c/avazu-ctr-prediction/discussion/12608
●?2nd?place:Feature?Engineering?+?GBDT?特征編碼?+?FFM?+?Blending。Owenzhang(曾經長時間雄霸?Kaggle?排行榜第一)的競賽方案。Owenzhang?的特征工程做得非常有參考價值。方案鏈接:https://github.com/owenzhang/kaggle-avazu
3.5.4 常用工具
▲?LIBFFM:?http://www.csie.ntu.edu.tw/~r01922136/libffm/
▲?XGBoost:?https://github.com/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
轉載于:https://www.cnblogs.com/gczr/p/6943617.html
總結
以上是生活随笔為你收集整理的Kaggle 数据挖掘比赛经验分享(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 28 数组中出现次数超过一半的数字
- 下一篇: bzoj 3594: [Scoi2014