摘 ?要
隨著人們對于貸款的需求量不斷增加以及我國債券市場和信貸市場違約事件頻發(fā),商業(yè)銀行不良資產(chǎn)率與用戶個人貸款違約風(fēng)險成為了政府和銀行業(yè)關(guān)心的核心問題,而對信用貸款違約風(fēng)險進行有效評估和測度也成為了商業(yè)銀行提高其經(jīng)營管理水平的核心要務(wù)。
本小組以金融風(fēng)控中的個人信貸為背景,根據(jù)貸款申請人的數(shù)據(jù)信息預(yù)測其是否有違約的可能,我們致力建立多種機器學(xué)習(xí)模型,基于貸款違約信息的數(shù)據(jù),進行模型訓(xùn)練,用來預(yù)測貸款人是否存在違約的可能。
本次實驗使用了Decision tree、AdaBoost、Bagging、RandomForest、Xgboost、Lightgbm和Catboost 7種機器學(xué)習(xí)模型,使用五折交叉驗證的方法,對貸款違約數(shù)據(jù)進行訓(xùn)練,使用AUC指標作為評估這7個模型的評估指標,得到效果最好的模型是catboost模型,它最高的AUC為74.88%,并且生成數(shù)據(jù)可視化分析報告。
關(guān)鍵詞:數(shù)據(jù)分析;數(shù)據(jù)不平衡;機器學(xué)習(xí);交叉驗證;集成學(xué)習(xí)
基于機器學(xué)習(xí)的貸款違約預(yù)測
1. 問題描述
1.1 問題背景
近年來,我國用于買房、購車以及其他消費的貸款規(guī)模快速增長,人們對于貸款的需求不斷增加,隨之而來的,是我國債券市場和信貸市場違約事件頻發(fā)。商業(yè)銀行不良資產(chǎn)率與用戶個人貸款違約風(fēng)險成為了政府和銀行業(yè)關(guān)心的核心問題,而對信用貸款違約風(fēng)險進行有效評估和測度也成為了商業(yè)銀行提高其經(jīng)營管理水平的核心要務(wù)。
本文通過處理用戶貸款數(shù)據(jù)以及貸款人的各項特征數(shù)據(jù),分析各項特征與違約情況之間的相關(guān)性,建立個人貸款違約預(yù)測模型,幫助銀行的業(yè)務(wù)人員明確客戶的更多有意義的指標變量,在應(yīng)對日益增多的貸款審核業(yè)務(wù)中對用戶貸款風(fēng)險進行預(yù)測,及早發(fā)現(xiàn)貸款的潛在損失,減少人工審核成本,提高預(yù)測準確率,更好地為用戶提供貸款服務(wù)與業(yè)務(wù)。
本項目數(shù)據(jù)集來源于阿里天池大數(shù)據(jù)平臺,以金融風(fēng)控中的個人信貸為背景,根據(jù)貸款申請人的數(shù)據(jù)信息預(yù)測其是否有違約的可能,建立模型預(yù)測是否通過此項貸款。
1.2 所需關(guān)鍵技術(shù)
(1)matplotlib數(shù)據(jù)可視化:Matplotlib是Python中最基本的可視化工具,是一個非常簡單而又完善的開源繪圖庫,能夠以跨平臺的交互式環(huán)境生成圖形,用來繪制各種靜態(tài),動態(tài),交互式的圖表。
(2)seaborn數(shù)據(jù)可視化:Seaborn是基于matplotlib的圖形可視化python包。它提供了一種高度交互式界面,便于用戶能夠做出各種有吸引力的統(tǒng)計圖表。Seaborn是在matplotlib的基礎(chǔ)上進行了更高級的API封裝,從而使得作圖更加容易,可以將Seaborn視為matplotlib的補充。
(3)pandas數(shù)據(jù)統(tǒng)計分析:pandas是一個以Numpy為基礎(chǔ)的強大的分析結(jié)構(gòu)化數(shù)據(jù)的工具集,為Python數(shù)據(jù)分析提供了高性能,且易于使用的數(shù)據(jù)結(jié)構(gòu)。pandas提供了兩種數(shù)據(jù)結(jié)構(gòu),分別是Series(一維數(shù)組結(jié)構(gòu))與DataFrame(二維數(shù)組結(jié)構(gòu)),這兩種數(shù)據(jù)結(jié)構(gòu)極大地增強的了Pandas的數(shù)據(jù)分析能力。
(4)Scikit-learn機器學(xué)習(xí):Scikit-learn是一個基于NumPy,SciPy,Matplotlib的開源機器學(xué)習(xí)工具包,主要涵蓋分類、回歸和聚類算法,例如邏輯回歸、樸素貝葉斯、隨機森林、SVM、k-means等算法,旨在與Python數(shù)值科學(xué)庫NumPy和SciPy聯(lián)合使用。
(5)PCA數(shù)據(jù)降維:PCA主成分分析是一種無監(jiān)督的數(shù)據(jù)降維方法,將一個高維數(shù)據(jù)集轉(zhuǎn)換為一個低維數(shù)據(jù)集。PCA降維的思想旨在減少數(shù)據(jù)集的維數(shù),同時還保持數(shù)據(jù)集的對方差貢獻最大的特征,最終使數(shù)據(jù)直觀呈現(xiàn)在二維坐標系。
(6)集成學(xué)習(xí):集成學(xué)習(xí)是一種通過構(gòu)建并結(jié)合多個學(xué)習(xí)器來完成學(xué)習(xí)任務(wù)機器學(xué)習(xí)方法,主要是將有限的模型相互組合。集成學(xué)習(xí)就是組合多個弱監(jiān)督模型以期得到一個更好更全面的強監(jiān)督模型,集成學(xué)習(xí)潛在的思想是即便某一個弱分類器得到了錯誤的預(yù)測,其他的弱分類器也可以將錯誤糾正回來。集成學(xué)習(xí)主要有Bagging、Boosting以及Stacking。
(7)網(wǎng)格搜索法:網(wǎng)格搜索法是指定參數(shù)值的一種窮舉搜索方法,通過將估計函數(shù)的參數(shù)通過交叉驗證的方法進行優(yōu)化來得到最優(yōu)的學(xué)習(xí)算法。網(wǎng)格搜索用于選取模型的最優(yōu)超參數(shù),算法在擬合函數(shù)嘗試了所有的參數(shù)組合后,返回一個合適的分類器,自動調(diào)整至最佳參數(shù)組合。
2. 數(shù)據(jù)分析
2.1 數(shù)據(jù)獲取
本文數(shù)據(jù)下載于阿里天池大數(shù)據(jù)平臺,是Datawhale與天池聯(lián)合發(fā)起金融風(fēng)控之貸款違約預(yù)測挑戰(zhàn)賽訓(xùn)練數(shù)據(jù)集。貸款違約預(yù)測數(shù)據(jù)集中包含了部分匿名特征,該數(shù)據(jù)來自某信貸平臺的貸款記錄,總數(shù)據(jù)量超過120w,包含47列變量信息,其中15列為匿名變量。在本次實驗中,從中抽取80萬條作為訓(xùn)練集,20萬條作為測試集A。
數(shù)據(jù)集特征概況介紹如表2-1所示:
表2-1 數(shù)據(jù)集特征概況介紹
特征名稱 |
特征含義 |
id |
為貸款清單分配的唯一信用證標識 |
loanAmnt |
貸款金額 |
term |
貸款期限(year) |
interestRate |
貸款利率 |
installment |
分期付款金額 |
grade |
貸款等級 |
subGrade |
貸款等級之子級 |
employmentTitle |
就業(yè)職稱 |
employmentLength |
就業(yè)年限(年) |
homeOwnership |
借款人在登記時提供的房屋所有權(quán)狀況 |
annualIncome |
年收入 |
verificationStatus |
驗證狀態(tài) |
issueDate |
貸款發(fā)放的月份 |
purpose |
借款人在貸款申請時的貸款用途類別 |
postCode |
借款人在貸款申請中提供的郵政編碼的前3位數(shù)字 |
regionCode |
地區(qū)編碼 |
dti |
債務(wù)收入比 |
delinquency_2years |
借款人過去2年信用檔案中逾期30天以上的違約事件數(shù) |
ficoRangeLow |
借款人在貸款發(fā)放時的fico所屬的下限范圍 |
ficoRangeHigh |
借款人在貸款發(fā)放時的fico所屬的上限范圍 |
openAcc |
借款人信用檔案中未結(jié)信用額度的數(shù)量 |
pubRec |
貶損公共記錄的數(shù)量 |
pubRecBankruptcies |
公開記錄清除的數(shù)量 |
revolBal |
信貸周轉(zhuǎn)余額合計 |
revolUtil |
循環(huán)額度利用率,或借款人使用的相對于所有可用循環(huán)信貸的信貸金額 |
totalAcc |
借款人信用檔案中當前的信用額度總數(shù) |
initialListStatus |
貸款的初始列表狀態(tài) |
applicationType |
表明貸款是個人申請還是與兩個共同借款人的聯(lián)合申請 |
earliesCreditLine |
借款人最早報告的信用額度開立的月份 |
title |
借款人提供的貸款名稱 |
policyCode |
公開可用的策略_代碼=1新產(chǎn)品不公開可用的策略_代碼=2 |
n系列匿名特征 |
匿名特征n0-n14,為一些貸款人行為計數(shù)特征的處理 |
2.2 數(shù)據(jù)統(tǒng)計分析
在預(yù)處理之前,進行簡單的數(shù)據(jù)統(tǒng)計分析可以幫助我們初步了解數(shù)據(jù)的維度與規(guī)模、類型與其他描述性信息。
圖2-1 查看數(shù)據(jù)維度
如圖2-1,通過查看數(shù)據(jù)集的數(shù)據(jù)維度,可以得出該數(shù)據(jù)集中,訓(xùn)練集的維度是800000*47;而測試集A的維度是200000*46。
通過函數(shù)data_train.info()可以查看數(shù)據(jù)基本信息,了解數(shù)據(jù)的基本類型,數(shù)據(jù)基本類型如表2-2:
表2-2 數(shù)據(jù)的基本類型
序號 |
特征名稱 |
類型 |
序號 |
特征名稱 |
類型 |
0 |
id |
int64 |
24 |
revolBal |
float64 |
1 |
loanAmnt |
float64 |
25 |
revolUtil |
float64 |
2 |
term |
int64 |
26 |
totalAcc |
float64 |
3 |
interestRate |
float64 |
27 |
initialListStatus |
int64 |
4 |
installment |
float64 |
28 |
applicationType |
int64 |
5 |
grade |
object |
29 |
earliesCreditLine |
object |
6 |
subGrade |
object |
30 |
title |
float64 |
7 |
employmentTitle |
float64 |
31 |
policyCode |
float64 |
8 |
employmentLength |
object |
32 |
n0 |
float64 |
9 |
homeOwnership |
int64 |
33 |
n1 |
float64 |
10 |
annualIncome |
float64 |
34 |
n2 |
float64 |
11 |
verificationStatus |
int64 |
35 |
n3 |
float64 |
12 |
issueDate |
object |
36 |
n4 |
float64 |
13 |
isDefault |
int64 |
37 |
n5 |
float64 |
14 |
purpose |
int64 |
38 |
n6 |
float64 |
15 |
postCode |
float64 |
39 |
n7 |
float64 |
16 |
regionCode |
int64 |
40 |
n8 |
float64 |
17 |
dti |
float64 |
41 |
n9 |
float64 |
18 |
delinquency_2years |
float64 |
42 |
n10 |
float64 |
19 |
ficoRangeLow |
float64 |
43 |
n11 |
float64 |
20 |
ficoRangeHigh |
float64 |
44 |
n12 |
float64 |
21 |
openAcc |
float64 |
45 |
n13 |
float64 |
22 |
pubRec |
float64 |
46 |
n14 |
float64 |
23 |
pubRecBankruptcies |
float64 |
利用函數(shù)data_train.isnull().any()可以簡單查看數(shù)據(jù)缺失值情況,data_train.isnull().sum() / len(data_train)則可以得到數(shù)據(jù)缺失比例,數(shù)據(jù)缺失比例如下圖所示:
圖2-2 數(shù)據(jù)缺失比例圖
2.3 數(shù)據(jù)可視化
數(shù)據(jù)可視化是將數(shù)據(jù)用圖形化的方式來表示,可視化的信息可以幫助人們快速、輕松地獲取數(shù)據(jù)和理解其隱含的意義,因此數(shù)據(jù)可視化是將數(shù)據(jù)分析結(jié)果呈現(xiàn)的最有效的方式。數(shù)據(jù)可視化可以使得數(shù)據(jù)呈現(xiàn)更加直觀,觀察變量的變化趨勢,易于理解,因此數(shù)據(jù)可視化在數(shù)據(jù)分析中占據(jù)著重要的作用。
我們可以查看該數(shù)據(jù)的類別標簽的對比情況,可見如下圖。我們可以發(fā)現(xiàn)數(shù)據(jù)類別標簽是不平衡的,所以對于后續(xù)模型選擇的模型評估指標也是一種考驗。
圖2-3 數(shù)據(jù)類別標簽占比情況
在本實驗中的數(shù)據(jù)可視化首先查看某一個數(shù)值型變量的分布,查看變量是否符合正態(tài)分布,一般情況下正態(tài)化的數(shù)據(jù)可以讓模型更快的收斂,如果不符合正太分布的變量可以對數(shù)化。各個變量的分布可視化圖像如下:
圖2-4 各個變量分布可視化圖
繪制交易金額值分布如圖2-5,其中右圖是log后的分布。
圖2-5 交易金額值分布
我們可以查看數(shù)據(jù)中某些年份的分布情況,可見如下圖
圖2-6 某些年份的分布情況
查看類別標簽0和1在數(shù)據(jù)總量中的占比(左)和在貸款總金額中的占比情況(右)
圖2-7 類別標簽0和1在數(shù)據(jù)總量中的占比(左)和在貸款總金額中的占比情況(右)
查看訓(xùn)練集數(shù)據(jù)與測試集數(shù)據(jù)中的貸款時間分布情況,我們可以發(fā)現(xiàn)兩者之間是有許多的重疊的部分的。
圖2-8 訓(xùn)練集數(shù)據(jù)與測試集數(shù)據(jù)中的貸款時間分布情況圖
查看各個特征之間的相關(guān)性,可見如下熱力圖。顏色越深表示兩兩特征之間的相關(guān)性越強。
圖2-9 各個特征之間的相關(guān)性熱力圖
3. 數(shù)據(jù)預(yù)處理
3.1 缺失值填充
首先使用函數(shù)data_train.isnull().sum()查看數(shù)據(jù)的缺失值情況,有數(shù)據(jù)缺失值的特征情況如表3-1所示:
表3-1 數(shù)據(jù)缺失值的特征情況
含缺失值特征 |
缺失值數(shù)量 |
含缺失值特征 |
缺失值數(shù)量 |
employmentTitle |
1 |
n4 |
33239 |
employmentLength |
46799 |
n5 |
40270 |
postCode |
1 |
n6 |
40270 |
dti |
239 |
n7 |
40270 |
pubRecBankruptcies |
405 |
n8 |
40271 |
revolUtil |
531 |
n9 |
40270 |
title |
1 |
n10 |
33239 |
n0 |
40270 |
n11 |
69752 |
n1 |
40270 |
n12 |
40270 |
n2 |
40270 |
n13 |
40270 |
n3 |
40270 |
n14 |
40270 |
可以看到匿名變量的數(shù)據(jù)缺失值情況比較嚴重,而非匿名變量中,特征employmentLength、dti、pubRecBankruptcies、revolUtil缺失值較多。
數(shù)據(jù)填充的方法有很多,常用的比如默認值填充、均值填充、眾數(shù)填充、KNN填充等,根據(jù)具體數(shù)據(jù)缺失值的類型采用不同的填充方法。在本實驗中,連續(xù)類型數(shù)據(jù)使用中數(shù)填充,而離散數(shù)據(jù)使用眾數(shù)填充。本次實驗操作可見如下圖。
圖3-1 對于數(shù)據(jù)缺失值的填充操作
3.2 數(shù)據(jù)格式轉(zhuǎn)換
在做數(shù)據(jù)分析的時候,原始數(shù)據(jù)往往會因為各種各樣的原因產(chǎn)生各種數(shù)據(jù)格式的問題,而數(shù)據(jù)格式錯誤往往會造成嚴重的后果。許多異常值也是經(jīng)過數(shù)據(jù)格式轉(zhuǎn)換之后才會被發(fā)現(xiàn),因此數(shù)據(jù)格式轉(zhuǎn)換對于規(guī)整數(shù)據(jù)、清洗數(shù)據(jù)有者重要的作用。
在本實驗中,將特征issueDate從字符串格式轉(zhuǎn)換為日期格式,最常用的是datetime模塊,轉(zhuǎn)換成時間格式代碼實現(xiàn)如下圖所示:
圖3-2 時間格式轉(zhuǎn)換操作代碼圖
數(shù)據(jù)類型轉(zhuǎn)換是將數(shù)據(jù)從一種格式或結(jié)構(gòu)轉(zhuǎn)換為另一種格式或結(jié)構(gòu)的過程,在數(shù)據(jù)預(yù)處理中數(shù)據(jù)轉(zhuǎn)換對于后續(xù)的數(shù)據(jù)分析等處理有著非常重要的作用。本次實驗操作可見如下圖。
圖3-3 數(shù)據(jù)類型轉(zhuǎn)換操作代碼圖
3.3 特征編碼
特征編碼對特征向量進行編碼的工作過程,對后續(xù)的模型訓(xùn)練有著非常重要的作用。本次實驗操作可見如下圖。
圖3-4 數(shù)據(jù)特征編碼操作代碼圖
3.4 數(shù)據(jù)標準化
由于本數(shù)據(jù)集中存在大量不同的相關(guān)指標,每個指標的性質(zhì)、量綱、數(shù)量級、可用性等特征均可能存在差異,導(dǎo)致我們無法直接用其分析研究對象的特征和規(guī)律。當各指標間的水平相差很大時,如果直接用指標原始值進行分析,數(shù)值較高的指標在綜合分析中的作用就會被放大,相對地,會削弱數(shù)值水平較低的指標的作用。
因此在模型訓(xùn)練之前,我們要對數(shù)據(jù)進行標準化。數(shù)據(jù)標準化是指將數(shù)據(jù)按比例縮放,使之落入一個小的特定區(qū)間。去除數(shù)據(jù)的單位限制,將其轉(zhuǎn)化為無量綱的純數(shù)值,便于不同單位或量級的指標能夠進行比較和加權(quán)。常見的數(shù)據(jù)標準化方法有min-max標準化、log函數(shù)轉(zhuǎn)換、z-score標準化模糊量化法等。本次實驗使用的是z-score標準化,可見如下圖
圖3-5 z-score標準化操作代碼圖
3.5特征刪除
本部分主要是刪除掉與標簽數(shù)據(jù)沒有任何關(guān)系的特征,例如用戶id,和該特征只有唯一值得特征,本次實驗可見如下圖
圖3-6 數(shù)據(jù)特征刪除操作代碼圖
4. 模型介紹
4.1 決策樹
決策樹學(xué)習(xí)的算法通常是一個遞歸地選擇最優(yōu)特征,并根據(jù)該特征對訓(xùn)練數(shù)據(jù)進行分割,使得各個子數(shù)據(jù)集有一個最好的分類的過程。這一過程對應(yīng)著對特征空間的劃分,也對應(yīng)著決策樹的構(gòu)建。決策樹構(gòu)造步驟如下:
①開始時構(gòu)建根節(jié)點,將所有訓(xùn)練數(shù)據(jù)都放在根節(jié)點,選擇一個最優(yōu)特征,按著這一特征將訓(xùn)練數(shù)據(jù)集分割成子集,使得各個子集有一個在當前條件下最好的分類。
②如果這些子集已經(jīng)能夠被基本正確分類,那么構(gòu)建葉節(jié)點,并將這些子集分到所對應(yīng)的葉節(jié)點去。
③如果還有子集不能夠被正確的分類,那么就對這些子集選擇新的最優(yōu)特征,繼續(xù)對其進行分割,構(gòu)建相應(yīng)的節(jié)點,如果遞歸進行,直至所有訓(xùn)練數(shù)據(jù)子集被基本正確的分類,或者沒有合適的特征為止。
④每個子集都被分到葉節(jié)點上,即都有了明確的類,這樣就生成了一顆決策樹。
決策樹劃分準則主要有信息增益、信息增益率以及基尼指數(shù)三種。著名的ID3決策樹學(xué)習(xí)算法就是以信息增益為準則來選擇劃分屬性。把得到最大的信息增益的作為最優(yōu)劃分屬性,這就是ID3算法選擇劃分屬性的準則。
信息增益準則對可取值數(shù)目較多的屬性有所偏好,為了減少這種偏好可能帶來的不利影響,C4.5決策樹算法不直接使用信息增益,而是使用增益率來選擇最優(yōu)劃分屬性。需要注意的是,增益率準則對可取值數(shù)目較少對屬性有所偏好。所以,C4.5算法并不是直接選擇增益率最大對候選劃分屬性,而是用了一個啟發(fā)式:先從候選劃分屬性中找出信息增益高于平均水平的屬性,再從中選擇增益率最高的。
CART決策樹算法使用基尼指數(shù)來選擇劃分屬性,這個準則不再用熵和增益來衡量數(shù)據(jù)集的純度,而是用基尼值來度量。直觀來說基尼指數(shù)反映了從數(shù)據(jù)集中隨機抽取兩個樣本,其類別標記不一致的概率。因此基尼值越小,則數(shù)據(jù)集的純度越高。
剪枝是決策樹算法對付“過擬合”的主要手段,通過主動去掉一些分支來降低過擬合的風(fēng)險。根據(jù)泛化性能是否提升來判斷和評估要不要留下這個分支。常常使用“留出法”判斷決策樹的泛化性能是否提升,即預(yù)留一部分數(shù)據(jù)用作“驗證集”來進行性能評估。
4.2 Bagging
Bagging又稱為“裝袋法”,它是所有集成學(xué)習(xí)方法當中最為著名,也最為有效的操作之一。Bagging是一種通過組合多個模型來減少泛化誤差的技術(shù),是常用的一種集成學(xué)習(xí)框架。集成學(xué)習(xí)是本身不是一個單獨的機器學(xué)習(xí)算法,而是通過構(gòu)建并結(jié)合多個機器學(xué)習(xí)器來完成學(xué)習(xí)任務(wù),一般結(jié)構(gòu)是:先產(chǎn)生一組“個體學(xué)習(xí)器”,再用某種策略將它們結(jié)合起來。
Bagging模型的主要思想是:降低模型的方差,并提高準確率,從樣本總體中抽取很多個訓(xùn)練集,對每個訓(xùn)練集分別擬合模型,將每個模型的結(jié)果求平均。
在Bagging集成當中,并行建立多個弱評估器(通常是決策樹,也可以是其他非線性算法),并綜合多個弱評估器的結(jié)果進行輸出。當集成算法目標是回歸任務(wù)時,集成算法的輸出結(jié)果是弱評估器輸出的結(jié)果的平均值,當集成算法的目標是分類任務(wù)時,集成算法的輸出結(jié)果是弱評估器輸出的結(jié)果少數(shù)服從多數(shù)(每個類別所對應(yīng)的弱評估器的數(shù)量)。
4.3 隨機森林
隨機森林算法是最常用也是最強大的監(jiān)督學(xué)習(xí)算法之一,它兼顧了解決回歸問題和分類問題的能力。隨機森林是通過集成學(xué)習(xí)的思想,將多棵決策樹進行集成的算法。對于分類問題,其輸出的類別是由個別樹輸出的眾數(shù)所決定的。在回歸問題中,把每一棵決策樹的輸出進行平均得到最終的回歸結(jié)果。在隨機森林中,決策樹的數(shù)量越大,隨機森林算法的魯棒性越強,精確度越高。
構(gòu)造隨機森林的步驟如下:
①假如有N個樣本,則有放回的隨機選擇N個樣本(每次隨機選擇一個樣本,然后返回繼續(xù)選擇)。這選擇好了的N個樣本用來訓(xùn)練一個決策樹,作為決策樹根節(jié)點處的樣本。
②當每個樣本有M個屬性時,在決策樹的每個節(jié)點需要分裂時,隨機從這M個屬性中選取出m個屬性,滿足條件m<<M。然后從這m個屬性中采用某種策略(比如信息增益)來選擇1個屬性作為該節(jié)點的分裂屬性。
③決策樹形成過程中每個節(jié)點都要按照步驟②來分裂,一直到不能夠再分裂為止。注意整個決策樹形成過程中沒有進行剪枝。
④按照步驟①~③建立大量的決策樹,這樣就構(gòu)成了隨機森林了。
4.4 AdaBoost
AdaBoost是一種重要的集成學(xué)習(xí)技術(shù),其核心思想是針對同一個訓(xùn)練集訓(xùn)練不同的弱分類器,然后把這些弱分類器集合起來,構(gòu)成一個更強的最終分類器。
Adaboost算法基本原理就是將多個弱分類器(弱分類器一般選用單層決策樹)進行合理的結(jié)合,使其成為一個強分類器。Adaboost采用迭代的思想,每次迭代只訓(xùn)練一個弱分類器,訓(xùn)練好的弱分類器將參與下一次迭代的使用。也就是說,在第N次迭代中,一共就有N個弱分類器,其中N-1個是以前訓(xùn)練好的,其各種參數(shù)都不再改變,本次訓(xùn)練第N個分類器。其中弱分類器的關(guān)系是第N個弱分類器更可能分對前N-1個弱分類器沒分對的數(shù)據(jù),最終分類輸出要看這N個分類器的綜合效果。
AdaBoost算法采取的優(yōu)化方法是:提高上一輪被錯誤分類的樣本的權(quán)值,降低被正確分類的樣本的權(quán)值;線性加權(quán)求和,誤差率小的基學(xué)習(xí)器擁有較大的權(quán)值,誤差率大的基學(xué)習(xí)器擁有較小的權(quán)值。
4.5 XGBoost
XGBoost是基于預(yù)排序方法的決策樹算法。這種構(gòu)建決策樹的算法基本思想是:首先,對所有特征都按照特征的數(shù)值進行預(yù)排序。其次,在遍歷分割點的時候用O(#data)的代價找到一個特征上的最好分割點。最后,在找到一個特征的最好分割點后,將數(shù)據(jù)分裂成左右子節(jié)點。
這樣的預(yù)排序算法的優(yōu)點是能精確地找到分割點。但是缺點也很明顯:首先,空間消耗大。這樣的算法需要保存數(shù)據(jù)的特征值,還保存了特征排序的結(jié)果(例如,為了后續(xù)快速的計算分割點,保存了排序后的索引),這就需要消耗訓(xùn)練數(shù)據(jù)兩倍的內(nèi)存。其次,時間上也有較大的開銷,在遍歷每一個分割點的時候,都需要進行分裂增益的計算,消耗的代價大。最后,對cache優(yōu)化不友好。在預(yù)排序后,特征對梯度的訪問是一種隨機訪問,并且不同的特征訪問的順序不一樣,無法對cache進行優(yōu)化。同時,在每一層長樹的時候,需要隨機訪問一個行索引到葉子索引的數(shù)組,并且不同特征訪問的順序也不一樣,也會造成較大的cache miss。
4. 6LightGBM
GBDT是機器學(xué)習(xí)中一個長盛不衰的模型,其主要思想是利用決策樹迭代訓(xùn)練以得到最優(yōu)模型,該模型具有訓(xùn)練效果好、不易過擬合等優(yōu)點。GBDT通常被用于多分類和數(shù)據(jù)挖掘等任務(wù)中。而LightGBM是一個實現(xiàn)GBDT算法的框架,支持高效率的并行訓(xùn)練,并且具有更快的訓(xùn)練速度、更低的內(nèi)存消耗、更好的準確率、支持分布式可以快速處理海量數(shù)據(jù)等優(yōu)點。
LightGBM原理和XGBoost類似,通過損失函數(shù)的泰勒展開式近似表達殘差(包含了一階和二階導(dǎo)數(shù)信息),另外利用正則化項控制模型的復(fù)雜度。為了避免XGBoost的缺陷,并且能夠在不損害準確率的條件下加快GBDT模型的訓(xùn)練速度,lightGBM在傳統(tǒng)的GBDT算法上進行優(yōu)化。
LightGBM最大的特點是,通過使用leaf-wise分裂策略代替XGBoost的level-wise分裂策略,通過只選擇分裂增益最大的結(jié)點進行分裂,避免了某些結(jié)點增益較小帶來的開銷。另外LightGBM通過使用基于直方圖的決策樹算法,只保存特征離散化之后的值,代替XGBoost使用exact算法中使用的預(yù)排序算法(預(yù)排序算法既要保存原始特征的值,也要保存這個值所處的順序索引),減少了內(nèi)存的使用,并加速的模型的訓(xùn)練速度。
4.7 CatBoost
CatBoost是Boosting族算法的一種,也是在GBDT算法框架下的一種改進實現(xiàn)。CatBoost是一種基于對稱決策樹為基學(xué)習(xí)器實現(xiàn)的參數(shù)較少、支持類別型變量和高準確性的GBDT框架,主要解決的痛點是高效合理地處理類別型特征,CatBoost還解決了梯度偏差(Gradient Bias)以及預(yù)測偏移(Prediction shift)的問題,從而減少過擬合的發(fā)生,進而提高算法的準確性和泛化能力。
與XGBoost、LightGBM相比,CatBoost嵌入了自動將類別型特征處理為數(shù)值型特征的創(chuàng)新算法:首先對categorical features做一些統(tǒng)計,計算某個類別特征(category)出現(xiàn)的頻率,之后加上超參數(shù),生成新的數(shù)值型特征。Catboost還使用了組合類別特征,可以利用到特征之間的聯(lián)系,這極大的豐富了特征維度。
CatBoost采用排序提升的方法對抗訓(xùn)練集中的噪聲點,從而避免梯度估計的偏差,進而解決預(yù)測偏移的問題。CatBoost 還計算每個數(shù)據(jù)點的殘差,并使用其他數(shù)據(jù)訓(xùn)練的模型進行計算。這樣,每個數(shù)據(jù)點就得到了不同的殘差數(shù)據(jù)。這些數(shù)據(jù)被評估為目標,并且通用模型的訓(xùn)練次數(shù)與迭代次數(shù)一樣多,但CatBoost通過有序提升在更短的時間內(nèi)完成。
5.模型實現(xiàn)
5.1運行環(huán)境
模型的訓(xùn)練環(huán)境可見如表5-1所示
表5-1 模型訓(xùn)練環(huán)境
環(huán)境 |
版本號、其他信息 |
筆記本 |
華碩飛行堡壘7 |
操作系統(tǒng) |
Windows 10專業(yè)版本 |
編程語言 |
Python3.7 |
編程軟件 |
Jupyter notebook |
模型API |
Sklearn、xgboost、lightgbm、catboost |
其他依賴庫 |
Numpy、pandas、matplotlib、seaborn |
5.2實驗介紹
模型所使用的數(shù)據(jù)已經(jīng)全部經(jīng)過前續(xù)的數(shù)據(jù)預(yù)處理,每一個模型使用的數(shù)據(jù)都是一致的,且數(shù)據(jù)劃分的大小都一致。模型所采用的交叉驗證法都是采用五折交叉驗證法。數(shù)據(jù)集的劃分均為80%的訓(xùn)練集和20%的驗證集。可見如下圖
圖5-1 數(shù)據(jù)集劃分操作代碼
我們將采用decision tree、AdaBoost、Bagging、RandomForest、xgboost、lightgbm和catboost 7種模型對同一數(shù)據(jù)進行訓(xùn)練,并且使用AUC指標評估每一個訓(xùn)練得到的模型,每個模型的參數(shù)選擇方法都將采用網(wǎng)格搜索法對最優(yōu)參數(shù)進行選擇。
5.3 decision tree
在機器學(xué)習(xí)中,decision tree是一個預(yù)測模型,他代表的是對象屬性與對象值之間的一種映射關(guān)系,我們使用sklearn的API調(diào)用tree的方法,實現(xiàn)decision tree,并且使用網(wǎng)格搜索法選著最優(yōu)參數(shù),網(wǎng)格搜索法可見如下圖,可以對模型的最優(yōu)參數(shù)進行選擇,缺點是非??简炿娔X性能,運行時間會非常的久。
圖5-2 決策樹實現(xiàn)操作代碼
對decision tree的運行結(jié)果可見如下圖,我們可以查看模型的訓(xùn)練報告,我們可以發(fā)現(xiàn)模型的準確率為80.14%,已經(jīng)達到較好的效果。
圖5-3 決策樹運行結(jié)果混淆矩陣
由于本數(shù)據(jù)集的標簽是不平衡的,所以需要使用到AUC指標,對模型進行評估,具體可見如下圖,基礎(chǔ)decision tree的模型訓(xùn)練效果的AUC為70.66%。
圖5-4 決策樹模型訓(xùn)練效果AUC
我們可以查看decision tree模型中,特征重要性排序在前十的特征,可見如下圖,它們分別是subGrade??????? 、grade、issueDateDT? 、term、homeOwnership、dti、annualIncome、installment、ficoRangeLow、interestRate
圖5-5 決策樹模型中特征重要性排序在前十的特征
前十個特征的貢獻度排序可見如下表
圖5-6 前十個特征的貢獻度排序
我們還可以查看該模型的部分結(jié)構(gòu)樹,可見如下圖
圖5-7 決策樹模型的部分結(jié)構(gòu)樹
5.4 Bagging
Bagging是通過結(jié)合幾個模型降低泛化誤差的技術(shù)。主要想法是分別訓(xùn)練幾個不同的模型,然后讓所有模型表決測試樣例的輸出。這是機器學(xué)習(xí)中常規(guī)策略的一個例子,被稱為模型平均(modelaveraging)。采用這種策略的技術(shù)被稱為集成方法。
我們采用上述的decision tree作為底層樹,使用網(wǎng)格搜索法搜索得到最佳的Bagging袋裝法的最佳模型參數(shù),其模型報告可見如下圖,我們可以發(fā)現(xiàn)基于bagging的decision tree模型,準確率是要比基礎(chǔ)decision tree模型的準確率要高的,為80.239%。
圖5-8 Bagging運行結(jié)果混淆矩陣
查看該模型的AUC指標,我們可以發(fā)現(xiàn)該模型的AUC指標也要比基礎(chǔ)的decision tree模型的AUC要高,為71.46%。
圖5-9 Bagging模型訓(xùn)練效果AUC
5.5 RandomForest
隨機森林是利用多個decision tree對樣本進行訓(xùn)練、分類并預(yù)測的一種算法,在對數(shù)據(jù)進行分類的同時,還可以給出各個變量的重要性評分,評估各個變量在分類中所起的作用。隨機森林是一種比較有名的集成學(xué)習(xí)方法,屬于集成學(xué)習(xí)算法中弱學(xué)習(xí)器之間不存在依賴的一部分。
本次實驗使用sklearn的API,調(diào)用方法實現(xiàn)decision tree,使用網(wǎng)格搜索法對搜索最佳的模型參數(shù),具體模型訓(xùn)練結(jié)果可見如下圖,我們可以發(fā)現(xiàn)上述的Bagging方法和該集成方法,他們的效果在本數(shù)據(jù)集上是差不多的。本次隨機森林的模型準確率為80.295%。
圖5-10 隨機森林運行結(jié)果混淆矩陣
查看該隨機森林的AUC,為70.91%。我們可以發(fā)現(xiàn)隨機森林的模型準確率要比Bagging方法的準確率要高,但是模型的AUC指標卻比Bagging方法的AUC要低,這也是為什么有時候?qū)δP驮u估不只能看模型準確率的原因,要結(jié)合數(shù)據(jù)的實際情況選著模型評估指標。
圖5-11 隨機森林模型訓(xùn)練效果AUC
我們可以查看該模型輸出的重要特征排序,選擇前10個重要性特征,可見如下圖。它們分貝為dti、interestRate、revolBal、employmentTitle、revolUtil??? 、postCode、annualIncome、installment、issueDateDT、subGrade,我們可以發(fā)現(xiàn)該模型的前10個重要特征指標,與decision tree的前10個重要特征指標有部分是一樣的。
圖5-12 隨機森林模型輸出的前十個重要特征排序
該模型前10個重要特征指標的重要性可見如下圖
圖5-13 模型前10個重要特征指標的重要性
5.6 Adaboost
Adaboost是一種迭代算法,其核心思想是針對同一個訓(xùn)練集訓(xùn)練不同的分類器,然后把這些弱分類器集合起來,構(gòu)成一個更強的最終分類器,Boosting,也稱為增強學(xué)習(xí)或提升法,是一種重要的集成學(xué)習(xí)技術(shù),能夠?qū)㈩A(yù)測精度僅比隨機猜度略高的弱學(xué)習(xí)器增強為預(yù)測精度高的強學(xué)習(xí)器。Adaboost與RandomForest都是集成方法其中的一種。
本次實驗調(diào)用sklearn的API方法實現(xiàn)Adaboost模型,選擇網(wǎng)格搜索法選擇模型最佳參數(shù),對模型進行訓(xùn)練,模型訓(xùn)練報告可見如下圖,我們可以發(fā)現(xiàn)該模型的準確率為80.31%。與上述模型的準確率相差不大。
圖5-14 Adaboost運行結(jié)果混淆矩陣
查看該模型的AUC指標,AUC為71.59%,具體可見如下圖。我們可以發(fā)現(xiàn),該模型的準確率和AUC指標都要比RandomForest模型的都要高。
圖5-15 Adaboost模型訓(xùn)練效果AUC
輸出該模型的前10個重要特征,可見如下圖,它們分別是subGrade?? 、issueDateDT、grade、employmentTitle、loanAmnt??? 、interestRate 、n14、homeOwnership、annualIncome、totalAcc。我們可以發(fā)現(xiàn)該模型的前10個重要性指標都與前面模型的重要性指標有部分的重合。
圖5-16 Adaboost模型輸出的前十個重要特征排序
我們可以查看該模型的前10個模型的特征的重要性,具體可見如下圖。
圖5-17 Adaboost模型前10個重要特征指標的重要性
5.7 xgboost
xgboost是大規(guī)模并行boosted tree的工具,據(jù)說它是目前最快最好的開源boosted tree工具包,比常見的工具包快10倍以上。xgboost的全稱是eXtreme Gradient Boosting,它是經(jīng)過優(yōu)化的分布式梯度提升庫,旨在高效、靈活且可移植。
本次實驗直接調(diào)用xgboost工具包,構(gòu)造實現(xiàn)該模型的函數(shù)。Xgboost模型的參數(shù)是非常多的,所以使用網(wǎng)格搜索法尋求最優(yōu)參數(shù)的時候,會非常非常的慢。Xgboost模型的具體參數(shù)可見如下圖
圖5-18 xgboost實現(xiàn)代碼操作
使用該模型對同一數(shù)據(jù)進行訓(xùn)練,輸出模型的訓(xùn)練效果,具體可見如下圖,該圖為其中一折的模型訓(xùn)練過程中AUC的變化過程。
圖5-19 xgboost模型訓(xùn)練過程中AUC的變化過程
我們可以查看某一折的模型訓(xùn)練結(jié)果的AUC,為73.41%。我們可以發(fā)現(xiàn)該模型得到的AUC,要比前面幾個模型的都要好。
圖5-20 xgboost模型訓(xùn)練效果AUC
5.8 lightgbm
LightGBM(Light Gradient Boosting Machine)是一個實現(xiàn)GBDT算法的框架,支持高效率的并行訓(xùn)練,并且具有更快的訓(xùn)練速度、更低的內(nèi)存消耗、更好的準確率、支持分布式可以快速處理海量數(shù)據(jù)等優(yōu)點。
該模型實現(xiàn)的方法是直接調(diào)用lightgbm工具包的API,使用該方法實現(xiàn)。該模型的參數(shù)也是非常的多,具體可見如下圖
圖5-21 lightgbm實現(xiàn)代碼操作
該模型五折交叉驗證訓(xùn)練部分過程圖具體可見如下
圖5-22 lightgbm模型訓(xùn)練過程中AUC的變化過程
Lgb模型訓(xùn)練得到的AUC為73.33%,效果要比lgb模型略差一些,有一部分可能是因為參數(shù)沒有調(diào)到最優(yōu)。但是都要比前面的decision tree等模型要好。
圖5-23 lightgbm模型訓(xùn)練效果AUC
我們可以查看該模型的結(jié)構(gòu)樹,可見如下圖
圖5-24 lightgbm模型的結(jié)構(gòu)樹
5.9 catboost
CatBoost是俄羅斯的搜索巨頭Yandex在2017年開源的機器學(xué)習(xí)庫,是Boosting族算法的一種。CatBoost和XGBoost、LightGBM并稱為GBDT的三大主流神器,都是在GBDT算法框架下的一種改進實現(xiàn)。CatBoost是一種基于對稱決策樹(oblivious trees)為基學(xué)習(xí)器實現(xiàn)的參數(shù)較少、支持類別型變量和高準確性的GBDT框架。
本次實驗是使用catboost工具包的API實現(xiàn)的catboost模型,該模型的參數(shù)相對來說是比較少的,可見如下圖所示
圖5-25 catboost實現(xiàn)操作代碼
該模型的五折交叉驗證訓(xùn)練過程可見如下圖
圖5-26 catboost模型訓(xùn)練過程中AUC的變化過程
catboost五折交叉驗證訓(xùn)練過程的全部AUC分別是74.70%、74.77%、74.88、74.68%、74.68%。我們可以發(fā)現(xiàn)該模型的最大AUC為74.88%,是目前已經(jīng)實驗的7個模型之中最高AUC的模型,該模型的平均AUC為74.76%,都比前面模型的AUC要高。
圖5-27 catboost模型訓(xùn)練效果AUC
6. 總結(jié)
基于本次數(shù)據(jù)分析大作業(yè),我們使用7種模型decision tree、AdaBoost、Bagging、RandomForest、xgboost、lightgbm和catboost,分別對阿里天池的貸款違約預(yù)測數(shù)據(jù)進行訓(xùn)練,得到每個模型最好的效果可見如下圖。我們得到最好的效果是使用Catboost模型,最高AUC達到了74.88%。
圖6-1 各個模型評估效果圖
做了本次的數(shù)據(jù)分析課程大作業(yè),我覺得難度還是有的,但是也是對自己本身的一種鍛煉,讓我們熟悉掌握數(shù)據(jù)分析的方法和工具,例如本次實驗我們小組就使用到了許多的依賴庫,還有一些庫還是從未觸碰過的,例如Xgboost和Catboost等。我們還可以使用其他的工具,例如graphviz第三方工具,可以進行決策樹模型結(jié)構(gòu)進行繪畫,畫出模型的結(jié)構(gòu)樹模型圖,在對于理解和學(xué)習(xí)該模型是非常有幫助的,我們還使用pandas_profiling工具生成數(shù)據(jù)分析可視化報告。
本次實驗使用到的模型,絕大多數(shù)都是使用在機器學(xué)習(xí)的有監(jiān)督學(xué)習(xí)中,也就是分類。由于本次課程設(shè)計選擇的數(shù)據(jù)量很大,僅訓(xùn)練數(shù)據(jù)就有800000多條,普通筆記本電腦是較難實現(xiàn)對數(shù)據(jù)的讀取和模型的訓(xùn)練,并且時間非常長,本小組成員曾多次因為跑模型導(dǎo)致電腦死機或者是故障。所以本次課程設(shè)計我們小組還是用到了Google的一個服務(wù)器Cloab和百度開源的深度學(xué)習(xí)平臺AI studio,利用提供的GPU對數(shù)據(jù)進行一個讀取和模型的訓(xùn)練。我們發(fā)現(xiàn)利用GPU對于數(shù)據(jù)的讀取和模型的訓(xùn)練速度是非???,若沒有GPU,對于大量數(shù)據(jù)的訓(xùn)練會非常的耗時。據(jù)了解,訓(xùn)練深度網(wǎng)絡(luò)時,GPU比CPU快40倍左右。CPU適合復(fù)雜的邏輯運算,GPU適合矩陣運算,深度學(xué)習(xí)大部分的模型訓(xùn)練的算法運算都采用了矩陣運算,而且CPU的核心數(shù)要比GPU少,模型訓(xùn)練需要很多并行的矩陣運算,GPU在深度學(xué)習(xí)模型的訓(xùn)練上顯得非常的出色。
我們小組認為,在數(shù)據(jù)分析的過程中,最重要的一步還是對于數(shù)據(jù)的預(yù)處理部分,該部分還可以實現(xiàn)特征工程。同一場比賽,同一個數(shù)據(jù)集,有時候還會同一個模型,但是每個人的結(jié)果都可能不太一樣,很大可能是因為數(shù)據(jù)的處理方式不一樣。再好的模型,用在普通的數(shù)據(jù)上,得到的結(jié)果都會比較普通的,所以我們小組認為數(shù)據(jù)分析的最重要一部分是數(shù)據(jù)的預(yù)處理部分和特征工程。
經(jīng)過本學(xué)期的數(shù)據(jù)分析課程的學(xué)習(xí),和本次課程的期末大作業(yè),我們組成員學(xué)到了如何利用各種模型來訓(xùn)練數(shù)據(jù),并且會借用其他的工具,例如AI Studio開源平臺來實現(xiàn)對大規(guī)模數(shù)據(jù)的訓(xùn)練,使得我們對數(shù)據(jù)分析的認識更進一步。
7 參考文獻
[1]楊寧,趙聯(lián)文,郭耀煌. 隨機決策樹[J]. 西南交通大學(xué)學(xué)報,2000(2). DOI:10.3969/j.issn.0258-2724.2000.02.025.
[2] 李蒼柏,肖克炎,李楠,等. 支持向量機、隨機森林和人工神經(jīng)網(wǎng)絡(luò)機器學(xué)習(xí)算法在地球化學(xué)異常信息提取中的對比研究[J]. 地球?qū)W報,2020(2). DOI:10.3975/cagsb.2020.022501.
[3]方匡南,吳見彬. 個人住房貸款違約預(yù)測與利率政策模擬[J]. 統(tǒng)計研究,2013(10). DOI:10.3969/j.issn.1002-4565.2013.10.008.
[4]張佳倩,李偉,阮素梅. 基于機器學(xué)習(xí)的貸款違約風(fēng)險預(yù)測[J]. 長春理工大學(xué)學(xué)報(社會科學(xué)版),2021(4). DOI:10.3969/j.issn.1009-1068.2021.04.018.
[5] 周麗峰. 基于非平衡數(shù)據(jù)分類的貸款違約預(yù)測研究[D]. 2013. DOI:10.7666/d.Y2426281.
[6] 隋孟琪. 基于混合特征提取和集成學(xué)習(xí)的個人貸款違約預(yù)測研究[D]. 2020.
[7] 劉斌,陳凱. 基于SMOTE和XGBoost的貸款風(fēng)險預(yù)測方法[J]. 計算機與現(xiàn)代化,2020(2). DOI:10.3969/j.issn.1006-2475.2020.02.006.
[8] 李趙飛. 基于代價敏感AdaBoost的貸款違約風(fēng)險預(yù)測研究[D]. 2021.
[9] 朱喆泓. 基于LightGBM算法的住房按揭貸款提前償付風(fēng)險預(yù)測模型[D]. 2021.
附錄
1:使用jupyter notebook運行文件即可,每個代碼文件前面都有依賴庫的安裝和導(dǎo)入。
2:代碼文件有三個:cat.ipynb,lgb and xgb.ipynb, 數(shù)據(jù)分析期末大作業(yè).ipynb三個代碼文件。
3:數(shù)據(jù)文件有2個:train.csv和testA.csv兩個文件。文章來源:http://www.zghlxwxcb.cn/news/detail-853404.html
4:可以先運行數(shù)據(jù)分析期末大作業(yè).ipynb這個總體的代碼,再去獨自運行另外兩個小代碼文件文章來源地址http://www.zghlxwxcb.cn/news/detail-853404.html
到了這里,關(guān)于人工智能課程設(shè)計畢業(yè)設(shè)計——基于機器學(xué)習(xí)的貸款違約預(yù)測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!