【算法竞赛学习】金融风控之贷款违约预测-赛题理解
Task1 賽題理解
賽題以金融風(fēng)控中的個(gè)人信貸為背景,要求選手根據(jù)貸款申請(qǐng)人的數(shù)據(jù)信息預(yù)測(cè)其是否有違約的可能,以此判斷是否通過(guò)此項(xiàng)貸款,這是一個(gè)典型的分類(lèi)問(wèn)題。通過(guò)這道賽題來(lái)引導(dǎo)大家了解金融風(fēng)控中的一些業(yè)務(wù)背景,解決實(shí)際問(wèn)題,幫助競(jìng)賽新人進(jìn)行自我練習(xí)、自我提高。
項(xiàng)目地址:https://github.com/datawhalechina/team-learning-data-mining/tree/master/FinancialRiskControl
比賽地址:https://tianchi.aliyun.com/competition/entrance/531830/introduction
1.1 學(xué)習(xí)目標(biāo)
理解賽題數(shù)據(jù)和目標(biāo),清楚評(píng)分體系。
完成相應(yīng)報(bào)名,下載數(shù)據(jù)和結(jié)果提交打卡(可提交示例結(jié)果),熟悉比賽流程
1.2 了解賽題
- 賽題概況
- 數(shù)據(jù)概況
- 預(yù)測(cè)指標(biāo)
- 分析賽題
1.2.1 賽題概況
比賽要求參賽選手根據(jù)給定的數(shù)據(jù)集,建立模型,預(yù)測(cè)金融風(fēng)險(xiǎn)。
賽題以預(yù)測(cè)金融風(fēng)險(xiǎn)為任務(wù),數(shù)據(jù)集報(bào)名后可見(jiàn)并可下載,該數(shù)據(jù)來(lái)自某信貸平臺(tái)的貸款記錄,總數(shù)據(jù)量超過(guò)120w,包含47列變量信息,其中15列為匿名變量。為了保證比賽的公平性,將會(huì)從中抽取80萬(wàn)條作為訓(xùn)練集,20萬(wàn)條作為測(cè)試集A,20萬(wàn)條作為測(cè)試集B,同時(shí)會(huì)對(duì)employmentTitle、purpose、postCode和title等信息進(jìn)行脫敏。
通過(guò)這道賽題來(lái)引導(dǎo)大家走進(jìn)金融風(fēng)控?cái)?shù)據(jù)競(jìng)賽的世界,主要針對(duì)于于競(jìng)賽新人進(jìn)行自我練習(xí)、自我提高。
1.2.2 數(shù)據(jù)概況
一般而言,對(duì)于數(shù)據(jù)在比賽界面都有對(duì)應(yīng)的數(shù)據(jù)概況介紹(匿名特征除外),說(shuō)明列的性質(zhì)特征。了解列的性質(zhì)會(huì)有助于我們對(duì)于數(shù)據(jù)的理解和后續(xù)分析。 Tip:匿名特征,就是未告知數(shù)據(jù)列所屬的性質(zhì)的特征列。
train.csv
- id 為貸款清單分配的唯一信用證標(biāo)識(shí)
- loanAmnt 貸款金額
- term 貸款期限(year)
- interestRate 貸款利率
- installment 分期付款金額
- grade 貸款等級(jí)
- subGrade 貸款等級(jí)之子級(jí)
- employmentTitle 就業(yè)職稱(chēng)
- employmentLength 就業(yè)年限(年)
- homeOwnership 借款人在登記時(shí)提供的房屋所有權(quán)狀況
- annualIncome 年收入
- verificationStatus 驗(yàn)證狀態(tài)
- issueDate 貸款發(fā)放的月份
- purpose 借款人在貸款申請(qǐng)時(shí)的貸款用途類(lèi)別
- postCode 借款人在貸款申請(qǐng)中提供的郵政編碼的前3位數(shù)字
- regionCode 地區(qū)編碼
- dti 債務(wù)收入比
- delinquency_2years 借款人過(guò)去2年信用檔案中逾期30天以上的違約事件數(shù)
- ficoRangeLow 借款人在貸款發(fā)放時(shí)的fico所屬的下限范圍
- ficoRangeHigh 借款人在貸款發(fā)放時(shí)的fico所屬的上限范圍
- openAcc 借款人信用檔案中未結(jié)信用額度的數(shù)量
- pubRec 貶損公共記錄的數(shù)量
- pubRecBankruptcies 公開(kāi)記錄清除的數(shù)量
- revolBal 信貸周轉(zhuǎn)余額合計(jì)
- revolUtil 循環(huán)額度利用率,或借款人使用的相對(duì)于所有可用循環(huán)信貸的信貸金額
- totalAcc 借款人信用檔案中當(dāng)前的信用額度總數(shù)
- initialListStatus 貸款的初始列表狀態(tài)
- applicationType 表明貸款是個(gè)人申請(qǐng)還是與兩個(gè)共同借款人的聯(lián)合申請(qǐng)
- earliesCreditLine 借款人最早報(bào)告的信用額度開(kāi)立的月份
- title 借款人提供的貸款名稱(chēng)
- policyCode 公開(kāi)可用的策略_代碼=1新產(chǎn)品不公開(kāi)可用的策略_代碼=2
- n系列匿名特征 匿名特征n0-n14,為一些貸款人行為計(jì)數(shù)特征的處理
1.2.3 預(yù)測(cè)指標(biāo)
競(jìng)賽采用AUC作為評(píng)價(jià)指標(biāo)。AUC(Area Under Curve)被定義為 ROC曲線 下與坐標(biāo)軸圍成的面積。
分類(lèi)算法常見(jiàn)的評(píng)估指標(biāo)如下:
1、混淆矩陣(Confuse Matrix)
- (1)若一個(gè)實(shí)例是正類(lèi),并且被預(yù)測(cè)為正類(lèi),即為真正類(lèi)TP(True Positive )
- (2)若一個(gè)實(shí)例是正類(lèi),但是被預(yù)測(cè)為負(fù)類(lèi),即為假負(fù)類(lèi)FN(False Negative )
- (3)若一個(gè)實(shí)例是負(fù)類(lèi),但是被預(yù)測(cè)為正類(lèi),即為假正類(lèi)FP(False Positive )
- (4)若一個(gè)實(shí)例是負(fù)類(lèi),并且被預(yù)測(cè)為負(fù)類(lèi),即為真負(fù)類(lèi)TN(True Negative )
2、準(zhǔn)確率(Accuracy)
準(zhǔn)確率是常用的一個(gè)評(píng)價(jià)指標(biāo),但是不適合樣本不均衡的情況。
Accuracy=TP+TNTP+TN+FP+FNAccuracy = \frac{TP + TN}{TP + TN + FP + FN}Accuracy=TP+TN+FP+FNTP+TN?
3、精確率(Precision)
又稱(chēng)查準(zhǔn)率,正確預(yù)測(cè)為正樣本(TP)占預(yù)測(cè)為正樣本(TP+FP)的百分比。
Precision=TPTP+FPPrecision = \frac{TP}{TP + FP}Precision=TP+FPTP?
4、召回率(Recall)
又稱(chēng)為查全率,正確預(yù)測(cè)為正樣本(TP)占正樣本(TP+FN)的百分比。
Recall=TPTP+FNRecall = \frac{TP}{TP + FN}Recall=TP+FNTP?
5、F1 Score
精確率和召回率是相互影響的,精確率升高則召回率下降,召回率升高則精確率下降,如果需要兼顧二者,就需要精確率、召回率的結(jié)合F1 Score。
F1?Score=21Precision+1RecallF1-Score = \frac{2}{\frac{1}{Precision} + \frac{1}{Recall}}F1?Score=Precision1?+Recall1?2?
6、P-R曲線(Precision-Recall Curve)
P-R曲線是描述精確率和召回率變化的曲線
7、ROC(Receiver Operating Characteristic)
- ROC空間將假正例率(FPR)定義為 X 軸,真正例率(TPR)定義為 Y 軸。
TPR:在所有實(shí)際為正例的樣本中,被正確地判斷為正例之比率。
TPR=TPTP+FNTPR = \frac{TP}{TP + FN}TPR=TP+FNTP?
FPR:在所有實(shí)際為負(fù)例的樣本中,被錯(cuò)誤地判斷為正例之比率。
FPR=FPFP+TNFPR = \frac{FP}{FP + TN}FPR=FP+TNFP?
8、AUC(Area Under Curve)
AUC(Area Under Curve)被定義為 ROC曲線 下與坐標(biāo)軸圍成的面積,顯然這個(gè)面積的數(shù)值不會(huì)大于1。又由于ROC曲線一般都處于y=x這條直線的上方,所以AUC的取值范圍在0.5和1之間。AUC越接近1.0,檢測(cè)方法真實(shí)性越高;等于0.5時(shí),則真實(shí)性最低,無(wú)應(yīng)用價(jià)值。
對(duì)于金融風(fēng)控預(yù)測(cè)類(lèi)常見(jiàn)的評(píng)估指標(biāo)如下:
1、KS(Kolmogorov-Smirnov)
KS統(tǒng)計(jì)量由兩位蘇聯(lián)數(shù)學(xué)家A.N. Kolmogorov和N.V. Smirnov提出。在風(fēng)控中,KS常用于評(píng)估模型區(qū)分度。區(qū)分度越大,說(shuō)明模型的風(fēng)險(xiǎn)排序能力(ranking ability)越強(qiáng)。
K-S曲線與ROC曲線類(lèi)似,不同在于
- ROC曲線將真正例率和假正例率作為橫縱軸
- K-S曲線將真正例率和假正例率都作為縱軸,橫軸則由選定的閾值來(lái)充當(dāng)。
公式如下:
KS=max(TPR?FPR)KS=max(TPR-FPR)KS=max(TPR?FPR)
KS不同代表的不同情況,一般情況KS值越大,模型的區(qū)分能力越強(qiáng),但是也不是越大模型效果就越好,如果KS過(guò)大,模型可能存在異常,所以當(dāng)KS值過(guò)高可能需要檢查模型是否過(guò)擬合。以下為KS值對(duì)應(yīng)的模型情況,但此對(duì)應(yīng)不是唯一的,只代表大致趨勢(shì)。
| 20以下 | 不建議采用 |
| 20-40 | 較好 |
| 41-50 | 良好 |
| 51-60 | 很強(qiáng) |
| 61-75 | 非常強(qiáng) |
| 75以上 | 過(guò)于高,疑似存在問(wèn)題 |
2、ROC
3、AUC
1.2.4. 賽題流程
1.3 代碼示例
本部分為對(duì)于數(shù)據(jù)讀取和指標(biāo)評(píng)價(jià)的示例。
1.3.1 數(shù)據(jù)讀取pandas
import pandas as pd train = pd.read_csv('train.csv') testA = pd.read_csv('testA.csv') print('Train data shape:',train.shape) print('TestA data shape:',testA.shape) Train data shape: (800000, 47) TestA data shape: (200000, 48) train.head()| 0 | 35000.0 | 5 | 19.52 | 917.97 | E | E2 | 320.0 | 2 years | 2 | ... | 9.0 | 8.0 | 4.0 | 12.0 | 2.0 | 7.0 | 0.0 | 0.0 | 0.0 | 2.0 |
| 1 | 18000.0 | 5 | 18.49 | 461.90 | D | D2 | 219843.0 | 5 years | 0 | ... | NaN | NaN | NaN | NaN | NaN | 13.0 | NaN | NaN | NaN | NaN |
| 2 | 12000.0 | 5 | 16.99 | 298.17 | D | D3 | 31698.0 | 8 years | 0 | ... | 0.0 | 21.0 | 4.0 | 5.0 | 3.0 | 11.0 | 0.0 | 0.0 | 0.0 | 4.0 |
| 3 | 11000.0 | 3 | 7.26 | 340.96 | A | A4 | 46854.0 | 10+ years | 1 | ... | 16.0 | 4.0 | 7.0 | 21.0 | 6.0 | 9.0 | 0.0 | 0.0 | 0.0 | 1.0 |
| 4 | 3000.0 | 3 | 12.99 | 101.07 | C | C2 | 54.0 | NaN | 1 | ... | 4.0 | 9.0 | 10.0 | 15.0 | 7.0 | 12.0 | 0.0 | 0.0 | 0.0 | 4.0 |
5 rows × 47 columns
1.3.2 分類(lèi)指標(biāo)評(píng)價(jià)計(jì)算示例
## 混淆矩陣 import numpy as np from sklearn.metrics import confusion_matrix y_pred = [0, 1, 0, 1] y_true = [0, 1, 1, 0] print('混淆矩陣:\n',confusion_matrix(y_true, y_pred)) 混淆矩陣:[[1 1][1 1]] ## accuracy from sklearn.metrics import accuracy_score y_pred = [0, 1, 0, 1] y_true = [0, 1, 1, 0] print('ACC:',accuracy_score(y_true, y_pred)) ACC: 0.5 ## Precision,Recall,F1-score from sklearn import metrics y_pred = [0, 1, 0, 1] y_true = [0, 1, 1, 0] print('Precision',metrics.precision_score(y_true, y_pred)) print('Recall',metrics.recall_score(y_true, y_pred)) print('F1-score:',metrics.f1_score(y_true, y_pred)) Precision 0.5 Recall 0.5 F1-score: 0.5 ## P-R曲線 import matplotlib.pyplot as plt from sklearn.metrics import precision_recall_curve y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1] y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1] precision, recall, thresholds = precision_recall_curve(y_true, y_pred) plt.plot(precision, recall) [<matplotlib.lines.Line2D at 0x2170d0d6108>] ## ROC曲線 from sklearn.metrics import roc_curve y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1] y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1] FPR,TPR,thresholds=roc_curve(y_true, y_pred) plt.title('ROC') plt.plot(FPR, TPR,'b') plt.plot([0,1],[0,1],'r--') plt.ylabel('TPR') plt.xlabel('FPR') Text(0.5, 0, 'FPR') ## AUC import numpy as np from sklearn.metrics import roc_auc_score y_true = np.array([0, 0, 1, 1]) y_scores = np.array([0.1, 0.4, 0.35, 0.8]) print('AUC socre:',roc_auc_score(y_true, y_scores)) AUC socre: 0.75 ## KS值 在實(shí)際操作時(shí)往往使用ROC曲線配合求出KS值 from sklearn.metrics import roc_curve y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1] y_true = [0, 1, 1, 0, 1, 0, 1, 1, 1, 1] FPR,TPR,thresholds=roc_curve(y_true, y_pred) KS=abs(FPR-TPR).max() print('KS值:',KS) KS值: 0.52380952380952371.4 經(jīng)驗(yàn)總結(jié)
賽題理解是開(kāi)始比賽的第一步,賽題的理解有助于對(duì)競(jìng)賽全局的把握。通過(guò)賽題理解有助于對(duì)賽題的業(yè)務(wù)邏輯把握,對(duì)于后期的特征工程構(gòu)建和模型選擇都尤為重要。
- 在開(kāi)始比賽之前要對(duì)賽題進(jìn)行充分的了解。
- 比賽什么時(shí)候開(kāi)始,什么時(shí)候結(jié)束,什么時(shí)候換B榜數(shù)據(jù)。
- 和該比賽有沒(méi)有類(lèi)似的比賽可以參考借鑒。
- 線上提交結(jié)果的次數(shù)往往是有限的,提前了解每日可以提交的次數(shù)。
- 比賽使用的是什么評(píng)價(jià)指標(biāo),可以選擇相同的評(píng)價(jià)指標(biāo)作為線下驗(yàn)證的方式。
1.5 拓展知識(shí)——評(píng)分卡
評(píng)分卡是一張擁有分?jǐn)?shù)刻度會(huì)讓相應(yīng)閾值的表。信用評(píng)分卡是用于用戶信用的一張刻度表。以下代碼是一個(gè)非標(biāo)準(zhǔn)評(píng)分卡的代碼流程,用于刻畫(huà)用戶的信用評(píng)分。評(píng)分卡是金融風(fēng)控中常用的一種對(duì)于用戶信用進(jìn)行刻畫(huà)的手段哦!
#評(píng)分卡 不是標(biāo)準(zhǔn)評(píng)分卡 def Score(prob,P0=600,PDO=20,badrate=None,goodrate=None):P0 = P0PDO = PDOtheta0 = badrate/goodrateB = PDO/np.log(2)A = P0 + B*np.log(2*theta0)score = A-B*np.log(prob/(1-prob))return score 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的【算法竞赛学习】金融风控之贷款违约预测-赛题理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【算法竞赛学习】学术前沿趋势-作者信息关
- 下一篇: 长城汽车公布最新销量成绩:1月海外销售同