Stacking:Catboost、Xgboost、LightGBM、Adaboost、RF etc
阿新 • • 發佈:2019-02-10
歷史 最終 edi 全球 ssi 使用 bm算法 oos cat
python風控評分卡建模和風控常識(博客主親自錄制視頻教程)
https://study.163.com/course/introduction.htm?courseId=1005214003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share
http://www.360doc.com/content/18/1015/10/60075508_794857307.shtml
http://www.sohu.com/a/259742009_787107
任務 :精品旅行服務成單預測
提供了5萬多名用戶在境外旅行APP(黃包車)中的瀏覽行為記錄和歷史訂單記錄(具體數據和字段如下五張表所示),其中用戶在瀏覽APP之後有三種可能,購買精品旅遊服務,或普通旅行服務,還有部分用戶則不會下單。需要分析用戶的個人信息、歷史記錄和瀏覽行為等,預測用戶是否會在短期內購買精品旅遊服務。
(訓練集瀏覽記錄一百三十三萬條,測試集33萬條)
- Tab1 用戶個人信息表(用戶id、性別、省份、年齡段)
- Tab2 用戶瀏覽記錄表(用戶id、行為類型、發生時間)
- Tab3 用戶歷史訂單表(用戶id、訂單id、訂單時間、訂單類型、旅遊城市、國家、大陸)
- Tab4 待預測訂單表(id、訂單類型 1 精品 0普通)
- Tab4 用戶評論數據(用戶id、訂單id、評分、標簽、評論內容)
比賽成績
- 2018-02-08 AUC: 0.9764 B榜 Rank 2(Stacking:Catboost、Xgboost、LightGBM、Adaboost、RF etc.)
- 2018-02-07 AUC: 0.9589 A榜 Rank 3(Weight Average:0.65 * Catboost + 0.35 * XGBoost)
- 2018-01-21 AUC: 0.9733 半程冠軍 (Single model:Catboost)
代碼獲取:
比賽方案
- 數據預處理:首先對數據進行清洗處理缺失值,瀏覽記錄表中的1-4類無順序,5-9類有順序,一方面對567*9這種補齊8操作,另一方面發現訂單歷史記錄中的下單時間戳和瀏覽記錄的7操作時間一樣,對於歷史訂單有訂單但在瀏覽記錄中對應時間點沒有7操作的記錄補齊7操作,還有基本信息缺失處理如性別的缺失處理等。
- 特征工程:特征設計主要從 (歷史訂單 + 瀏覽行為 + 時間特征 + 文本評論) 這幾方面展開,並根據特征方差和特征與label的相關系數&繪圖進行特征選擇,具體特征在如下。
- 模型選擇:由於其中包括瀏覽記錄是屬於類別特征,選用對類別特征直接支持且在泛化能力強不易過擬合的Catboost算法,和LightGBM算法。
- 模型融合:最後模型融合使用Stacking的方式,特征分三份:第一層使用(參數不一樣)的10個Catboost、xgboost和lightGBM訓練,第二層使用xgboost融合,最後三個stacking結果再次融合,融合方法采用概率大取更大、小取更小,通俗的理解是在表現效果 (AUC) 相差不大的多個模型中,去選取對該條樣本預測更自信的模型作為最終結果。(全集特征+兩份有重合不完全特征80%(根據特征相關性,強耦合的特征分開))單獨Stacking:0.9746,三份stacking融合0.97640,單模型0.9735
- 由於部分用戶瀏覽記錄很少(只有幾條),導致這些用戶的很多特征維度為空,屬於“冷啟動”問題,單獨建立在其歷史特征和評論特征維度進行預測。
模型設計與模型融合
特征工程
特征按照比賽時間進展在文件夾feature中,分別為1 ~ 10_extract_feature.py,以下根據特征所屬類別(歷史訂單 + 瀏覽行為 + 時間特征 + 文本評論 + 交互)進行分類,具體特征提取方法可以看其中註釋,另外特征工程運行時間較長,完整的特征文件下載:
精品旅行服務預測Rank2特征文件
獲取方式:
總結如下:
- 歷史訂單特征
- 歷史訂單數量
- 歷史出現精品訂單 1 的數量和占比
- 歷史出現普通訂單 0 的次數和占比
- 用戶最近一次出行是否為精品旅行 1
- 歷史紀錄中城市的精品占比
- 歷史訂單是否出現過精品訂單 1 (leak)
- 歷史訂單最近一次是什麽類型 0 / 1
- 歷史訂單最近一次去的州、國家、城市
- 瀏覽行為特征(全部:指用戶所有的瀏覽記錄,對應:指該次購買對應的瀏覽記錄)
- 全部瀏覽記錄中0-9出現的次數
- 對應瀏覽記錄中0-9出現的次數
- 全部瀏覽記錄瀏覽時間
- 對應瀏覽記錄瀏覽時間
- 對應瀏覽記錄是否出現5 6
- 全部瀏覽記錄是否出現56 67 78 89
- 對應瀏覽記錄是否出現56 67 78 89
- 全部瀏覽記錄是否出現567 678 789 566
- 對應瀏覽記錄是否出現567 678 789 566
- 全部瀏覽記錄是否出現5678 6789
- 全部瀏覽記錄是否出現56789
- 對應瀏覽記錄是否出現56789
- action中大於6出現的次數
- 對應點擊2-4的和值 與 5-9 的比值
- 全部點擊2-4的和值 與 5-9 的比值
- 對應瀏覽記錄 1-9 操作所用平均時間
- 全部瀏覽記錄 1-9 操作所用平均時間
- 全部action 最後一次 的類型
- 全部 action 倒數第2-6次操作的類型
- 最後1 2 3 4 次操作的時間間隔
- 時間間隔的均值 最小值 最大值 方差
- action 最後4 5 6 次操作時間的方差 和 均值
- 對應瀏覽記錄瀏覽平均時間(可以改成最近幾天的)
- 對應瀏覽記錄 1-9 操作所用平均時間
- 全部瀏覽記錄 1-9 操作所用平均時間
- 每日用戶action的次數
- 每日用戶action的時間
- 最近1周的使用次數 eval-auc:0.963724
- 離最近的1-9的距離(間隔操作次數) 只取 56789
- 總體操作 1 2 3 4 5 6 7 8 9 次數的排名 rank
- 對應操作 1 2 3 4 5 6 7 8 9 次數的排名 rank
- 用戶使用APP的天數,分別是否老用戶
- 用戶當前時間距離最近歷史訂單時間間隔
- 文本評論特征
- 評論的長度
- 評論的標簽個數(強特征 漲分1個萬)
- 用戶訂單評分的統計特征(平均分、方差)
- 用戶評論各類分數的比例,最近一次評論的分數
- 分用戶普通訂單評論的平均分和精品訂單平均分
- 使用snownlp對用戶評論進行情感分析,統計用戶訂單評論得分
- 用戶特征
- 是否新用戶
- 性別 是否男 是否女 是否缺失
- 所屬省份/城市(one-hot encode)
- 所屬年齡段(one-hot encode)
- 時間特征
- 以最近的瀏覽記錄作為要預測的用戶訂單時間
- 當前時間點的月份、當月第幾天、星期幾、是否周末
- 用戶歷史訂單最多的月份、當月第幾天、星期幾、是否周末
- 是否為該城市的旅遊旺季
- 季節特征
運行環境和代碼結構
代碼運行環境,包含主要軟件和庫
代碼結構
- 在boutique_travel是整個比賽的代碼,數據存儲路徑在
- data文件夾用來存放數據,
- 其中包含提取的特診集(train6/test6、train_feature1/test_feature1、data_train/data_test)
- submit文件夾是提交的結果文件,其下面子文件夾包含各個單模型的預測結果
- feature文件夾存放提取特征的代碼
- 包含1 ~ 10_extract_feature.py 每部分代碼對應提取的特征均有註釋
- model文件夾存放模型訓練、預測和融合的代碼
- 1_submit.py是概率文件融合和修改預測結果為比賽要求的提交格式
- 2~6分別是catboost、xgboost、lightGBM等的單模型和5折CV訓練預測
- 7是特征分三分,分別做兩層的stacking learning,最後再對表現結果差不多的概率文件結果融合
- model文件夾存儲訓練好的模型
車輛檢測及型號識別,準確率接近90%
全球AI挑戰-場景分類的比賽源碼(多模型融合)
https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share
Stacking:Catboost、Xgboost、LightGBM、Adaboost、RF etc