0
| 本文作者: AI研習(xí)社-譯站 | 2018-11-22 15:17 |
本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 :
My secret sauce to be in top 2% of a kaggle competition
作者 | Abhay Pawar
翻譯 | 就2 校對 | 醬番梨
整理 | 志豪
原文鏈接:
https://towardsdatascience.com/my-secret-sauce-to-be-in-top-2-of-a-kaggle-competition-57cff0677d3c
參加kaggle競賽確實(shí)是一件非常有趣而且令人上癮的事情。
前幾年,我找到了一些標(biāo)準(zhǔn)的流程來探索特征進(jìn)而建立起更好的機(jī)器學(xué)習(xí)模型。這些簡單但是強(qiáng)大的技術(shù)幫我在 Instacart 網(wǎng)站購物車分析競賽中排進(jìn)前2%,而且在其他地方,這這些方法也非常有用。所以,讓我們開始吧!
在一堆數(shù)據(jù)上,最重要的是,你要很好的理解這些特征。通過查看模型的特征依賴圖可以幫助你理解模型的輸出--隨著特征的變化。
但是,上面這些圖存在的問題是:他們是采用訓(xùn)練過的模型創(chuàng)建的。
如果我們可以直接從訓(xùn)練數(shù)據(jù)上直接創(chuàng)建,那就可以幫助我們更好的理解基礎(chǔ)數(shù)據(jù)。實(shí)際,它可以幫你完成下面的事情:
特征的理解
識別噪聲特征(最有趣的部分!)
特征工程
重要特征選擇
特征的調(diào)試
遺漏檢測和理解
模型監(jiān)控
為了便于于訪問,我決定將這些技術(shù)放到python 包 featexp 中,在本文中,我們將了解如何將這些技術(shù)用于特征探索。我們將在Kaggle上使用來自 Home Credit Default Risk 房屋信用違約風(fēng)險競賽的應(yīng)用程序數(shù)據(jù)集。競賽的目標(biāo)是利用提供給他們的數(shù)據(jù)來預(yù)測違約者。
1、特征的理解
特征與目標(biāo)的散點(diǎn)圖并沒有幫助
如果因變量(目標(biāo))是二元的,散點(diǎn)圖就不起作用,因?yàn)樗悬c(diǎn)都在0或1處。對于連續(xù)目標(biāo),太多的數(shù)據(jù)點(diǎn)使得很難理解目標(biāo)和特征趨勢。Featexp 創(chuàng)建了更好的圖標(biāo)來幫助解決這個問題。讓我們試試吧!
from featexp import get_univariate_plots
# Plots drawn for all features if nothing is passed in feature_list parameter.
get_univariate_plots(data=data_train, target_col='target',
features_list=['DAYS_BIRTH'], bins=10)DAYS_BIRTH (age)的特征與目標(biāo)圖
右側(cè) Featexp 創(chuàng)建了相同人數(shù)的柱狀圖 (x軸)。然后,它計算每個柱子中的目標(biāo)均值,并將其繪制在上面左邊的圖中。在我們的例子中,Y坐標(biāo) target是平均的違約率。
這個圖告訴我們,DAYS_BIRTH(較高年齡)的負(fù)值較高的客戶違約率較低。這是有道理的,因?yàn)槟贻p人通常更容易違約。這些圖幫助我們理解這個特征告訴了客戶什么,以及它將如何影響模型。右邊的圖顯示了每個柱子里顧客的數(shù)量。
2、識別噪聲特征
噪聲特征會導(dǎo)致過度擬合和識別它們并不容易。在featexp中,您可以通過測試集(或驗(yàn)證集),并比較訓(xùn)練/測試中的特征趨勢,以識別噪聲趨勢。
get_univariate_plots(data=data_train, target_col='target', data_test=data_test, features_list=['DAYS_EMPLOYED'])
訓(xùn)練集與試驗(yàn)集特征趨勢的比較
Featexp計算了在這些圖上顯示的兩個指標(biāo),這些圖有助于測量噪聲:
趨勢相關(guān)(見測試圖): 如果一個特性在訓(xùn)練集和評估集上不具有相同的趨勢w.r.t.目標(biāo),它會導(dǎo)致過度擬合。這是因?yàn)槟P驼趯W(xué)習(xí)一些在測試數(shù)據(jù)中不適用的東西。趨勢相關(guān)性有助于理解 訓(xùn)練集 / 訓(xùn)練集 趨勢的相似性,并用于計算訓(xùn)練集和測試集的平均目標(biāo)值。上述特征具有99%的相關(guān)性。似乎不是噪聲!
趨勢變化: 趨勢方向的突然重復(fù)變化可能意味著噪聲。但是,這種趨勢變化也可能發(fā)生,因?yàn)樵撝颖硎镜娜巳涸谄渌匦苑矫婢哂蟹浅2煌奶卣?,因此,它默認(rèn)的違約率無法和其他人群相比。
下面的特征不具有相同的趨勢,因此具有低的趨勢相關(guān)性85%。這兩個指標(biāo)可以用來去掉噪聲特征。
噪聲特征示例
當(dāng)有很多特征并且它們彼此相關(guān)時,降低-低趨勢相關(guān)特征效果很好。它可以減少過擬合和其他相關(guān)特性,避免信息丟失。不要刪除太多重要的特性也很重要,因?yàn)檫@可能導(dǎo)致性能下降。另外,您不能使用特性重要性來識別這些有噪聲的特性,因?yàn)樗鼈兛赡芟喈?dāng)重要,但仍然非常有噪聲!
使用來自不同時間段的測試數(shù)據(jù)會更有效,因?yàn)檫@樣您就可以確定特性趨勢是否會隨著時間的推移而保持不變。
featexp中的get_trend_stats()函數(shù)會返回一個具有趨勢關(guān)聯(lián)和每個特性變化的dataframe。
from featexp import get_trend_stats
stats = get_trend_stats(data=data_train, target_col='target', data_test=data_test)get_trend_stats() 返回Dataframe
讓我們嘗試在數(shù)據(jù)中刪除趨勢相關(guān)性較低的特征,看看結(jié)果如何改進(jìn)。
使用趨勢相關(guān)不同特征選擇下的AUC
我們可以看到,特征趨勢相關(guān)閾值越高,特征下降,排行榜上(LB) AUC越高。不刪除重要的特性進(jìn)一步將 AUC提高到0.74。有趣的是,測試AUC的變化沒有 排行 AUC大。完整的代碼可以在 featexp_demo 筆記本中找到。
3.特征工程
通過查看這些圖,有助于創(chuàng)建更好的特征。僅僅是對數(shù)據(jù)有更好的理解就可以產(chǎn)生更好的特征工程。但是,除此之外,它還可以幫助您改進(jìn)現(xiàn)有的特征。讓我們看看EXT_SOURCE_1的另一個特征:
特征 與 EXT_SOURCE_1的目標(biāo)圖
EXT_SOURCE_1的高價值客戶的違約率很低。但是,第一個柱(大約8%的默認(rèn)值)沒有遵循特征趨勢(先上升后下降)。它只有-99.985左右的負(fù)值,而且人口眾多。這可能意味著這些值是特殊值,因此不遵循特征趨勢。幸運(yùn)的是,非線性模型學(xué)習(xí)這種關(guān)系不會有問題。但是,對于邏輯回歸這樣的線性模型,這些特殊的值和空值(將作為一個單獨(dú)的 柱 顯示)應(yīng)該由一個具有相似違約率的 柱 賦值,而不是簡單地用特征均值進(jìn)行賦值。
4. 重要特征(特征選擇)
Featexp還幫助您判斷特征的重要性。DAYS_BIRTH和EXT_SOURCE_1都有很好的趨勢。但是,EXT_SOURCE_1的種群集中在特殊的值柱子中,這說明它可能不如DAYS_BIRTH重要?;赬GBoost模型的特征重要性,DAYS_BIRTH實(shí)際上比EXT_SOURCE_1更重要。
5、特征調(diào)試
查看Featexp的圖可以通過以下兩種方式幫助您捕獲復(fù)雜特征工程代碼中的bug:
零變異特征只顯示一個柱子
1、檢查特征的總體分布是否正確。我個人曾多次遇到過類似于上述的極端情況,都是由于小的bug引起的。
2、在查看這些圖之前,總是假設(shè)特征趨勢是什么樣子。特征趨勢看起來不像您預(yù)期的那樣,可能會提示一些問題。坦率地說,這種假設(shè)趨勢的過程使得構(gòu)建ML模型更加有趣!
6、遺漏特征檢測
從目標(biāo)到特征的數(shù)據(jù)遺漏將導(dǎo)致過擬合。 遺漏的特征一般具有很高的重要性。但是,理解為什么在一個特征中發(fā)生泄漏是困難的。查看特征圖可以幫助您實(shí)現(xiàn)這一點(diǎn)。
下面的特征在' null ' 柱子中有0%的默認(rèn)值,在所有其他的柱子中有100%的默認(rèn)值。顯然,這是遺漏的極端情況。這個特征只有在客戶默認(rèn)時才有值。那么這個特征是什么,這可能是由于一個bug,或者該特征實(shí)際上只是為默認(rèn)用戶填充的(在這種情況下,它應(yīng)該被刪除)。了解遺漏特征的問題將導(dǎo)致更快的調(diào)試。
理解為什么一個特征是應(yīng)該要去掉的
7、模型的監(jiān)控
由于featexp計算兩個數(shù)據(jù)集之間的趨勢相關(guān)性,因此它很容易用于模型監(jiān)控。每次重新訓(xùn)練模型時,新的訓(xùn)練數(shù)據(jù)可以與經(jīng)過良好測試的訓(xùn)練數(shù)據(jù)進(jìn)行比較(通常是首次構(gòu)建模型時的訓(xùn)練數(shù)據(jù))。趨勢相關(guān)可以幫助您監(jiān)控特征w.r.t.是否有任何變化,它與目標(biāo)的關(guān)系。
· · ·
做這些簡單的事情總是幫助我在現(xiàn)實(shí)生活和kaggle比賽上建立更好的模型。使用featexp需要15分鐘來查看這些說明文檔,這絕對是值得的,因?yàn)樵谀侵竽憔筒粫也坏椒较蛄恕?br style="color: rgb(53, 73, 94);font-family: "microsoft yahei", Arial;font-size: 16px;white-space: normal;background-color: rgb(255, 255, 255);"/>
對于探索特征,您還發(fā)現(xiàn)了什么其他有用的技巧和提示?我一直在尋找反饋。在評論中讓我知道,或者通過abhayspawar@gmail.com聯(lián)系我。感謝您的閱讀!雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?
長按鏈接點(diǎn)擊打開或點(diǎn)擊【進(jìn)入Kaggle競賽前 2% 的秘訣】:
http://ai.yanxishe.com/page/TextTranslation/1201
AI研習(xí)社每日更新精彩內(nèi)容,觀看更多精彩內(nèi)容:
等你來譯:
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。