站在巨人肩膀上制勝 Kaggle 競賽攻頂的關鍵秘笈

成立於2010年的Kaggle,是當前知名的資料科學競賽平台,匯集了世界各地超過十萬名的資料科學家,Kaggle不僅曾經在平台上舉辦過總獎金一百萬美金的競賽,各大企業也會於平台上公開企業資料及問題,向各路好手尋求更有效的解決方法。參賽者不僅能從中不斷累積實作經驗,快速增長提升能力;有些參賽者甚至因為提供解決方案而順利進入企業中就職。因此,Kaggle不僅提供大量免費資源以及真實世界的資料集,也是許多高手展現高超技術力、尋求優渥獎金、薪資與謀職的途徑。

想要在競賽中脫穎而出,除了迅速瞭解任務、有效掌握資料、建立模型等能力,模型集成可以說是Kaggle競賽中最為關鍵的部分。對許多工程師而言,建立模型並不難,最難的挑戰是:如何選擇適當的模型進行集成,以提高最終的準確度。作為一本競賽的秘笈工具書,本書萃取了37面金牌的制勝技巧,除了解釋集成的概念,更詳細說明如何透過各種技術,進行有效的模型集成。四位 Kaggle 資料科學競賽專家從實務角度,解析各種特徵工程技術,包括:如何獲得最高的評價分數、如何轉換資料以彰顯資料特性、如何提取適當特徵、如何正確進行適當驗證、如何調整梯度提升提升決策樹、類神經網路的參數等實務上常見的難題。以下是《Kaggle 競賽攻頂秘笈 - 揭開 Grandmaster 的特徵工程心法,掌握制勝的關鍵技術》的精彩內容摘錄整理:


什麼模型適合集成?

通常我們會認為若想要得到比較好的集成效果,參與集成的模型最好具有多樣性。

若模型傳回的預測值幾乎相同,集成後應該也不會有什麼變化。相反的,其中一個模型的精準預測了晴天時銷售量,另一個模型則精準預測了雨天的銷售量,若能夠將這兩個模型集成,應該就可以得到一個準確度高的模型。其他像是可以取得線性關係的模型,以及可以反映變數之間交互作用的模型,將這兩種模型集成後,也可能得到一個好的模型。像這樣,將具有不同優勢的模型集成起來,就可以達到提升準確度的效果。

另外,即使模型的準確度較低,我們也可以透過將性質不同的模型集成起來,藉此改善最終的準確度。對集成來說,模型的多樣性比準確度更為重要,因此,捨棄準確度低的個別模型並不一定是最好的選擇。

想要建立多樣性豐富的模型,可以參考下列方法:

多使用不同類型的模型

每一種模型,譬如 GBDT 等的決策樹模型、類神經網路、線性模型、K近鄰演算法都會有其適用範圍,也許我們可以透過集成來截長補短。我們特別可以嘗試集成準確度較高的 GBDT 及類神經網路。

集成中經常使用的模型如下:

  • GBDT
  • 類神經網路
  • 線性模型
  • K-近鄰演算法
  • Extremely Randomized Trees (ERT) 或是隨機森林
  • Regularized Greedy Forest (RGF)
  • Field-aware Factorization Machines (FFM)

參與堆疊模型選擇

根據 KazAnoval (Kaggle Grandmaster) 的建議,好的堆疊解決方案中,經常由下列模型組合所構成[註1]

  • 2 ~ 3 個 GBDT (以深度來說,有淺的、中間的及深的決策樹)
  • 1 ~ 2 個隨機森林 (以深度來說,有淺的、及深的決策樹)
  • 1 ~ 2 個類神經網路 (其中 1 個層數較多、另 1 個則較少)
  • 1 個線性模型
[註1]「Stacking Made Easy: An Introduction to StackNet by Competitions Grandmaster Marios Michailidis (KazAnova)」(本書中有些參考網址可能會因時間關係或資源轉移而失效,若發生時,建議可以試試透過網址中的一些關鍵字進行搜尋喔!)

改變超參數

相同的模型只要改變超參數就可以增加模型的多樣性。改變的方法如下:

  • 改變模型反映變數之間交互作用的程度 (譬如改變決策樹的深度等)。
  • 改變模型常規化的強度。
  • 改變模型的架構 (譬如改變類神經網路的層數或 unit 數)。

