Kaggle 競賽攻頂秘笈 - 揭開 Grandmaster 的特徵工程心法,掌握制勝的關鍵技術 | 生病了怎麼辦 - 2024年11月
Kaggle 競賽攻頂秘笈 - 揭開 Grandmaster 的特徵工程心法,掌握制勝的關鍵技術
Kaggle 是目前最大的資料科學競賽平台,這裡匯集世界各地超過 10 萬名資料科學家,解決各大企業公開於平台上面的資料及問題。Kaggle 曾經舉辦過總獎金一百萬美金的競賽,尋求各路好手解決癌症影像辨識的問題;也曾經有參賽者因為解決了一家壽險公司在 Kaggle 上發布的問題,因此順利進入該公司工作。因此,Kaggle 無疑是展現高超技術力,同時也是尋求優渥獎金、薪資、更好職位的途徑。
對於人工智慧的工程師、學生來說,Kaggle 平台提供了大量免費的資源:真實世界的資料集、各路好手的討論分享、以及累積實際操作的經驗等等。這些資源在一般課堂上幾乎很難取得,卻也是這領域最需要的知識與技能。
本書作者為四位 Kaggle 資料科學競賽專家,他們不僅透過實務上的角度解析各種特徵工程技術,超越一般教科書的視野;更重要的是提供各種技術、流程使用心得,讓讀者可以直接跳過嘗試、摸索的階段。試想下列的這些問題,不就是實務上經常會碰到的難處!而作者將會在書中闡述他們如何看待、解決這些事情:
● 如何最佳化模型的閾值來獲得最高的評價分數?
● 如何將資料經過編碼、降維等等轉換,以彰顯資料的特性?
● 如何依據問題的型態選擇模型,且依照模型的特性來提取適當的特徵?
● 如何正確進行時序資料的驗證以避免過度配適或資料外洩?
● 如何調整梯度提升決策樹、類神經網路的參數?
● 如何將自己所學的各種技術,進行有效的模型集成?
我們也在書中適時加上小編補充,讓讀者可以完整吸收四位專家的思想精髓,希望讀者閱讀本書之後,不僅可以在 Kaggle 競賽中締造絕佳成績,也相信讀者可以解決工作、研究中複雜且混亂的資料集。
讓我們一同走上資料科學的巔峰吧!
本書特色
● 國立成功大學資訊工程學系特聘教授 陳培殷博士 推薦
● 本書由施威銘研究室監修,內容易讀易懂,並加入大量「編註」與「小編補充」以幫助理解及補充必要知識。
● 集結 4 位 Kaggle 高手累積共 37 面獎牌的實戰經驗
● 整理當前實務上各種特徵工程的困難問題以及解決的方法
● 分享各種技術使用時機與實踐結果的寶貴心得
● 揭露 Kaggle 競賽高人一等的制勝精華
● 提供書中 Python 範例程式下載
作者簡介
門脇大輔 (Kadowaki Daisuke)
京都大學綜合人間學部畢業後,進入人壽保險公司擔任精算師約 10 年,主要負責商品開發及風險管理等工作。與 Kaggle 邂逅之後,決定放下過往的工作,開始以 Kaggle 或是程式競賽為生。Kaggle Competitions Master (Walmart Recruiting II: Sales in Stormy Weather 優勝、Coupon Purchase Prediction 第 3 名)、日本精算師協會正式會員。
Kaggle: www.kaggle.com/threecourse
Twitter: twitter.com/threecourse
撰寫本書第 4、6、7 章及第 1、2、3、5 章部分內容。
阪田隆司 (Sakata Ryuuji)
2012 年於京都大學修畢研究所課程,進入日本國內電子業,從事資料科學家及研究員的工作。由於工作關係對資料科學及機器學習產生興趣,2014 年開始參加 Kaggle 上的競賽,2019 年成為 Kaggle Competitions Grandmaster。
Kaggle: www.kaggle.com/rsakata
Twitter: twitter.com/sakata_ryuji
撰寫本書的第 3、5 章。
保坂桂佑 (Hosaka Keisuke)
畢業於東京大學綜合文化研究所廣域科學組,主要研究天體模擬。於資料分析顧問公司將近 10 年,並幫助企業進行資料分析業務。隨後進入網路服務企業,從事提升資料利用率的工作。目前工作主要為培養機器學習工程師及資料管理科學家。擁有 Kaggle Competitions Expert 的頭銜。
Kaggle: www.kaggle.com/hskksk
Twitter: twitter.com/free_skier
撰寫本書的第 1 章及第 6 章部分內容。
平松雄司 (Hiramatsu Yuji)
東京大學理學院物理系、理學院物理所畢業後,進入日本國內電子業知名企業,之後轉職至金融業,在金融公司擔任定量分析師,從事國內大型損保集團的風險精算業務。目前為 AXA 人壽保險公司高級資料分析科學家,並推動公司內資料分析業務。同時也是日本精算師協會準會員,以及東京大學醫學資料分析的研究員。2016 年左右開始參與 Kaggle 競賽,並於 2018 年成為 Kaggle Competitions Master。非常喜歡小熊玩偶。
Kaggle:www.kaggle.com/maxwell110
Twitter: twitter.com/Maxwell_110
撰寫本書第 2 章及第 7 章部分內容。
第 1 章 數據分析競賽是什麼?
1.1 什麼是數據分析競賽?
1.1.1 數據分析競賽的目的
1.1.2 提交預測結果與排行榜 (Leaderboard)
1.1.3 組隊參賽
1.1.4 獎金、獎品
1.2 Kaggle 平台簡介
1.2.1 Kaggle
1.2.2 Rankings (排名、頭銜制度)
1.2.3 Notebooks
1.2.4 Discussion
1.2.5 Datasets
1.2.6 Kaggle API
1.2.7 Newsfeed
1.2.8 實際舉辦過的數據分析競賽類別與案例
1.2.9 數據分析競賽的形式 (format)
1.3 從開始參加數據分析競賽到結束
1.3.1 參加數據分析競賽
1.3.2 同意規定和條約
1.3.3 下載資料
1.3.4 產生預測值
1.3.5 提交預測值
1.3.6 查看 Public Leaderboard
1.3.7 選擇最終預測值
1.3.8 查看 Private Leaderboard
1.4 參加數據分析競賽的意義
1.4.1 獲得獎金
1.4.2 獲得頭銜或排名
1.4.3 使用實際資料進行分析的經驗/技術
1.4.4 建立和其他資料科學家的交流
1.4.5 獲得就業機會
1.5 贏得優勝的秘訣
1.5.1 任務和評價指標 (Metric)
1.5.2 建立特徵
1.5.3 建立模型
1.5.4 評價模型
1.5.5 模型調整
1.5.6 集成學習 (Ensemble Learning)
1.5.7 數據分析競賽的流程
第 2 章 任務與評價指標
2.1 數據分析競賽的任務種類
2.1.1 迴歸任務 (Regression)
2.1.2 分類任務 (Classification):二元分類與多分類
2.1.3 推薦任務 (Recommendation)
2.1.4 圖像資料任務
2.2 數據分析競賽的資料集 (Dataset)
2.2.1 表格資料 (tabular data)
2.2.2 外部資料
2.2.3 時間序列資料
2.2.4 圖像或自然語言等資料
2.3 任務與評價指標
2.3.1 什麼是評價指標 (evaluation metrics)?
2.3.2 迴歸任務的評價指標
2.3.3 二元分類任務的評價指標:預測值為正例或負例的情況
2.3.4 二元分類任務的評價指標:預測值為正例機率的情況
2.3.5 多元分類 (Multiclass Classification) 任務的評價指標
2.3.6 推薦任務的評價指標:MAP@K
2.4 評價指標和目標函數
2.4.1 評價指標和目標函數的差異
2.4.2 自定義評價指標與目標函數
2.5 評價指標的最佳化
2.5.1 最佳化評價指標的方法
2.5.2 最佳化閾值
2.5.3 是否該使用 out-of-fold 來最佳化閾值?
2.5.4 針對預測機率的調整
2.6 最佳化評價指標的競賽實例
2.6.1 balanced accuracy 的最佳化
2.6.2 mean-F1 的閾值最佳化
2.6.3 最佳化 quadratic weighted kappa 閾值
2.6.4 最佳化MAE ─ 使用相似的自定義目標函數
2.6.5 MCC 的近似值:PR-AUC 及模型的選擇
2.7 資料外洩 (data leakage)
2.7.1 在無預期的情況下外洩有利於預測的資訊
2.7.2 驗證機制錯誤所造成的資料外洩
第 3 章 特徵提取
3.1 本章結構
3.2 模型和特徵
3.2.1 模型和特徵
3.2.2 初步 (Baseline) 模型
3.2.3 從決策樹 (Decision Tree) 的角度思考
3.3 缺失值的處理
3.3.1 維持缺失值
3.3.2 以代表值填補缺失值
3.3.3 使用其他變數來預測缺失值
3.3.4 由缺失值來建立一個全新的特徵
3.3.5 認識資料中的缺失值
3.4 數值變數的轉換
3.4.1 標準化 (standardization)
3.4.2 Min-Max 縮放方法
3.4.3 非線性轉換
3.4.4 Clipping
3.4.5 Binning (分組)
3.4.6 將數值轉換為排序
3.4.7 RankGauss
3.5 類別變數的轉換
3.5.1 One-hot encoding
3.5.2 Label encoding
3.5.3 Feature hashing
3.5.4 Frequency encoding
3.5.5 Target encoding
3.5.6 Embedding
3.5.7 處理次序變數
3.5.8 提取類別變數中值的意義
3.6 日期、時間變數的轉換
3.6.1 轉換日期、時間變數的要點
3.6.2 將日期、時間變數轉換為特徵
3.7 變數組合
3.8 結合其他表格資料
3.9 使用統計量
3.9.1 使用基本統計量
3.9.2 使用時間性統計量
3.9.3 限定條件範圍
3.9.4 轉換統計單位
3.9.5 關注商品
3.10 處理時間序列資料
3.10.1 什麼是時間序列資料?
3.10.2 使用比預測資料還舊的資訊
3.10.3 寬表格和長表格
3.10.4 lag 特徵
3.10.5 將資料與時間做連結的方法
3.10.6 可用於預測的資料時間
3.11 降維/非監督式學習特徵
3.11.1 主成分分析 (Principal Component Analysis, PCA)
3.11.2 非負矩陣分解 (Non-negative Matrix Factorization, NMF)
3.11.3 Latent Dirichlet Allocation (LDA)
3.11.4 線性判別分析 (Linear Discriminant Analysis,也叫 LDA)
3.11.5 t-SNE、UMAP
3.11.6 自編碼器(Autoencoder)
3.11.7 群聚分析 (Cluster analysis)
3.12 其他分析技巧
3.12.1 思考資料的運作背景
3.12.2 關注資料間的關係
3.12.3 關注相對值
3.12.4 關注位置資訊
3.12.5 自然語言的處理
3.12.6 自然語言處理方法與應用
3.12.7 運用主題模型 (Topic Model) 來轉換類別變數
3.12.8 處理影像特徵的方法
3.12.9 Decision Tree Feature Transformation
3.12.10 預測匿名化資料轉換前的值
3.12.11 修正錯誤的資料
3.13 從數據分析競賽案例看提取特徵的方法
3.13.1 Kaggle 的「Recruit Restaurant Visitor Forecasting」
3.13.2 Kaggle 的「Santander Product Recommendation」
3.13.3 Kaggle 的「Instacart Market Basket Analysis」
3.13.4 KDD Cup 2015
3.13.5 數據分析競賽中的其他技巧的案例
第 4 章 建立模型
4.1 什麼是模型?
4.1.1 什麼是模型?
4.1.2 建立模型的步驟
4.1.3 模型相關用語及要點
4.2 常用於數據分析競賽的模型
4.3 梯度提升決策樹 (Gradient Boosting Decision Tree, GBDT)
4.3.1 GBDT 概述
4.3.2 GBDT 的特性
4.3.3 主要的 GBDT 套件
4.3.4 使用 xgboost
4.3.5 使用 xgboost 的要點
4.3.6 lightgbm
4.3.7 catboost
4.4 類神經網路
4.4.1 類神經網路概要
4.4.2 類神經網路的特色
4.4.3 類神經網路的主要套件
4.4.4 建立類神經網路模型
4.4.5 Keras 使用方法及套件
4.4.6 類神經網路的參考架構
4.4.7 解法案例 - 類神經網路的新發展
4.5 線性模型
4.5.1 線性模型概要
4.5.2 線性模型的特徵
4.5.3 線性模型的主要套件
4.5.4 建立線性模型
4.5.5 使用線性模型的方法和要點
4.6 其他模型
4.6.1 K - 近鄰演算法 (K-Nearest Neighbor algorithm, KNN)
4.6.2 隨機森林 (Random Forest, RF)
4.6.3 Extremely Randomized Trees (ERT)
4.6.4 Regularized Greedy Forest (RGF)
4.6.5 Field-aware Factorization Machines (FFM)
4.7 模型的其他要點與技巧
4.7.1 資料含有缺失值
4.7.2 特徵數量太多
4.7.3 表格資料中的標籤沒有 1 對 1 時
4.7.4 pseudo labeling
第 5 章 模型評價
5.1 什麼是模型評價?
5.2 一般資料的驗證手法
5.2.1 hold-out 法
5.2.2 交叉驗證
5.2.3 stratified k-fold
5.2.4 group k-fold
5.2.5 leave-one-out
5.3 時間序列資料的驗證手法
5.3.1 時間序列資料的 hold-out 法
5.3.2 時間序列資料的交叉驗證 (依時序進行驗證)
5.3.3 時間序列資料的交叉驗證 (不管時序直接劃分資料的方法)
5.3.4 驗證時間序列資料的注意事項
5.3.5 Kaggle 的「Recruit Restaurant Visitor Forecasting」
5.3.6 Kaggle 的「Santander Product Recommendation」
5.4 驗證的要點與技巧
5.4.1 進行驗證的目的
5.4.2 模擬劃分訓練資料和測試資料來建立驗證資料
5.4.3 當訓練資料和測試資料的分布不同
5.4.4 利用 Leaderboard 的資訊
5.4.5 驗證資料或 Public Leaderboard 的過度配適
5.4.6 重新提取交叉驗證中每個 fold 的特徵
5.4.7 增加可使用的訓練資料
第 6 章 模型調整
6.1 超參數調整
6.1.1 探索超參數的技巧
6.1.2 調整超參數時的設定
6.1.3 調整超參數的要點
6.1.4 使用貝式最佳化來搜索超參數
6.1.5 GBDT 的超參數及其調整
6.1.6 類神經網路的超參數及其調整
6.1.7 線性模型的超參數及其調整
62 選擇特徵與特徵的重要性
6.2.1 使用單便量統計方法
6.2.2 使用特徵重要性的方法
6.2.3 不斷搜索的方法
6.3 不平衡分類的處理
第 7 章 模型集成
7.1 什麼是集成?
7.2 簡單的集成方法
7.1.1 平均、加權平均
7.2.2 多數決、加權多數決
7.2.3 注意事項及其他技巧
7.3 堆疊 (stacking)
7.3.1 推疊概要
7.3.2 作為建立特徵方法的堆疊
7.3.3 執行堆疊
7.3.4 堆疊的要點
7.3.5 使用 hold-out 資料的預測值來集成
7.4 什麼模型適合集成?
7.4.1 多使用不同類型的模型
7.4.2 改變超參數
7.4.3 改變特徵
7.4.4 改變看待問題的方法
7.4.5 選擇含有堆疊的模型
7.5 數據分析競賽中的集成案例
7.5.1 Kaggle「Otto Group Product Classification Challenge」
7.5.2 Kaggle「Home Depot Product Search Relevance」
7.5.3 Kaggle「Home Credit Default Risk」
附錄A
A.1 數據分析競賽的參考資料
A.2 參考文獻
A.3 本書參考的數據分析競賽