編者按:Kaggle競賽對很多數(shù)據(jù)科學愛好者來說都不陌生,今天論智君為大家?guī)鞟bhay Pawar總結(jié)的進入Kaggle2%的技巧。以下是對原文的編譯。
過去幾年,我創(chuàng)建了很多研究特征并建立更好地機器學習模型的方法。這些簡單強大的技巧幫我在Instacart Market Basket Analysis競賽中得到了前2%的名次,不單單在競賽中,這些技巧在其他任務中也運用到了。
用數(shù)字數(shù)據(jù)創(chuàng)建任何監(jiān)督式學習模型中,最重要的一個方面就是完全理解特征。觀察模型的partial dependence plot可以幫助了解模型在任意特征下的輸出變化。
但是,這些圖存在的問題是,它們都需要用經(jīng)過訓練的模型創(chuàng)建。如果我們能直接從訓練數(shù)據(jù)中創(chuàng)建圖形,就更有助于了解數(shù)據(jù)。事實上,它能幫助我們做以下工作:
理解特征
辨別噪聲特征(這是最有趣的部分?。?/p>
處理特征(feature engineering)
特征重要性
特征debugging
泄漏檢測和理解
模型監(jiān)控
為了更易于使用,我會在本文中用一個名為featexp的Python包表示出來,同時會講解它是如何用于特征研究的。我們將利用Kaggle上的Home Credit Default Risk競賽中的數(shù)據(jù)集,該競賽的任務是根據(jù)數(shù)據(jù)預測信用違約者。
1. 特征理解
如果因變量(目標變量)是二元的,所有的點要么分布在0,要么分布在1,散點圖是無法工作的。對于連續(xù)的目標,數(shù)據(jù)點太多會難以理解目標和特征趨勢。但是Featexp可以解決這一問題,創(chuàng)建更好的散點圖。讓我們試試吧!
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. 目標的散點圖
Featexp首先用橫軸的數(shù)字特征創(chuàng)建人口,之后計算每段人口上目標的平均值,然后作為豎軸。在我們的案例中,目標平均值指的是違約率。散點圖表示,DAYS_BIRTH負值越大(年齡越大),違約率越低。這比較好理解,因為年輕人更容易委員。這一折線圖幫助我們了解了特征所反映的顧客特點,以及它是如何影響模型的。右側(cè)的圖表展示了每一階段人口所含的顧客數(shù)量。
2. 辨別噪聲特征
噪聲特征會造成過度擬合,所以辨別它們時有一定難度。在featexp中,你可以輸入一個測試集(或驗證集),比較在訓練或測試中的特征趨勢,來確定噪聲。
get_univariate_plots(data=data_train, target_col='target', data_test=data_test, features_list=['DAYS_EMPLOYED'])
訓練和測試中的特征趨勢比較
Featexp通過兩種尺度計算出圖中結(jié)果:
趨勢相關(guān)性(在測試圖中):如果特征在訓練和驗證集上并沒有表現(xiàn)出相同的趨勢,就有可能導致過度擬合。因為模型學習的東西并不能應用于測試數(shù)據(jù)中。趨勢相關(guān)性能幫助我們了解訓練趨勢和測試趨勢之間的相似程度。而上述特征有99%的相關(guān)性,說明并無太多噪聲。
趨勢變化:趨勢方向突然和重復的改變都有可能暗示特征的出現(xiàn),但是這類特征的改變也可能會因為其他特征上每組人數(shù)不同而產(chǎn)生。所以,違約路不能與其他組相比較。
下方的特征圖由于沒有同樣的趨勢,所以相關(guān)性為85%。這兩個尺度可以用來減少噪聲特征。
當特征較多時,減少趨勢相關(guān)特征非常容易,因為它們互相連接。這會導致更少的過度擬合,其他相關(guān)特征會避免信息損失。另外,要注意不要丟掉過多重要的特征,因為這可能導致性能下降。同時,你不能用特征重要性辨別噪聲,因為它們也很重要。
利用不同時間點中的測試數(shù)據(jù)結(jié)果會更好,因為這樣可以驗證特征趨勢是否會隨時間而改變。
Featexp中的gettrendstats()函數(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)
讓我們試試在數(shù)據(jù)中減少低相關(guān)性的特征,看看結(jié)果會如何變化:

不同特征選擇的AUC
可以看到,從越高的趨勢相關(guān)性開始減少特征,排行榜上的AUC就越高。保留重要特征后,AUC分數(shù)提升到了0.74。有趣的是,測試AUC并不如LB AUC變化的多。完整代碼:github.com/abhayspawar/featexp/blob/master/featexp_demo.ipynb
3. 特征處理
通過觀察圖表,可以創(chuàng)建更好的特征;了解掌握數(shù)據(jù),可以進行更好的特征工程處理。但是除此之外,這些工作還能讓你改進現(xiàn)有的特征。讓我們看看另一個特征EXT_SOURCE_1:
EXT_SOURCE_1值越高的顧客,違約率越低,但是,第一組數(shù)值(約有8%)的違約率,并不足訊這一特征趨勢,它的負值約為-99.985,并且其中的人數(shù)非常多。這可能表明其中有特殊值,所以不符合整體規(guī)律。不過非線性模型在學習這類關(guān)系時不會受阻,但是對于線性回歸這類的線性模型,在含有如此特殊值和null值的情況下,應該輸入有著相同違約率的值,而不是簡單地輸入平均值。
4. 特征重要性
Featexp還能幫你估算特征重要性。DAYSBIRTH和EXT_SOURCE_1都展現(xiàn)出較好的趨勢。但是EXT_SOURCE_1中的人數(shù)大多集中在一個特殊的組中,這有可能表明它并不如DAYSBIRTH重要。我們用XGBoost模型的特征重要性驗證后的確符合這一結(jié)論。
5. 特征debugging
觀察Featexp的散點圖,有助于在復雜特征工程代碼中找出bug,你只需做兩件事:
檢查特征的人數(shù)分布是否正確。
在呈現(xiàn)在散點圖之前,先自己預測特征趨勢是怎樣的,如果和自己估計的相差較大,就有可能存在問題。這種預測過程在搭建機器學習模型時非常有趣!
6. 泄漏檢測
數(shù)據(jù)從目標泄漏到特征可能會導致過度擬合,泄露特征具有很高的特征重要性,但是想要了解某一特征中泄漏為什么會發(fā)生具有一定難度,不過通過Featexp圖表可以幫助你理解。
在下方的圖中,“Null”一欄中的違約率是0%,其他數(shù)值都是100%。很顯然,這是泄漏發(fā)生的極端情況。只要當客戶違約,特征才會有一個數(shù)值。產(chǎn)生這種情況的原因可能是bug的存在,或者實際只針對違約者進行的特征計算(在這種情況下會降低)。弄清楚泄露特征的問題才能使debug的速度加快。
7. 模型監(jiān)控
由于Featexp可以計算兩個數(shù)據(jù)及之間的趨勢關(guān)系,它也可以用來監(jiān)控模型。每次當模型重新訓練后,新的訓練數(shù)據(jù)可以和經(jīng)過測試的訓練數(shù)據(jù)相比較。趨勢之間的關(guān)系可以幫你監(jiān)控,當特征中某處發(fā)生變化,它和目標的關(guān)系有何改變。
結(jié)語
這些簡單技巧幫助我在現(xiàn)實和Kaggle上搭建了更好的模型,只需要15分鐘,就能用Featexp創(chuàng)建清晰明了的模型,讓我們對數(shù)據(jù)和模型特征了解更多。
-
機器學習
+關(guān)注
關(guān)注
66文章
8546瀏覽量
136520 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1235瀏覽量
26115
原文標題:我進入Kaggle前2%的秘密——Featexp
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Kaggle機器學習/數(shù)據(jù)科學現(xiàn)狀調(diào)查
機器學習特征選擇方法總結(jié)
基于onepanel使用kaggle api提交結(jié)果和下載數(shù)據(jù)集的步驟
談Kaggle機器學習之模型融合
Kaggle沒有否認將被谷歌收購
AT燒錄軟件Progisp和使用手冊和對于ISP編程進入不了編程模式的總結(jié)
如何很容易地將數(shù)據(jù)共享為Kaggle數(shù)據(jù)集
騰訊宣布其人工智能球隊獲首屆谷歌足球Kaggle競賽冠軍
Kaggle神器LightGBM的最全解讀
如何從13個Kaggle比賽中挑選出的最好的Kaggle kernel
PyTorch教程5.7之在Kaggle上預測房價
Abhay Pawar總結(jié)的進入Kaggle2%的技巧
評論