Kaggle债务违约预测冠军经验分享
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
目錄(?)[-]
引言
債務違約預測是Kaggle中的一個比賽,本文將介紹取得第一名成績的方法,本次比賽的目標包括兩個方面。其一是建立一個模型,債務人可以通過它來更好地進行財務方面的決策。其二是債權(quán)人可以預測這個債務人何時會陷入到財務方面的困境。最終目的是,通過預測未來兩年內(nèi)債務違約的概率,來改進現(xiàn)有的信用評分制度。這是一個極度復雜和困難的Kaggle挑戰(zhàn),因為銀行和各種借貸機構(gòu)一直都在不斷地尋找和優(yōu)化信用評分的算法。這個模型是銀行用來判定是否準許某一筆貸款的。根據(jù)這個模型提供的信息,銀行可以更好地作出決策,借貸者也可以更好地進行財務方面的規(guī)劃,以免將來陷入債務危機。?
本次挑戰(zhàn)允許團隊使用集成模型和算法,如XGBoost, Gradient Boosting, 隨機森林(Random Forest), 限制玻爾茲曼機(Restricted Boltzman Machine Neural Networks), Adaboost。以及使用先進的堆疊技術(shù)(stacking)和投票分類器來準確地預測違約概率。?
我們的測量和排名嚴格使用ROC曲線的AUC值。我們遵照了Agile過程,來確保我們分塊、并行地完成關(guān)鍵的任務。我們很快地失敗,又很快地在此基礎上迭代,以此來確保最高效的工作和產(chǎn)出。我們使用復雜貝葉斯優(yōu)化算法,獲取最好的超參數(shù)集,大幅減少了測試和交叉驗證的時間。這為我們提升排名、獲得AUC最高分提供了很大的幫助。?
通過我們對工具的利用、團隊的協(xié)作、以及一個使我們產(chǎn)出最大化的流程,我們不僅躋身排名榜的前列,還打破了第一名的成績,獲得了這次挑戰(zhàn)的冠軍。
SWOT分析法
SWOT分析法讓我們可以讓我們思路更清晰,專注于利用我們最大的優(yōu)勢(Strengths),了解我們的弱點(Weaknesses),利用現(xiàn)有的機會(Opportunities),警惕潛在的威脅(Threats)。?
SWOT方法使我們可以在正確的方向前進,避開很多令人頭疼的事兒。
優(yōu)勢(Strengths):利用我們已有的優(yōu)勢
- 利用堆疊技術(shù)和Agile過程的經(jīng)驗
- 協(xié)作團隊的經(jīng)驗和技能可以相互補充
- 吸取之前的Kaggle挑戰(zhàn)的經(jīng)驗和教訓
- 使用Agile過程處理并行工作的經(jīng)驗
弱勢(weaknesses):我們需要提升的領域
- 時間有限,限制了探索的深度和廣度
- 對新工具和模型的不熟悉,大大降低了我們的戰(zhàn)斗力
- 邊做邊學,拖慢了整個進程
- 對于所使用的新技術(shù),相關(guān)的資源十分稀少
機會(opportunities):可以利用的機會,及實踐得到的經(jīng)驗
- 了解如何制定策略,調(diào)整模型、算法和參數(shù),來達到對違約幾率的最佳預測
- 在使用貝葉斯優(yōu)化算法時,獲得實時的經(jīng)驗
- 嘗試使用深度學習(Theano/Keras)來進行違約預測
威脅(threats):我們需要減輕和控制的危機
- 數(shù)據(jù)集比較小,這對模型的泛化有較大的挑戰(zhàn)。這影響了模型的構(gòu)造,最終影響了預測的精度。
- 對AUC的公差嚴格到了小數(shù)點后10,000位
- 前5%的目標分數(shù)太高了-簡直不可行
Agile過程
我們使用‘Agile過程’作為本項目的流程,這是由Bernard發(fā)明的。它特別為了機器學習優(yōu)化過,因為他需要整合很大一塊內(nèi)容,包括數(shù)據(jù)是如何被處理的,建模、測試的,以及很多更傳統(tǒng)的開發(fā)生命周期。?
Agile過程利用了‘分塊’的概念,以一種快速的方式來完成工作任務。它整合了很多并行的任務,很快地失敗,又很快地迭代。它發(fā)揮了強大的作用,使產(chǎn)出最大化。這是我們在短短兩星期內(nèi)獲得第一名的主要因素之一。
Agile過程是什么?
敏捷過程是一個標準的全行業(yè)的傳統(tǒng)軟件開發(fā)和工程的生命周期。它基于迭代開發(fā),需要通過發(fā)展自組織、跨職能的團隊之間的協(xié)作來進行。本工程使用的Agile是一個改進的形式,它是專門為機器學習設計的。它和傳統(tǒng)流程的組成部分比較相似,大多數(shù)任務是并行地而不是順序的。流程的組成部分包括數(shù)據(jù)預處理(包括缺失值插補),探索性數(shù)據(jù)分析(如單變量分布,二維分布,相關(guān)分析),特征工程(如增加特征,刪除特征,PCA),算法選擇(如有監(jiān)督),超參數(shù)優(yōu)化,模型擬合,模型評估,模型再造,交叉驗證,預測,以及最后的提交。不同于傳統(tǒng)機器學習的順序流程,一次只能進行一個模型的選擇和調(diào)整,并且在缺失值插補的方法沒有確定之前無法進行模型的擬合。Agile過程充分利用缺失值插補,特征工程和模型擬合的并行執(zhí)行,使多個人在這個項目上協(xié)作工作。
為何使用Agile過程?
在我們的團隊領導伯納德的指導下,我們腦子里從一開始就有整個的Agile過程。由于大部分流程并行完成,并且我們每個人都分配了非常具體的任務,沒有人等著別人的結(jié)果來完成自己的工作。我們可以快速評估模型和戰(zhàn)術(shù)方法,并能夠快速失敗和迭代,快速搞清楚什么可行,什么不可行。轉(zhuǎn)化為成果方面,就是到了第一周的周中,我們已經(jīng)在排行榜上排名前100。在第一周結(jié)束時,我們到達了第2名,這給我們留下了整整一個星期去挑戰(zhàn)第一名。
試探性數(shù)據(jù)分析
從下面的缺失值圖像可以看出,變量‘負債率’和‘家屬數(shù)’分別有20%和3%左右的數(shù)據(jù)缺失。?
?
我們嘗試了不同的缺失值估算方法,包括KNN,平均值,隨機數(shù)和中位數(shù)。然而,我們發(fā)現(xiàn),不去補充缺失值,模型反而會有更好的表現(xiàn)。?
我們也做了PCA。結(jié)果表明,選擇5個主成分只能解釋總方差的66%。由于只有10個特征,PCA可能不適合這個項目。?
?
數(shù)據(jù)集的一個有趣的特性是,除了“年齡”,幾乎每列有一些異常值。例如,列‘逾期30-59天’,‘逾期60-89天’和‘逾期90天’都有大約0.2%的異常值,異常值為98或96。這些數(shù)字實際上是在調(diào)查中輸入的,表示用戶不愿意透露這些信息。這些會對單變量分布有很大的影響。還有變量‘循環(huán)貸款無抵押額度(RevolvingUtilizationOfUnsecuredLines)’,是信用卡額度和除分期付款,如購車貸款的個人限制之和除以總貸款余額。因此,這個變量的正常范圍是0與1之間,而它有大于5000的異常值。因此,我們必須處理這個問題。
?
對于每一列,我們檢測基于第95百分位數(shù)的異常值,基于中位數(shù)的異常值和基于標準偏差的異常值,并用投票來決定最終結(jié)果。如果三種方法中,如果有兩種方法都認為某一個點是一個異常值,那么我們就確定這個點是一個異常值。然后,我們將異常值替換為該列的中值或最不異常的異常值。至于使用哪種替換,取決于具體的列。?
過濾掉異常值改變了原有的數(shù)據(jù)結(jié)構(gòu)。在此之前,這三個異常變量是高度相關(guān)的。在濾值之后,相關(guān)性消失了。如下面的圖片所示。
特征工程
下圖是特征重要性圖示,從圖中可以看出,‘循環(huán)貸款無抵押額度(RevolvingUtilizationOfUnsecuredLines)’,‘負債率’和‘月收入’是最重要的三個變量。
?
這個信息對于特征工程來說是十分重要的。下面是特征工程的工作流程。?
我們嘗試了幾種不同的方法。我們把一些列組合在了一起,生成了一個新的列,并且刪除了原有的列。例如,負債率乘以月收入得到月負債。我們對違約變量分配了權(quán)重。對于每一個違約變量,我們做了一個邏輯回歸,然后使用得到的R^2除以三個R^2的和,作為它的權(quán)重。最后,我們構(gòu)造了7個訓練集和7個測試集。這些數(shù)據(jù)集使樸素貝葉斯和邏輯回歸的AUC值從0.7左右提升到了0.85左右。然而,對基于樹的模型,這些數(shù)據(jù)集并沒什么幫助。?
模型實施戰(zhàn)略
我們?yōu)榱吮敬翁魬?zhàn),構(gòu)造了4個模型,并評估了他們的準確率。團隊實施了一個并行流程,所有的模型同步構(gòu)造。在自動優(yōu)化過程中,每發(fā)現(xiàn)一個更優(yōu)的參數(shù)集,這些參數(shù)會用于整個流程循環(huán),即時地進行協(xié)同工作。
-
簡單和集成模型:?
作為構(gòu)造模型的第一步,我們訓練了邏輯回歸和樸素貝葉斯模型,并且這兩個模型的精度(曲線下面積,AUC值)都是0.7左右。上面提到的這兩個模型提供了很好的基線,可以用于比較更加復雜的模型,比如堆疊、投票以及混合模型的表現(xiàn)。梯度提升和隨機森林模型作為集成模型的一部分它們的AUC評分在文檔中。 -
優(yōu)化的堆疊模型:?
堆疊模型將貝葉斯分類器以非線性的方式組合在一起。這個通過在元級別(meta-level)上的訓練集上學習,來進行組合的過程,稱作元學習(meta learner),它把獨立運算的基礎分類器集成為一個高級的分類器,這稱作元分類器(meta classifier)。這個2層的堆疊模型,使用梯度提升和XGBoost作為基礎分類器。它們的分類結(jié)果被輸入一個邏輯回歸模型,這個邏輯回歸模型就是元分類器。堆疊模型使得分達到了0.8685左右,進入了Kaggle排行榜前30名。 -
投票分類模型:?
投票模型根據(jù)獲得最多票數(shù)的類別對沒有標簽的對象進行分類。我們使用加權(quán)平均算法,對每個分類器輸出的可能性值進行計算,得出最終預測的結(jié)果。盡管團隊開始時只有兩個分類器,最終的結(jié)果有12個分類器,包括7個梯度提升的,1個樸素貝葉斯的,3個隨機森林的和一個AdaBoost分類器。如果測試結(jié)果表明會對交叉驗證得分的提高有貢獻的話,就會增加分類器的數(shù)量。投票模型把AUC的得分提高到了0.869左右,使我們到達了排行榜的第8名。 -
投票和堆疊的混合模型:?
最終使我們超越現(xiàn)有第一名的模型,就是投票和堆疊的混合模型。這個模型包括2個梯度提升的,2個隨機森林的,1個AdaBoost分類器,1個嚴格玻爾茲曼機(estricted Boltzman Machine,RBM)。并且引入了神經(jīng)網(wǎng)絡算法。這個模型將得分提到了0.869574,使我們Eigenauts隊成為了排行榜上第一名。
貝葉斯優(yōu)化
貝葉斯優(yōu)化被用來做什么?
幾乎所有的機器學習算法都包括一些超參數(shù),也叫做調(diào)整參數(shù)。這些參數(shù)和常規(guī)參數(shù)不同,它們不是模型的一部分,不會在模型擬合中被自動調(diào)整。它們是在另外的步驟中被調(diào)整的。一些超參數(shù)的例子,包括在嶺回歸和lasso回歸中的正則項lambda、支持向量機中的C項、基于樹的算法中樹的數(shù)量(如,隨機森林、梯度提升機)。?
共有4中超參數(shù)優(yōu)化方法:1、網(wǎng)格搜索 2、隨機搜索 3、基于梯度的優(yōu)化 4、貝葉斯優(yōu)化。在這4中方法之中,我們嘗試了網(wǎng)格搜索,隨機搜索和貝葉斯優(yōu)化。我們發(fā)現(xiàn)貝葉斯優(yōu)化是最高效的,可以自動達到最優(yōu)。
?
為什么貝葉斯優(yōu)化比網(wǎng)格搜索和隨機搜索更高效呢?
在尋找最優(yōu)超參數(shù)值的時候,需要提前確定一些數(shù)據(jù)。首先,也是最重要的,任何算法都需要一個目標函數(shù),來找它的最大值。或者一個損失函數(shù),來找它的最小值。然后,需要確定搜索范圍,一般通過上限和下限來確定。可能還有一些對于算法的參數(shù),比如搜索的步長。
網(wǎng)格搜索可能是應用最廣泛的超參數(shù)搜索算法了,因為它確實很簡單。網(wǎng)格搜索通過查找搜索范圍內(nèi)的所有的點,來確定最優(yōu)值。它返回目標函數(shù)的最大值或損失函數(shù)的最小值。給出較大的搜索范圍,以及較小的步長,網(wǎng)格搜索是一定可以找到全局最大值或最小值的。但是,網(wǎng)格搜索一個比較大的問題是,它十分消耗計算資源,特別是,需要調(diào)優(yōu)的超參數(shù)比較多的時候(例如,隨機森林里有8個左右)。因此,當人們實際使用網(wǎng)格搜索來找到最佳超參數(shù)集的時候,一般會先使用較廣的搜索范圍,以及較大的步長,來找到全局最大值或者最小值可能的位置。然后,人們會縮小搜索范圍和步長,來達到更精確的最值。盡管這樣做可以降低所需的時間,但是由于目標參數(shù)一般是非凸的,如圖1所示,所以人們常常就會錯過了全局的最大值或最小值,因為他們在第一次測試的時候找到了一個局部的最值。
隨機搜索的思想和網(wǎng)格搜索比較相似,只是不再測試上界和下界之間的所有值,只是在搜索范圍中隨機取樣本點。它的理論依據(jù)是,如果隨即樣本點集足夠大,那么也可以找到全局的最大或最小值,或它們的近似值。通過對搜索范圍的隨機取樣,隨機搜索一般會比網(wǎng)格搜索要快一些。但是和網(wǎng)格搜索的快速版(非自動版)相似,結(jié)果也是沒法保證的。
貝葉斯優(yōu)化尋找使全局達到最值的參數(shù)時,使用了和網(wǎng)格搜索、隨機搜索完全不同的方法。網(wǎng)格搜索和隨機搜索在測試一個新的點時,會忽略前一個點的信息。而貝葉斯優(yōu)化充分利用了這個信息。貝葉斯優(yōu)化的工作方式是通過對目標函數(shù)形狀的學習,找到使結(jié)果向全局最大值提升的參數(shù)。它學習目標函數(shù)形狀的方法是,根據(jù)先驗分布,假設一個搜集函數(shù)。在每一次使用新的采樣點來測試目標函數(shù)時,它使用這個信息來更新目標函數(shù)的先驗分布。然后,算法測試由后驗分布給出的,全局最值最可能出現(xiàn)的位置的點。
對于貝葉斯優(yōu)化,一個主要需要注意的地方,是一旦它找到了一個局部最大值或最小值,它會在這個區(qū)域不斷采樣,所以它很容易陷入局部最值。為了減輕這個問題,貝葉斯優(yōu)化算法會在勘探和開采(exploration and exploitation)中找到一個平衡點。
勘探(exploration),就是在還未取樣的區(qū)域獲取采樣點。開采(exploitation),就是根據(jù)后驗分布,在最可能出現(xiàn)全局最值的區(qū)域進行采樣。
我們用于進行貝葉斯優(yōu)化的包是一個Python包,叫做“bayes_opt”。下面的視頻(http://blog.nycdatascience.com/wp-content/uploads/2016/09/bayes_opt_visualisation.mp4)顯示了“bayes_opt”包是如何保證勘探和開采的平衡的。
何時貝葉斯優(yōu)化無法返回最優(yōu)值?
貝葉斯優(yōu)化,盡管比網(wǎng)格搜索和隨機搜索要好一些,但是它也不是魔法,所以有些東西還是要好好考慮一下。根據(jù)我們的經(jīng)驗,迭代次數(shù)(也就是選取采樣點的數(shù)量),和搜索范圍的大小的比值,十分重要。讓我們假想一個極端的例子,來說明這一點。想象你要調(diào)整兩個超參數(shù),每個參數(shù)的范圍是從1到1000.然后你把迭代指數(shù)設置成了2,算法幾乎肯定會返回一個錯誤結(jié)果,因為他還沒充分學習到目標函數(shù)的形狀。
登頂之路
ROC/AUC曲線
畫出接受者操作特性曲線(ROC)可以看出預測違約或不違約的二分類器的表現(xiàn)。這個圖像是最后的混合模型,它在Kaggle榜單上得到了第一名。在ROC曲線中,真正率(或靈敏度)是對于參數(shù)不同切分點的假正率(100-靈敏度)的函數(shù)。?
ROC曲線的曲線下面積(AUC)是對于一個參數(shù)分割兩組數(shù)據(jù)的效果的度量,在這里是違約或不違約。根據(jù)這張圖可以看出,我們最好的模型,曲線下面積大約是0.89。這表示,在訓練集中隨機抽取一個標簽為1(可能違約)的數(shù)據(jù),他的得分比從訓練集中抽取的標簽為0(不太可能違約)的數(shù)據(jù)高的概率為89%。
結(jié)果和發(fā)現(xiàn)
下面使我們基于特征工程和預測模型在用戶債務違約數(shù)據(jù)的表現(xiàn),得到的結(jié)果和發(fā)現(xiàn)。
- 模型在不進行缺失值查補的情況下,表現(xiàn)好像更好一點。
- 相比于簡單的集成模型,堆疊和投票,以及兩者的結(jié)合,一般會有更高的預測能力。
- 對于簡單模型(樸素貝葉斯和邏輯回歸),特征工程可以把AUC的分數(shù)中0.7左右提到0.85左右。但是對于基于樹的方法,這并沒什么用。
- 當我們向著Kaggle榜的前2%接近的時候,對于AUC,每提升0.0001,會變得越來越難。
得到的經(jīng)驗以及一些見解
這個項目讓團隊學習到了很多關(guān)于機器學習和預測模型的寶貴的經(jīng)驗。它們使我們在這樣高度競爭的數(shù)據(jù)科學競賽中拿到了第一的好成績:
- 超參數(shù)調(diào)整是十分耗時的,最好把它進行團隊分工,并行工作。
- 交叉驗證十分關(guān)鍵,在測試不同數(shù)據(jù)集對模型準確度的影響上話時間是很值當?shù)摹?/li>
- 模型的調(diào)整應該在更高精度上進行,因為數(shù)據(jù)集比較小。(不論是特征的數(shù)量還是數(shù)據(jù)的條目)
- 遵照Agile并行進程,它被證明是一個使成功最大化的因素。
后繼的工作
當我們考慮還可以做什么的時候,一些事情來到了我們的腦海。這些任務可以看作是將來提高的一個愿景。
- 使用Theano / Keras來進行深度學習模型的調(diào)整,并且比較它和堆疊、投票算法的準確度和表現(xiàn)。
- 嘗試增加新的特征多項式,以及轉(zhuǎn)化過的特征,并衡量預測的精度。
結(jié)論
第一名的小伙伴在這次機器學習挑戰(zhàn)中達到了目標,可以應用多種模型、算法、以及策略,來達到相對較好的結(jié)果。他們最終上榜的得分是 0.869574,在本次Kaggle競賽925個競爭者中排名第一。這使小伙伴們很有成就感,因為我們只有兩個星期來進行準備,提交挑戰(zhàn)的結(jié)果。
頂總結(jié)
以上是生活随笔為你收集整理的Kaggle债务违约预测冠军经验分享的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文本的特征属性选择
- 下一篇: Word2Vec中文语料实战