Python信貸風(fēng)控模型:Adaboost,XGBoost,SGD, SVC,隨機(jī)森林, KNN預(yù)測信貸違約支付|附代
要求撰寫關(guān)于信貸風(fēng)控模型的研究報(bào)告,包括一些圖形和統(tǒng)計(jì)輸出。
在此數(shù)據(jù)集中,我們必須預(yù)測信貸的違約支付,并找出哪些變量是違約支付的最強(qiáng)預(yù)測因子?以及不同人口統(tǒng)計(jì)學(xué)變量的類別,拖欠還款的概率如何變化?
有25個(gè)變量:
ID:?每個(gè)客戶的ID
LIMIT_BAL:?金額
SEX:?性別(1 =男,2 =女)
4.教育程度:(1 =研究生,2 =本科,3 =高中,4 =其他,5 =未知)
5.婚姻:?婚姻狀況(1 =已婚,2 =單身,3 =其他)
6.年齡:
7.??PAY_0:??2005年9月的還款狀態(tài)(-1 =正常付款,1 =延遲一個(gè)月的付款,2 =延遲兩個(gè)月的付款,8 =延遲八個(gè)月的付款,9 =延遲9個(gè)月以上的付款)PAY_2:??2005年8月的還款狀態(tài)(與上述相同)
PAY_3:?2005年7月的還款狀態(tài)(與上述相同)
PAY_4:??2005年6月的還款狀態(tài)(與上述相同)
PAY_5:??2005年5月的還款狀態(tài)(與上述相同)
PAY_6:?還款狀態(tài)2005年4月?的賬單(與上述相同)
BILL_AMT1:?2005年9月的賬單金額
BILL_AMT2:??2005年8月的賬單金額
BILL_AMT3:?賬單金額2005年7月?的賬單金額
BILL_AMT4:?2005年6月的賬單金額
BILL_AMT5:??2005年5月的賬單金額
BILL_AMT6:?2005年4月
PAY_AMT1??2005年9月,先前支付金額
PAY_AMT2??2005年8月,以前支付的金額
PAY_AMT3:?2005年7月的先前付款
PAY_AMT4:??2005年6月的先前付款
PAY_AMT5:??2005年5月的先前付款
PAY_AMT6:?先前的付款額在2005年4月
default.payment.next.month:?默認(rèn)付款(1 =是,0 =否)
現(xiàn)在,我們知道了數(shù)據(jù)集的整體結(jié)構(gòu)。因此,讓我們應(yīng)用在應(yīng)用機(jī)器學(xué)習(xí)模型時(shí)通常應(yīng)該執(zhí)行的一些步驟。
第1步:導(dǎo)入
import?numpy?as?npimport?matplotlib.pyplot?as?plt
所有寫入當(dāng)前目錄的結(jié)果都保存為輸出。
dataset?=?pd.read_csv('Card.csv')
現(xiàn)在讓我們看看數(shù)據(jù)是什么樣的

第2步:數(shù)據(jù)預(yù)處理和清理
dataset.shape
(30000,?25)
意味著有30,000條目包含25列

從上面的輸出中可以明顯看出,任何列中都沒有對象類型不匹配。
#檢查數(shù)據(jù)中Null項(xiàng)的數(shù)量,按列計(jì)算。dataset.isnull().sum()

步驟3.數(shù)據(jù)可視化和探索性數(shù)據(jù)分析
#?按性別檢查違約者和非違約者的計(jì)數(shù)數(shù)量sns.countplot

從上面的輸出中可以明顯看出,與男性相比,女性的整體拖欠付款更少

可以明顯看出,那些擁有婚姻狀況的人的已婚狀態(tài)人的默認(rèn)拖欠付款較少。

sns.pairplot

sns.jointplot

男女按年齡分布
g.map(plt.hist,'AGE')

dataset['LIMIT_BAL'].plot.density

步驟4.找到相關(guān)性
X.corrwith

從上圖可以看出,最負(fù)相關(guān)的特征是LIMIT_BAL,但我們不能盲目地刪除此特征,因?yàn)楦鶕?jù)我的看法,這對預(yù)測非常重要。ID無關(guān)緊要,并且在預(yù)測中沒有任何作用,因此我們稍后將其刪除。
#?繪制熱圖sns.heatmap(corr)

