日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法竞赛学习】金融风控之贷款违约预测-赛题理解

發布時間:2023/12/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法竞赛学习】金融风控之贷款违约预测-赛题理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Task1 賽題理解

賽題以金融風控中的個人信貸為背景,要求選手根據貸款申請人的數據信息預測其是否有違約的可能,以此判斷是否通過此項貸款,這是一個典型的分類問題。通過這道賽題來引導大家了解金融風控中的一些業務背景,解決實際問題,幫助競賽新人進行自我練習、自我提高。

項目地址:https://github.com/datawhalechina/team-learning-data-mining/tree/master/FinancialRiskControl

比賽地址:https://tianchi.aliyun.com/competition/entrance/531830/introduction

1.1 學習目標

理解賽題數據和目標,清楚評分體系。

完成相應報名,下載數據和結果提交打卡(可提交示例結果),熟悉比賽流程

1.2 了解賽題

  • 賽題概況
  • 數據概況
  • 預測指標
  • 分析賽題

1.2.1 賽題概況

比賽要求參賽選手根據給定的數據集,建立模型,預測金融風險。

賽題以預測金融風險為任務,數據集報名后可見并可下載,該數據來自某信貸平臺的貸款記錄,總數據量超過120w,包含47列變量信息,其中15列為匿名變量。為了保證比賽的公平性,將會從中抽取80萬條作為訓練集,20萬條作為測試集A,20萬條作為測試集B,同時會對employmentTitle、purpose、postCode和title等信息進行脫敏。

通過這道賽題來引導大家走進金融風控數據競賽的世界,主要針對于于競賽新人進行自我練習、自我提高。

1.2.2 數據概況

一般而言,對于數據在比賽界面都有對應的數據概況介紹(匿名特征除外),說明列的性質特征。了解列的性質會有助于我們對于數據的理解和后續分析。 Tip:匿名特征,就是未告知數據列所屬的性質的特征列。

train.csv

  • id 為貸款清單分配的唯一信用證標識
  • loanAmnt 貸款金額
  • term 貸款期限(year)
  • interestRate 貸款利率
  • installment 分期付款金額
  • grade 貸款等級
  • subGrade 貸款等級之子級
  • employmentTitle 就業職稱
  • employmentLength 就業年限(年)
  • homeOwnership 借款人在登記時提供的房屋所有權狀況
  • annualIncome 年收入
  • verificationStatus 驗證狀態
  • issueDate 貸款發放的月份
  • purpose 借款人在貸款申請時的貸款用途類別
  • postCode 借款人在貸款申請中提供的郵政編碼的前3位數字
  • regionCode 地區編碼
  • dti 債務收入比
  • delinquency_2years 借款人過去2年信用檔案中逾期30天以上的違約事件數
  • ficoRangeLow 借款人在貸款發放時的fico所屬的下限范圍
  • ficoRangeHigh 借款人在貸款發放時的fico所屬的上限范圍
  • openAcc 借款人信用檔案中未結信用額度的數量
  • pubRec 貶損公共記錄的數量
  • pubRecBankruptcies 公開記錄清除的數量
  • revolBal 信貸周轉余額合計
  • revolUtil 循環額度利用率,或借款人使用的相對于所有可用循環信貸的信貸金額
  • totalAcc 借款人信用檔案中當前的信用額度總數
  • initialListStatus 貸款的初始列表狀態
  • applicationType 表明貸款是個人申請還是與兩個共同借款人的聯合申請
  • earliesCreditLine 借款人最早報告的信用額度開立的月份
  • title 借款人提供的貸款名稱
  • policyCode 公開可用的策略_代碼=1新產品不公開可用的策略_代碼=2
  • n系列匿名特征 匿名特征n0-n14,為一些貸款人行為計數特征的處理

1.2.3 預測指標

競賽采用AUC作為評價指標。AUC(Area Under Curve)被定義為 ROC曲線 下與坐標軸圍成的面積。

分類算法常見的評估指標如下:

1、混淆矩陣(Confuse Matrix)

  • (1)若一個實例是正類,并且被預測為正類,即為真正類TP(True Positive )
  • (2)若一個實例是正類,但是被預測為負類,即為假負類FN(False Negative )
  • (3)若一個實例是負類,但是被預測為正類,即為假正類FP(False Positive )
  • (4)若一個實例是負類,并且被預測為負類,即為真負類TN(True Negative )

2、準確率(Accuracy)
準確率是常用的一個評價指標,但是不適合樣本不均衡的情況。
Accuracy=TP+TNTP+TN+FP+FNAccuracy = \frac{TP + TN}{TP + TN + FP + FN}Accuracy=TP+TN+FP+FNTP+TN?

