1. 程式人生 > >Kaggle比賽總結

Kaggle比賽總結

重點 傳統 排好序 true 數據 思路 主辦方 下采樣 效果

做完 Kaggle 比賽已經快五個月了,今天來總結一下,為秋招做個準備。

題目要求:根據主辦方提供的超過 4 天約 2 億次的點擊數據,建立預測模型預測用戶是否會在點擊移動應用廣告後下載應用程序。

  • 數據集特點:
  1. 數據量很大,有 2 億條之多
  2. 數據是不平衡的,點擊下載的數量遠遠小於沒有點擊下載的數量

不平衡數據集的處理思路:

一般對樣本進行 上采樣 和 下采樣,顧名思義就是 多的樣本少采一點,少的樣本多采一點。極端情況下,就是樣本太多的時候,就可以做增強學習,就是我給我的少樣本增加噪音。但是由於我們這個預測問題,它是一個時間連續序列,沒有辦法給時間連續序列做一個不同頻率的采樣,所以我們沒有辦法進行 上采樣 和 下采樣,所以,針對這個問題,我們所做的是,在算法原理上,引入一個正則項,來限制它的不平衡率。引入一個系數,這個系數就是它的不平衡率,在這個數據集中約是 99.7%。具體到我們這個模型,它有一個參數叫 isUnbanlanced(是否是不平衡的),設置為 true 後,它可以自動的檢測不平衡率。

接下來,針對這個不平衡數據集,要使用一些比較可靠的評價指標。評價指標用一般的準確率是不行的,舉個例子,我們現在有一個分類器,對所有的患者判定是否患病,這麽一個傻瓜分類器,人群中可能患者是 萬分之一 的概率,那麽,這個分類器的準確率可以到達 好幾個9,比如 99.9%,但是這個數字是沒有意義的,它沒有起到分類的作用。所以,我們的評價指標不能夠使用準確率,一般使用的叫 AUC,AUC 的全名叫做 Area Under Curve ,被定義為ROC曲線下的面積,顯然這個面積的數值不會大於1。ROC 曲線的橫軸和縱軸分別是真陽率和偽陽率,真陽率和偽陽率的和為1,然後就會畫一條曲線,AUC 就是 ROC 曲線下的面積。AUC 越大,準確率越高。AUC 不受這種不平衡的影響,所以經常會用 AUC 去做指標。

以上是針對不平衡數據集的處理。

下面是正式的流程。

  • 第一步是清洗數據。要給數據打上標簽。
  • 第二步是特征工程,第一種辦法,比如說 time 類型的一維數值,給它拆成 day hour minute second 這樣就變成 四維了。還有頻率,比如當中有一個設備號,它在所有數據中出現的頻率。因為它提供的是設備號,這是一個類別特征,要把這個變成頻率,就成了一個連續值特征。對於頻率來說,還有一點就是我們引入了一個叫 置信系數,比如頻率出現了異常值,在 2億 條數據中出現了一次跟兩次,其實沒有區別,但在頻率這個維度上就是一倍和兩倍的關系,我們不想要這個差異,需要引入一個 置信系數,給分子分母同時加上 Log,這樣差距就縮小了。然後給特征之間加上交叉組合,比如說,設備號相同的用戶他們的信道號的平均數、方差、絕對值差異,這些數據都很有意義。經過特征工程,我們的特征就從7維擴展到了50維。
  • 建立模型。我們這裏用到了 lightGBM。LGB 的原理,兩個重點。1. 它是一個樹模型,底層是二叉決策樹;2. 它是在樹模型上做一個 boosting 集成學習。集成學習有很多種,boosting 是其中之一。boosting 原理是產生很多模型,第二個模型擬合的不是真實對象,而是前一個模型與真實模型之間的殘差,然後把所有模型加在一起。所以它是一個加法模型,然後不斷逼近真實情況。這是 lightGBM 的兩個特點。

Q: lightGMB 和GDBT 、XGB 的區別?

A:區別有:

1. 二叉樹底層要找最佳收益分類點,但是數據太多了,復雜度很高。XGB 選擇了預排序算法,就是說你要找最佳分類點,我就先跟你預排序,後面的復雜度就降下去了。但要維系一個已經排好序的特征,需要空間,而且時間上有所犧牲,但是,LGB不是這麽處理的,它就不用傳統的那種算法,它用統計學的一種算法,叫直方圖算法,這種算法的好處是,不用對所有的數據做運算,而是把數據落在一個個區間上面,然後復雜度就會下降很快。就相當於鄰近的數據都給縮成一類了。直方圖很多時候都服從正態分布,一般有一個峰值。我們找到那個峰值,就默認它是最佳分類點。雖然在機器學習當中,經常是找到的最佳分類點不是絕對的最佳分類點,但是經過多次計算,也能達到同樣的效果,就是犧牲了一定的精度,但速度比你快很多。

2. 因為 boosting 模型是不斷逼近,可以做到非常準確,但是它有一個問題,就是容易過擬合。所以,XGB對樹的深度做了一個限制,但是LGBM是對葉節點做限制。

3. XGB 不支持類別特征。比如說,你是男,我是女,這是類別。還有一種特征叫連續值特征,比如年齡,1歲,2歲,20歲,這是連續值特征。類別特征的輸入,需要引入 獨熱編碼 (OneHot編碼),XGB在類別特征上需要做一個 獨熱編碼,但是 LGB 不需要,因為它集成了

4. LGB 對並行的支持做了優化,比較快。

Q: 為什麽使用 LGB,有沒有試過別的模型,用過 LR 模型嗎?

A: LR 和 LightGBM 的應用場景。LR、FM 這種以邏輯斯蒂回歸為基礎的算法模型,都使用於稀疏矩陣,而以 lightGBM 為代表的樹模型,適用於不那麽稀疏的,適用於連續值多的。業界往往有這麽一種做法,用樹模型挑選特征,因為特征比較稀疏,然後把稀疏矩陣送給 LR 做一個分類。因為我們的樣本它不是稀疏的,所以直接用 LightGBM 做。


  • 跑模型。的出來的 AUC 是0.98 。

Kaggle比賽總結