改變特徵

我們也可以改變使用的特徵或其組合,改變方法如下:

  • 使用/不使用特定的特徵組。
  • 縮放/不縮放特徵。
  • 是否進行大量的特徵選擇。
  • 排除/不排除極端值。
  • 改變資料預處理或轉換的方法。

改變看待問題的方法

我們可以改變看待問題的方法,使模型能預測出可以解決問題的輸出,並將預測結果作為特徵。請參考下列幾個方法:

  • 針對迴歸任務建立一個判斷預測值會在某個閾值以上或以下的二元分類模型。比如:對預測值為 0 以上 (比如營業額) 的迴歸任務,建立可以預測是否有販售的二元分類模型 (營業額為 0 或非 0 )。
  • 在多分類中建立只能預測一部份分類的模型,我們可以針對這幾個分類作最佳化。
  • 當特徵十分重要但含有相當多的缺失值時,建立一個預測缺失值的模型。
  • 對模型的預測值殘差 (標籤減去預測值) 建立新的模型。

選擇含有堆疊的模型

以下介紹幾個方法來選擇加入堆疊的模型,不過這些方法並非定論。

最簡單的方法就是反覆對每個模型都進行堆疊,準確度好的話就留下來,不好的話就排除。以自動化的方法來說,有在「6.2.3 不斷搜索的方法」中提到的 Greedy Forward Selection 以及將其簡化的方法。不過有時會因為計算量過大而無法使用這些方法。

我們可以考慮模型的相關係數在 0.95 以下、柯爾莫哥洛夫-斯米爾諾夫檢驗 (kolmogorov-smirnov test, K-S test) 結果在 0.05 以上、以及準確度的高低,來決定要選哪些模型參與集成。柯爾莫哥洛夫–斯米爾諾夫檢驗是判斷兩個群體的機率分布是否不同[請參考下方註解2~5]。這種方法是考慮若只選擇高準確度模型,可能會喪失多樣性的角度來做選擇。

以下分析將有助於模型的選擇:

  • 以記錄檔的形式輸出驗證結果,藉此掌握每個模型的分數。
  • 為了評價模型的多樣性,可以計算模型預測值的相關係數或是繪製模型預測值的散佈圖。
  • 將驗證模型時獲得的分數以及單獨提交該模型預測值時的 Public Leaderboard 分數繪製成散佈圖,這樣一來就可以掌握模型為什麼在驗證評價時得到好的分數,在 Public Leaderboard 的分數卻不好。
[註2]「朝世界第一個資料科學家邁進〜Kaggle 參賽報告 3〜 (Kysmo's Tech Blog)」

[註3]「The Good, the Bad and the Blended (Toxic Comment Classification Challenge)」
[註4]「An easy way to calculate model correlations (Toxic Comment Classification Challenge)」
[註5]Kolmogorov-Smirnov 檢驗統計量僅觀察值的分布而非值的順序,因此我們必須注意只要值的分布相同,即使預測值的順序,也就是資料的預測值大小關係不同,統計量也會很小。為了彌補這一點,可以考慮使用斯皮爾曼等級相關係數。

Author's Opinion

關於集成對解決方案的意義有許多的討論。最常見的是討論將好幾百個模型集成後建立模型,即使稍微提升了模型的準確度,但究竟意義何在?對此,筆者 (T) 有下列幾個想法:

  • 堆疊是一種簡單又有效混和多個模型的方法。
  • 實務上,有案例證明,任務中只要稍微提升準確度就可以帶來很大的效益。
  • 我們可以藉此比較集成達到的準確度以及使用簡單方法達到的準確度。

從數據分析競賽的價值及趣味性的角度來看,參賽者應該要能解釋問題、提取有效特徵並進行分析,才能在競賽中獲得優勝,筆者還是希望競賽可以保有這樣的形式。對筆者來說,其實不太喜歡那些只要集成多個模型就能獲得優勝的競賽。

本文節錄自《Kaggle 競賽攻頂秘笈 - 揭開 Grandmaster 的特徵工程心法,掌握制勝的關鍵技術》,由旗標科技授權轉載。