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