3、精確率(Precision)
又稱查準率,正確預測為正樣本(TP)占預測為正樣本(TP+FP)的百分比。
Precision=TPTP+FPPrecision = \frac{TP}{TP + FP}Precision=TP+FPTP?

4、召回率(Recall)
又稱為查全率,正確預測為正樣本(TP)占正樣本(TP+FN)的百分比。
Recall=TPTP+FNRecall = \frac{TP}{TP + FN}Recall=TP+FNTP?

5、F1 Score
精確率和召回率是相互影響的,精確率升高則召回率下降,召回率升高則精確率下降,如果需要兼顧二者,就需要精確率、召回率的結合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:在所有實際為正例的樣本中,被正確地判斷為正例之比率。
TPR=TPTP+FNTPR = \frac{TP}{TP + FN}TPR=TP+FNTP?
FPR:在所有實際為負例的樣本中,被錯誤地判斷為正例之比率。
FPR=FPFP+TNFPR = \frac{FP}{FP + TN}FPR=FP+TNFP?

8、AUC(Area Under Curve)
AUC(Area Under Curve)被定義為 ROC曲線 下與坐標軸圍成的面積,顯然這個面積的數值不會大于1。又由于ROC曲線一般都處于y=x這條直線的上方,所以AUC的取值范圍在0.5和1之間。AUC越接近1.0,檢測方法真實性越高;等于0.5時,則真實性最低,無應用價值。

對于金融風控預測類常見的評估指標如下:

1、KS(Kolmogorov-Smirnov)
KS統計量由兩位蘇聯數學家A.N. Kolmogorov和N.V. Smirnov提出。在風控中,KS常用于評估模型區分度。區分度越大,說明模型的風險排序能力(ranking ability)越強。
K-S曲線與ROC曲線類似,不同在于

  • ROC曲線將真正例率和假正例率作為橫縱軸
  • K-S曲線將真正例率和假正例率都作為縱軸,橫軸則由選定的閾值來充當。
    公式如下:
    KS=max(TPR?FPR)KS=max(TPR-FPR)KS=max(TPR?FPR)
    KS不同代表的不同情況,一般情況KS值越大,模型的區分能力越強,但是也不是越大模型效果就越好,如果KS過大,模型可能存在異常,所以當KS值過高可能需要檢查模型是否過擬合。以下為KS值對應的模型情況,但此對應不是唯一的,只代表大致趨勢。
KS(%)好壞區分能力
20以下不建議采用
20-40較好
41-50良好
51-60很強
61-75非常強
75以上過于高,疑似存在問題

2、ROC

3、AUC

1.2.4. 賽題流程

1.3 代碼示例

本部分為對于數據讀取和指標評價的示例。

1.3.1 數據讀取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() idloanAmntterminterestRateinstallmentgradesubGradeemploymentTitleemploymentLengthhomeOwnership...n5n6n7n8n9n10n11n12n13n1401234
035000.0519.52917.97EE2320.02 years2...9.08.04.012.02.07.00.00.00.02.0
118000.0518.49461.90DD2219843.05 years0...NaNNaNNaNNaNNaN13.0NaNNaNNaNNaN
212000.0516.99298.17DD331698.08 years0...0.021.04.05.03.011.00.00.00.04.0
311000.037.26340.96AA446854.010+ years1...16.04.07.021.06.09.00.00.00.01.0
43000.0312.99101.07CC254.0NaN1...4.09.010.015.07.012.00.00.00.04.0

5 rows × 47 columns

1.3.2 分類指標評價計算示例

## 混淆矩陣 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值 在實際操作時往往使用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.5238095238095237

1.4 經驗總結

賽題理解是開始比賽的第一步,賽題的理解有助于對競賽全局的把握。通過賽題理解有助于對賽題的業務邏輯把握,對于后期的特征工程構建和模型選擇都尤為重要。

  • 在開始比賽之前要對賽題進行充分的了解。
  • 比賽什么時候開始,什么時候結束,什么時候換B榜數據。
  • 和該比賽有沒有類似的比賽可以參考借鑒。
  • 線上提交結果的次數往往是有限的,提前了解每日可以提交的次數。
  • 比賽使用的是什么評價指標,可以選擇相同的評價指標作為線下驗證的方式。

1.5 拓展知識——評分卡

評分卡是一張擁有分數刻度會讓相應閾值的表。信用評分卡是用于用戶信用的一張刻度表。以下代碼是一個非標準評分卡的代碼流程,用于刻畫用戶的信用評分。評分卡是金融風控中常用的一種對于用戶信用進行刻畫的手段哦!

#評分卡 不是標準評分卡 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 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的【算法竞赛学习】金融风控之贷款违约预测-赛题理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。