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