整理下這個項目的思路:
對於一般實習或校招生,項目可能比較少。關鍵要把項目的重點,難點,是如何做的,怎么解決的,學到了什么說清楚。
項目中用到的技術棧好好准備,面試的時候一定要講清楚,如果能在底層深挖一下會更好。
〇、項目簡介
2020.01 - 2020.02 阿里天池數據挖掘比賽——快來一起挖掘幸福感。
數據:
阿里雲上面給Excel形式數據,數據量在1.2萬;100多屬性:收入、學歷、地域、心理預期、性別、身高體重......
對應的幸福感指數:1/2/3/4/5
目標:
訓練DNN模型,由屬性=》幸福感指數
訓練集數據給出,而測試集未給出,用來檢驗上傳模型的優劣:
用均方差MSE()衡量預測准確度,MSE值越小越好
一、數據預處理
缺失值處理:(學歷缺失)
- 通常用:均值填充,但效果不如找規律賦值(因為學歷缺失一般意味着學歷不佳)
- 實在匱乏才刪除屬性。即使90%缺失也可能有相當的價值。
數據分箱
(用處不是很大,作用是防止過擬合)
二、特征工程:觀察數據的特征,創造新的特征組合。
關於新特征,我的發現主要是兩個:“相對值” & “反常現象”。
(1)相對值(幸福是相對的,不僅在於絕對值,更在於相對值)
- 相對收入= 絕對收入 - 基准值 (基准可以是:城市農村、性別、年齡段、與配偶比):
構造新特征 or 改造原有特征
- BMI:體重/身高^2,組合出的新特征,更能反映問題 1+1>2,與目標happiness更高的相關性,遠好於各個單一屬性。
分箱:特征離散化以后,簡化邏輯回歸模型,降低過擬合的風險。(合理分箱:BMI用了世衛組織的分箱標准:正常、超重、肥胖、特別肥胖) (年齡也分箱:5/10歲分為一段,比一歲歲好用,不容易過擬合。70 后 80后 90后 00后)
(2)反常現象
"研究生收入" 問題:在讀本科生、研究生的收入相對同齡已經工作的同學,收入絕對劣勢,但是其幸福感反倒高很多。
於是,找出:學歷高&在讀,強制加 "人為工資" 進去。
三、深度學習 DNN模型選擇+組合、調參
lgb+xgb(兩個都是boosting),然后stacking模型融合
boosting:多個決策樹串行,減小bias偏差;stacking:不同模型串行,類似搭積木。
- 決策樹:基於信息熵增益,每次選擇增益最大的屬性分裂(-Σnlogn)
- 多個決策樹boosting(串行迭代)變為GBDT(梯度boosting決策樹)
- GBDT--> lgb:對連續值,分段離散(簡化)后計算
一些困難:
(1)計算迭代慢:
融合模型(lgb、xgb先內部串行--boosting,后之間串行--stacking)--> 單獨用 lgb(輕量化模型):約提高迭代速率15-20倍。
(2)idea副作用:(比如上面的學歷缺失、相對收入就是idea)(看似很好、很合理的idea,到實際結果,竟然是副作用)
一開始小組成員都是:直接加 多個新特征,直接3個模型bagging+boosting完整走一遍,迭代速度超慢,很難一個個驗證效果
改用單獨lgb輕量級模型,一個個驗證嘗試,剔除了大概一半新特征(不僅沒有提高,還有副作用)
不斷改進 效果顯著,
最終成績進入所有比賽隊伍前1%