天天看點

【幹貨】Kaggle 資料挖掘比賽經驗分享 (轉載)

個人首頁:http://hellogod.cn

本文轉自微信公衆号【 騰訊全球高校算法大賽】 原作者: 陳成龍

版權歸作者所有

作者簡介

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:用于課堂項目作業或者考試。

【幹貨】Kaggle 資料挖掘比賽經驗分享 (轉載)

圖1. Kaggle 比賽類型

從領域歸屬劃分:包含搜尋相關性,廣告點選率預估,銷量預估,貸款違約判定,癌症檢測等。

從任務目标劃分:包含回歸,分類(二分類,多分類,多标簽),排序,混合體(分類+回歸)等。

從資料載體劃分:包含文本,語音,圖像和時序序列等。

從特征形式劃分:包含原始資料,明文特征,脫敏特征(特征的含義不清楚)等。

1.4 比賽流程

一個資料挖掘比賽的基本流程如下圖2所示,具體的子產品我将在下一章進行展開陳述。

【幹貨】Kaggle 資料挖掘比賽經驗分享 (轉載)

圖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)圖所示的情況。

【幹貨】Kaggle 資料挖掘比賽經驗分享 (轉載)

圖4. 适當利用 Public LB 的回報

(圖參考 Owenzhang 的分享 [1])

2.5 模型內建

如果想在比賽中獲得名次,幾乎都要進行模型內建(組隊也是一種模型內建)。關于模型內建的介紹,已經有比較好的博文了,可以參考 [3]。在這裡,我簡單介紹下常用的方法,以及個人的一些經驗。

2.5.1 Averaging 和 Voting

直接對多個模型的預測結果求平均或者投票。對于目标變量為連續值的任務,使用平均;對于目标變量為離散值的任務,使用投票的方式。

2.5.2 Stacking

【幹貨】Kaggle 資料挖掘比賽經驗分享 (轉載)

圖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

5.

結語

作為曾經的學生黨,十分感激和慶幸有 Kaggle 這樣的平台,提供了不同領域極具挑戰的任務以及豐富多樣的資料。讓我這種空有滿(yi)腔(xie)理(wai)論(li)的資料挖掘小白,可以在真實的問題場景和業務資料中進行實操練手,提升自己的資料挖掘技能,一不小心,還能拿名次,赢獎金。如果你也躍躍欲試,不妨選一個合适的任務,開啟資料挖掘之旅吧。

作者簡介

【幹貨】Kaggle 資料挖掘比賽經驗分享 (轉載)

陳成龍, 2015 年博士畢業于中山大學,研究圖像篡改檢測,在圖像領域頂級期刊IEEE TIP上發表論文2篇,Kaggle CrowdFlower 和 HomeDepot 搜尋相關性比賽分獲第一和第三名,曾在 Kaggle 資料科學家排行榜上排名全球第十,國内第一。目前在騰訊社交與效果廣告部任職資料挖掘工程師,負責 Lookalike 相似人群擴充相關工作。

繼續閱讀