魚佬:百行代碼入手數(shù)據(jù)挖掘賽!
作者:魚佬,武漢大學(xué),Datawhale成員
本實踐以科大訊飛xDatawhale聯(lián)合舉辦的數(shù)據(jù)挖掘賽為例,給出了百行代碼Baseline,幫助學(xué)習(xí)者更好地結(jié)合賽事實踐。同時,在如何提分上進行了詳細解讀,以便于大家進階學(xué)習(xí)。
數(shù)據(jù)及背景
給定實際業(yè)務(wù)中借款人信息,邀請大家建立風(fēng)險識別模型,預(yù)測可能拖欠的借款人。
實踐&數(shù)據(jù)下載地址:https://challenge.xfyun.cn/topic/info?type=car-loan&ch=dw-sq-1
實踐代碼
Baseline采用LightGBM模型,進行了必要的注釋和代碼實現(xiàn),分數(shù)為0.58左右。
源碼如下:

上分策略

上述Baseline是一個較為簡單的Baseline,試跑排名第8。如果想常掛榜首,需要考慮持續(xù)優(yōu)化,這里給出幾種方法:
1.?加入特征工程
本代碼實踐僅使用了賽題原始的特征,并沒有進行過多的特征工程,這里還是很值得優(yōu)化,并且相信會有很多提升點。特征工程對比賽結(jié)果的影響非常大,這里給出常見的幾種特征工程操作的介紹:特征交互、特征編碼和特征選擇。
特征交互
交互特征的構(gòu)造非常簡單,使用起來卻代價不菲。如果線性模型中包含有交互特征時,那它的訓(xùn)練時間和評分時間就會從 O(n) 增加到 O(n2),其中 n 是單一特征的數(shù)量。
特征和特征之間組合
特征和特征之間衍生
特征編碼
one-hot編碼
label-encode編碼
特征選擇
特征選擇技術(shù)可以精簡掉無用的特征,以降低最終模型的復(fù)雜性,它的最終目的是得到一個簡約模型,在不降低預(yù)測準確率或?qū)︻A(yù)測準確率影響不大的情況下提高計算速度。
特征選擇不是為了減少訓(xùn)練時間(實際上,一些技術(shù)會增加總體訓(xùn)練時間),而是為了減少模型評分時間
2.?進行參數(shù)優(yōu)化
對于模型的參數(shù)部分baseline部分并沒有進行過多的優(yōu)化和實驗,當(dāng)然這也是個比較大的優(yōu)化的,下面給出幾種調(diào)參的參考方法。
貪心調(diào)參
先使用當(dāng)前對模型影響最大的參數(shù)進行調(diào)優(yōu),達到當(dāng)前參數(shù)下的模型最優(yōu)化,再使用對模型影響次之的參數(shù)進行調(diào)優(yōu),如此下去,直到所有的參數(shù)調(diào)整完畢。
網(wǎng)格調(diào)參
sklearn 提供GridSearchCV用于進行網(wǎng)格搜索,只需要把模型的參數(shù)輸進去,就能給出最優(yōu)化的結(jié)果和參數(shù)。相比起貪心調(diào)參,網(wǎng)格搜索的結(jié)果會更優(yōu),但是網(wǎng)格搜索只適合于小數(shù)據(jù)集,一旦數(shù)據(jù)的量級上去了,很難得出結(jié)果。
貝葉斯調(diào)參
給定優(yōu)化的目標函數(shù)(廣義的函數(shù),只需指定輸入和輸出即可,無需知道內(nèi)部結(jié)構(gòu)以及數(shù)學(xué)性質(zhì)),通過不斷地添加樣本點來更新目標函數(shù)的后驗分布(高斯過程,直到后驗分布基本貼合于真實分布)。簡單的說,就是考慮了上一次參數(shù)的信息,從而更好的調(diào)整當(dāng)前的參數(shù)。
3.?嘗試新的模型
作為Baseline部分僅使用經(jīng)典的LightGBM作為訓(xùn)練模型,我們還能嘗試XGBoost、CatBoost和NN(神經(jīng)網(wǎng)絡(luò)),這里推薦兩篇Datawhale成員吳忠強的文章做參考。
上分利器
XGBoost模型
- https://blog.csdn.net/wuzhongqiang/article/details/104854890
LightGBM模型
- https://blog.csdn.net/wuzhongqiang/article/details/105350579事實上
4.?進行模型融合
模型融合是一種能在各種的機器學(xué)習(xí)任務(wù)上提高準確率的強有力技術(shù),可謂是機器學(xué)習(xí)比賽大殺器,現(xiàn)在介紹基礎(chǔ)上分和進階上分兩種方式。
基礎(chǔ)上分
簡單平均和加權(quán)平均是常用的兩種比賽中模型融合的方式。其優(yōu)點是快速、簡單。
平均:(簡單實用)
簡單平均法
加權(quán)平均法
投票:
簡單投票法
加權(quán)投票法
綜合:
排序融合
log融合
進階上分
stacking在眾多比賽中大殺四方,但是跑過代碼的小伙伴想必能感受到速度之慢,同時stacking多層提升幅度并不能抵消其帶來的時間和內(nèi)存消耗,實際環(huán)境中應(yīng)用還是有一定的難度。
此外,在有答辯環(huán)節(jié)的比賽中,主辦方也會一定程度上考慮模型的復(fù)雜程度,所以說并不是模型融合的層數(shù)越多越好的。
stacking:
構(gòu)建多層模型,并利用預(yù)測結(jié)果再擬合預(yù)測。
blending:
選取部分數(shù)據(jù)預(yù)測訓(xùn)練得到預(yù)測結(jié)果作為新特征,帶入剩下的數(shù)據(jù)中預(yù)測。
boosting/bagging
當(dāng)然在比賽中將加權(quán)平均、stacking、blending等混用也是一種策略,可能會收獲意想不到的效果哦!
關(guān)注公眾號,回復(fù)“數(shù)據(jù)挖掘”可分別加入魚佬的數(shù)據(jù)挖掘戰(zhàn)隊群,與競賽大神經(jīng)驗交流,賽題也會在群內(nèi)更新發(fā)布
