編者按:Kaggle競(jìng)賽對(duì)很多數(shù)據(jù)科學(xué)愛(ài)好者來(lái)說(shuō)都不陌生,今天論智君為大家?guī)?lái)Abhay Pawar總結(jié)的進(jìn)入Kaggle2%的技巧。以下是對(duì)原文的編譯。
過(guò)去幾年,我創(chuàng)建了很多研究特征并建立更好地機(jī)器學(xué)習(xí)模型的方法。這些簡(jiǎn)單強(qiáng)大的技巧幫我在Instacart Market Basket Analysis競(jìng)賽中得到了前2%的名次,不單單在競(jìng)賽中,這些技巧在其他任務(wù)中也運(yùn)用到了。
用數(shù)字?jǐn)?shù)據(jù)創(chuàng)建任何監(jiān)督式學(xué)習(xí)模型中,最重要的一個(gè)方面就是完全理解特征。觀察模型的partial dependence plot可以幫助了解模型在任意特征下的輸出變化。
但是,這些圖存在的問(wèn)題是,它們都需要用經(jīng)過(guò)訓(xùn)練的模型創(chuàng)建。如果我們能直接從訓(xùn)練數(shù)據(jù)中創(chuàng)建圖形,就更有助于了解數(shù)據(jù)。事實(shí)上,它能幫助我們做以下工作:
理解特征
辨別噪聲特征(這是最有趣的部分!)
處理特征(feature engineering)
特征重要性
特征debugging
泄漏檢測(cè)和理解
模型監(jiān)控
為了更易于使用,我會(huì)在本文中用一個(gè)名為featexp的Python包表示出來(lái),同時(shí)會(huì)講解它是如何用于特征研究的。我們將利用Kaggle上的Home Credit Default Risk競(jìng)賽中的數(shù)據(jù)集,該競(jìng)賽的任務(wù)是根據(jù)數(shù)據(jù)預(yù)測(cè)信用違約者。
1. 特征理解
如果因變量(目標(biāo)變量)是二元的,所有的點(diǎn)要么分布在0,要么分布在1,散點(diǎn)圖是無(wú)法工作的。對(duì)于連續(xù)的目標(biāo),數(shù)據(jù)點(diǎn)太多會(huì)難以理解目標(biāo)和特征趨勢(shì)。但是Featexp可以解決這一問(wèn)題,創(chuàng)建更好的散點(diǎn)圖。讓我們?cè)囋嚢桑?/p>
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)
特征 vs. 目標(biāo)的散點(diǎn)圖
Featexp首先用橫軸的數(shù)字特征創(chuàng)建人口,之后計(jì)算每段人口上目標(biāo)的平均值,然后作為豎軸。在我們的案例中,目標(biāo)平均值指的是違約率。散點(diǎn)圖表示,DAYS_BIRTH負(fù)值越大(年齡越大),違約率越低。這比較好理解,因?yàn)槟贻p人更容易委員。這一折線圖幫助我們了解了特征所反映的顧客特點(diǎn),以及它是如何影響模型的。右側(cè)的圖表展示了每一階段人口所含的顧客數(shù)量。
2. 辨別噪聲特征
噪聲特征會(huì)造成過(guò)度擬合,所以辨別它們時(shí)有一定難度。在featexp中,你可以輸入一個(gè)測(cè)試集(或驗(yàn)證集),比較在訓(xùn)練或測(cè)試中的特征趨勢(shì),來(lái)確定噪聲。
get_univariate_plots(data=data_train, target_col='target', data_test=data_test, features_list=['DAYS_EMPLOYED'])
訓(xùn)練和測(cè)試中的特征趨勢(shì)比較
Featexp通過(guò)兩種尺度計(jì)算出圖中結(jié)果:
趨勢(shì)相關(guān)性(在測(cè)試圖中):如果特征在訓(xùn)練和驗(yàn)證集上并沒(méi)有表現(xiàn)出相同的趨勢(shì),就有可能導(dǎo)致過(guò)度擬合。因?yàn)槟P蛯W(xué)習(xí)的東西并不能應(yīng)用于測(cè)試數(shù)據(jù)中。趨勢(shì)相關(guān)性能幫助我們了解訓(xùn)練趨勢(shì)和測(cè)試趨勢(shì)之間的相似程度。而上述特征有99%的相關(guān)性,說(shuō)明并無(wú)太多噪聲。
趨勢(shì)變化:趨勢(shì)方向突然和重復(fù)的改變都有可能暗示特征的出現(xiàn),但是這類(lèi)特征的改變也可能會(huì)因?yàn)槠渌卣魃厦拷M人數(shù)不同而產(chǎn)生。所以,違約路不能與其他組相比較。
下方的特征圖由于沒(méi)有同樣的趨勢(shì),所以相關(guān)性為85%。這兩個(gè)尺度可以用來(lái)減少噪聲特征。
當(dāng)特征較多時(shí),減少趨勢(shì)相關(guān)特征非常容易,因?yàn)樗鼈兓ハ噙B接。這會(huì)導(dǎo)致更少的過(guò)度擬合,其他相關(guān)特征會(huì)避免信息損失。另外,要注意不要丟掉過(guò)多重要的特征,因?yàn)檫@可能導(dǎo)致性能下降。同時(shí),你不能用特征重要性辨別噪聲,因?yàn)樗鼈円埠苤匾?/p>
利用不同時(shí)間點(diǎn)中的測(cè)試數(shù)據(jù)結(jié)果會(huì)更好,因?yàn)檫@樣可以驗(yàn)證特征趨勢(shì)是否會(huì)隨時(shí)間而改變。
Featexp中的gettrendstats()函數(shù)會(huì)為每個(gè)特征返回一個(gè)帶有趨勢(shì)相關(guān)性和變化的數(shù)據(jù)框架。
from featexp import get_trend_stats
stats = get_trend_stats(data=data_train, target_col='target', data_test=data_test)
讓我們?cè)囋囋跀?shù)據(jù)中減少低相關(guān)性的特征,看看結(jié)果會(huì)如何變化:
不同特征選擇的AUC
可以看到,從越高的趨勢(shì)相關(guān)性開(kāi)始減少特征,排行榜上的AUC就越高。保留重要特征后,AUC分?jǐn)?shù)提升到了0.74。有趣的是,測(cè)試AUC并不如LB AUC變化的多。完整代碼:github.com/abhayspawar/featexp/blob/master/featexp_demo.ipynb
3. 特征處理
通過(guò)觀察圖表,可以創(chuàng)建更好的特征;了解掌握數(shù)據(jù),可以進(jìn)行更好的特征工程處理。但是除此之外,這些工作還能讓你改進(jìn)現(xiàn)有的特征。讓我們看看另一個(gè)特征EXT_SOURCE_1:
EXT_SOURCE_1值越高的顧客,違約率越低,但是,第一組數(shù)值(約有8%)的違約率,并不足訊這一特征趨勢(shì),它的負(fù)值約為-99.985,并且其中的人數(shù)非常多。這可能表明其中有特殊值,所以不符合整體規(guī)律。不過(guò)非線性模型在學(xué)習(xí)這類(lèi)關(guān)系時(shí)不會(huì)受阻,但是對(duì)于線性回歸這類(lèi)的線性模型,在含有如此特殊值和null值的情況下,應(yīng)該輸入有著相同違約率的值,而不是簡(jiǎn)單地輸入平均值。
4. 特征重要性
Featexp還能幫你估算特征重要性。DAYSBIRTH和EXT_SOURCE_1都展現(xiàn)出較好的趨勢(shì)。但是EXT_SOURCE_1中的人數(shù)大多集中在一個(gè)特殊的組中,這有可能表明它并不如DAYSBIRTH重要。我們用XGBoost模型的特征重要性驗(yàn)證后的確符合這一結(jié)論。
5. 特征debugging
觀察Featexp的散點(diǎn)圖,有助于在復(fù)雜特征工程代碼中找出bug,你只需做兩件事:
檢查特征的人數(shù)分布是否正確。
在呈現(xiàn)在散點(diǎn)圖之前,先自己預(yù)測(cè)特征趨勢(shì)是怎樣的,如果和自己估計(jì)的相差較大,就有可能存在問(wèn)題。這種預(yù)測(cè)過(guò)程在搭建機(jī)器學(xué)習(xí)模型時(shí)非常有趣!
6. 泄漏檢測(cè)
數(shù)據(jù)從目標(biāo)泄漏到特征可能會(huì)導(dǎo)致過(guò)度擬合,泄露特征具有很高的特征重要性,但是想要了解某一特征中泄漏為什么會(huì)發(fā)生具有一定難度,不過(guò)通過(guò)Featexp圖表可以幫助你理解。
在下方的圖中,“Null”一欄中的違約率是0%,其他數(shù)值都是100%。很顯然,這是泄漏發(fā)生的極端情況。只要當(dāng)客戶違約,特征才會(huì)有一個(gè)數(shù)值。產(chǎn)生這種情況的原因可能是bug的存在,或者實(shí)際只針對(duì)違約者進(jìn)行的特征計(jì)算(在這種情況下會(huì)降低)。弄清楚泄露特征的問(wèn)題才能使debug的速度加快。
7. 模型監(jiān)控
由于Featexp可以計(jì)算兩個(gè)數(shù)據(jù)及之間的趨勢(shì)關(guān)系,它也可以用來(lái)監(jiān)控模型。每次當(dāng)模型重新訓(xùn)練后,新的訓(xùn)練數(shù)據(jù)可以和經(jīng)過(guò)測(cè)試的訓(xùn)練數(shù)據(jù)相比較。趨勢(shì)之間的關(guān)系可以幫你監(jiān)控,當(dāng)特征中某處發(fā)生變化,它和目標(biāo)的關(guān)系有何改變。
結(jié)語(yǔ)
這些簡(jiǎn)單技巧幫助我在現(xiàn)實(shí)和Kaggle上搭建了更好的模型,只需要15分鐘,就能用Featexp創(chuàng)建清晰明了的模型,讓我們對(duì)數(shù)據(jù)和模型特征了解更多。
-
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8505瀏覽量
134678 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1224瀏覽量
25463
原文標(biāo)題:我進(jìn)入Kaggle前2%的秘密——Featexp
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Kaggle機(jī)器學(xué)習(xí)/數(shù)據(jù)科學(xué)現(xiàn)狀調(diào)查

機(jī)器學(xué)習(xí)特征選擇方法總結(jié)
基于onepanel使用kaggle api提交結(jié)果和下載數(shù)據(jù)集的步驟
kaggle泰坦尼克生存預(yù)測(cè)實(shí)施步驟
談Kaggle機(jī)器學(xué)習(xí)之模型融合

Kaggle沒(méi)有否認(rèn)將被谷歌收購(gòu)
AT燒錄軟件Progisp和使用手冊(cè)和對(duì)于ISP編程進(jìn)入不了編程模式的總結(jié)

如何很容易地將數(shù)據(jù)共享為Kaggle數(shù)據(jù)集

騰訊宣布其人工智能球隊(duì)獲首屆谷歌足球Kaggle競(jìng)賽冠軍
Kaggle神器LightGBM的最全解讀

如何從13個(gè)Kaggle比賽中挑選出的最好的Kaggle kernel
PyTorch教程5.7之在Kaggle上預(yù)測(cè)房?jī)r(jià)

評(píng)論