點(diǎn)擊標(biāo)題查閱往期內(nèi)容

PYTHON用戶流失數(shù)據(jù)挖掘:建立邏輯回歸、XGBOOST、隨機(jī)森林、決策樹、支持向量機(jī)、樸素貝葉斯和KMEANS聚類用戶畫像

左右滑動查看更多
01

02

03

04

步驟5:將數(shù)據(jù)分割為訓(xùn)練和測試集
訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集必須相似,通常具有相同的預(yù)測變量或變量。它們在變量的觀察值和特定值上有所不同。如果將模型擬合到訓(xùn)練數(shù)據(jù)集上,則將隱式地最小化誤差。擬合模型為訓(xùn)練數(shù)據(jù)集提供了良好的預(yù)測。然后,您可以在測試數(shù)據(jù)集上測試模型。如果模型在測試數(shù)據(jù)集上也預(yù)測良好,則您將更有信心。因?yàn)闇y試數(shù)據(jù)集與訓(xùn)練數(shù)據(jù)集相似,但模型既不相同也不相同。這意味著該模型在真實(shí)意義上轉(zhuǎn)移了預(yù)測或?qū)W習(xí)。
因此,通過將數(shù)據(jù)集劃分為訓(xùn)練和測試子集,我們可以有效地測量訓(xùn)練后的模型,因?yàn)樗郧皬奈纯吹竭^測試數(shù)據(jù),因此可以防止過度擬合。
我只是將數(shù)據(jù)集拆分為20%的測試數(shù)據(jù),其余80%將用于訓(xùn)練模型。
?train_test_split(X,?y,?test_size?=?0.2,?random_state?=?0)
步驟6:規(guī)范化數(shù)據(jù):特征標(biāo)準(zhǔn)化
對于許多機(jī)器學(xué)習(xí)算法而言,通過標(biāo)準(zhǔn)化(或Z分?jǐn)?shù)標(biāo)準(zhǔn)化)進(jìn)行特征標(biāo)準(zhǔn)化可能是重要的預(yù)處理步驟。
許多算法(例如SVM,K近鄰算法和邏輯回歸)都需要對特征進(jìn)行規(guī)范化,
min_test?=?X_test.min()range_test?=?(X_test?-?min_test).max()X_test_scaled?=?(X_test?-?min_test)/range_test
步驟7:應(yīng)用機(jī)器學(xué)習(xí)模型
from?sklearn.ensemble??import?AdaBoostClassifieradaboost?=AdaBoostClassifier()
xgb_classifier.fit(X_train_scaled,?y_train,verbose=True)end=time()train_time_xgb=end-start
應(yīng)用具有100棵樹和標(biāo)準(zhǔn)熵的隨機(jī)森林
classifier?=?RandomForestClassifier(random_state?=?47,?????????????????????????????????????criterion?=?'entropy',n_estimators=100)
svc_model?=?SVC(kernel='rbf',?gamma=0.1,C=100)
knn?=?KNeighborsClassifier(n_neighbors?=?7)
步驟8:分析和比較機(jī)器學(xué)習(xí)模型的訓(xùn)練時(shí)間
Train_Time?=?[????train_time_ada,????train_time_xgb,????train_time_sgd,????train_time_svc,????train_time_g,????train_time_r100,????????train_time_knn]
從上圖可以明顯看出,與其他模型相比,Adaboost和XGboost花費(fèi)的時(shí)間少得多,而其他模型由于SVC花費(fèi)了最多的時(shí)間,原因可能是我們已經(jīng)將一些關(guān)鍵參數(shù)傳遞給了SVC。
步驟9.模型優(yōu)化
在每個(gè)迭代次數(shù)上,隨機(jī)搜索的性能均優(yōu)于網(wǎng)格搜索。同樣,隨機(jī)搜索似乎比網(wǎng)格搜索更快地收斂到最佳狀態(tài),這意味著迭代次數(shù)更少的隨機(jī)搜索與迭代次數(shù)更多的網(wǎng)格搜索相當(dāng)。
在高維參數(shù)空間中,由于點(diǎn)變得更稀疏,因此在相同的迭代中,網(wǎng)格搜索的性能會下降。同樣常見的是,超參數(shù)之一對于找到最佳超參數(shù)并不重要,在這種情況下,網(wǎng)格搜索浪費(fèi)了很多迭代,而隨機(jī)搜索卻沒有浪費(fèi)任何迭代。
現(xiàn)在,我們將使用Randomsearch cv優(yōu)化模型準(zhǔn)確性。如上表所示,Adaboost在該數(shù)據(jù)集中表現(xiàn)最佳。因此,我們將嘗試通過微調(diào)adaboost和SVC的超參數(shù)來進(jìn)一步優(yōu)化它們。
參數(shù)調(diào)整
現(xiàn)在,讓我們看看adaboost的最佳參數(shù)是什么
random_search.best_params_
{'random_state':?47,?'n_estimators':?50,?'learning_rate':?0.01}
random_search.best_params_
{'n_estimators':?50,?'min_child_weight':?4,?'max_depth':?3}
random_search.best_params_
{'penalty':?'l2',?'n_jobs':?-1,?'n_iter':?1000,?'loss':?'log',?'alpha':?0.0001}
出色的所有指標(biāo)參數(shù)準(zhǔn)確性,F(xiàn)1分?jǐn)?shù)精度,ROC,三個(gè)模型adaboost,XGBoost和SGD的召回率現(xiàn)已優(yōu)化。此外,我們還可以嘗試使用其他參數(shù)組合來查看是否會有進(jìn)一步的改進(jìn)。
ROC曲線圖
????auc?=?metrics.roc_auc_score(y_test,model.predict(X_test_scaled))plt.plot([0,?1],?[0,?1],'r--')
#?計(jì)算測試集分?jǐn)?shù)的平均值和標(biāo)準(zhǔn)差test_mean?=?np.mean#?繪制訓(xùn)練集和測試集的平均準(zhǔn)確度得分plt.plot#?繪制訓(xùn)練集和測試集的準(zhǔn)確度。plt.fill_between
驗(yàn)證曲線的解釋
如果樹的數(shù)量在10左右,則該模型存在高偏差。兩個(gè)分?jǐn)?shù)非常接近,但是兩個(gè)分?jǐn)?shù)都離可接受的水平太遠(yuǎn),因此我認(rèn)為這是一個(gè)高度偏見的問題。換句話說,該模型不適合。
在最大樹數(shù)為250的情況下,由于訓(xùn)練得分為0.82但驗(yàn)證得分約為0.81,因此模型存在高方差。換句話說,模型過度擬合。同樣,數(shù)據(jù)點(diǎn)顯示出一種優(yōu)美的曲線。但是,我們的模型使用非常復(fù)雜的曲線來盡可能接近每個(gè)數(shù)據(jù)點(diǎn)。因此,具有高方差的模型具有非常低的偏差,因?yàn)樗鼛缀鯖]有假設(shè)數(shù)據(jù)。實(shí)際上,它對數(shù)據(jù)的適應(yīng)性太大。
從曲線中可以看出,大約30到40的最大樹可以最好地概括看不見的數(shù)據(jù)。隨著最大樹的增加,偏差變小,方差變大。我們應(yīng)該保持兩者之間的平衡。在30到40棵樹的數(shù)量之后,訓(xùn)練得分就開始上升,而驗(yàn)證得分開始下降,因此我開始遭受過度擬合的困擾。因此,這是為什么30至40之間的任何數(shù)量的樹都是一個(gè)不錯(cuò)的選擇的原因。
結(jié)論
因此,我們已經(jīng)看到,調(diào)整后的Adaboost的準(zhǔn)確性約為82.95%,并且在所有其他性能指標(biāo)(例如F1分?jǐn)?shù),Precision,ROC和Recall)中也取得了不錯(cuò)的成績。
此外,我們還可以通過使用Randomsearch或Gridsearch進(jìn)行模型優(yōu)化,以找到合適的參數(shù)以提高模型的準(zhǔn)確性。
我認(rèn)為,如果對這三個(gè)模型進(jìn)行了適當(dāng)?shù)恼{(diào)整,它們的性能都會更好。
本文摘選?《?Python信貸風(fēng)控模型:Adaboost,XGBoost,SGD, GBOOST, SVC,隨機(jī)森林, KNN預(yù)測信貸違約支付?》?,點(diǎn)擊“閱讀原文”獲取全文完整資料。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
Python進(jìn)行多輸出(多因變量)回歸:集成學(xué)習(xí)梯度提升決策樹GRADIENT BOOSTING,GBR回歸訓(xùn)練和預(yù)測可視化
Python對商店數(shù)據(jù)進(jìn)行l(wèi)stm和xgboost銷售量時(shí)間序列建模預(yù)測分析
PYTHON集成機(jī)器學(xué)習(xí):用ADABOOST、決策樹、邏輯回歸集成模型分類和回歸和網(wǎng)格搜索超參數(shù)優(yōu)化
R語言集成模型:提升樹boosting、隨機(jī)森林、約束最小二乘法加權(quán)平均模型融合分析時(shí)間序列數(shù)據(jù)
Python對商店數(shù)據(jù)進(jìn)行l(wèi)stm和xgboost銷售量時(shí)間序列建模預(yù)測分析
R語言用主成分PCA、?邏輯回歸、決策樹、隨機(jī)森林分析心臟病數(shù)據(jù)并高維可視化
R語言基于樹的方法:決策樹,隨機(jī)森林,Bagging,增強(qiáng)樹
R語言用邏輯回歸、決策樹和隨機(jī)森林對信貸數(shù)據(jù)集進(jìn)行分類預(yù)測
spss modeler用決策樹神經(jīng)網(wǎng)絡(luò)預(yù)測ST的股票
R語言中使用線性模型、回歸決策樹自動組合特征因子水平
R語言中自編基尼系數(shù)的CART回歸決策樹的實(shí)現(xiàn)
R語言用rle,svm和rpart決策樹進(jìn)行時(shí)間序列預(yù)測
python在Scikit-learn中用決策樹和隨機(jī)森林預(yù)測NBA獲勝者
python中使用scikit-learn和pandas決策樹進(jìn)行iris鳶尾花數(shù)據(jù)分類建模和交叉驗(yàn)證
R語言里的非線性模型:多項(xiàng)式回歸、局部樣條、平滑樣條、 廣義相加模型GAM分析
R語言用標(biāo)準(zhǔn)最小二乘OLS,廣義相加模型GAM?,樣條函數(shù)進(jìn)行邏輯回歸LOGISTIC分類
R語言ISLR工資數(shù)據(jù)進(jìn)行多項(xiàng)式回歸和樣條回歸分析
R語言中的多項(xiàng)式回歸、局部回歸、核平滑和平滑樣條回歸模型
R語言用泊松Poisson回歸、GAM樣條曲線模型預(yù)測騎自行車者的數(shù)量
R語言分位數(shù)回歸、GAM樣條曲線、指數(shù)平滑和SARIMA對電力負(fù)荷時(shí)間序列預(yù)測R語言樣條曲線、決策樹、Adaboost、梯度提升(GBM)算法進(jìn)行回歸、分類和動態(tài)可視化
如何用R語言在機(jī)器學(xué)習(xí)中建立集成模型?
R語言ARMA-EGARCH模型、集成預(yù)測算法對SPX實(shí)際波動率進(jìn)行預(yù)測在python 深度學(xué)習(xí)Keras中計(jì)算神經(jīng)網(wǎng)絡(luò)集成模型R語言ARIMA集成模型預(yù)測時(shí)間序列分析R語言基于Bagging分類的邏輯回歸(Logistic Regression)、決策樹、森林分析心臟病患者
R語言基于樹的方法:決策樹,隨機(jī)森林,Bagging,增強(qiáng)樹
R語言基于Bootstrap的線性回歸預(yù)測置信區(qū)間估計(jì)方法
R語言使用bootstrap和增量法計(jì)算廣義線性模型(GLM)預(yù)測置信區(qū)間
R語言樣條曲線、決策樹、Adaboost、梯度提升(GBM)算法進(jìn)行回歸、分類和動態(tài)可視化
Python對商店數(shù)據(jù)進(jìn)行l(wèi)stm和xgboost銷售量時(shí)間序列建模預(yù)測分析
R語言隨機(jī)森林RandomForest、邏輯回歸Logisitc預(yù)測心臟病數(shù)據(jù)和可視化分析
R語言用主成分PCA、?邏輯回歸、決策樹、隨機(jī)森林分析心臟病數(shù)據(jù)并高維可視化
Matlab建立SVM,KNN和樸素貝葉斯模型分類繪制ROC曲線
matlab使用分位數(shù)隨機(jī)森林(QRF)回歸樹檢測異常值