零基础入门金融风控之贷款违约预测—赛题理解

赛题数据

赛题数据来自某信贷平台的贷款记录,总数据量超过 120 万条,包含 47 列变量信息,其中 15 列为匿名变量。从中抽取 80 万条作为训练集,20 万条作为测试集A,20 万条作为测试集B,同时会对 employmentTitle、purpose、postCode 和 title 等信息进行脱敏。

字段表:

字段名描述
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 的概率,也就是 y = 1 y=1 y=1 的概率。评价方法为 AUC 评估模型效果(越大越好)。

AUC(Area Under Curve)的定义为 ROC曲线 下与坐标轴围成的面积。

提交格式

提交的格式如下所示:

id,isDefault
800000,0.5
800001,0.5
800002,0.5
800003,0.5

主要流程

在这里插入图片描述

分类算法常见的评估指标

  • 若一个实例是正类,并且被预测为正类,即为真正类 TP (True Positive )
  • 若一个实例是正类,但是被预测为负类,即为假负类 FN (False Negative )
  • 若一个实例是负类,但是被预测为正类,即为假正类 FP (False Positive )
  • 若一个实例是负类,并且被预测为负类,即为真负类 TN (True Negative )

混淆矩阵(Confuse Matrix)

混淆矩阵的对角线表示分类正确的样本的数量,对角线以外的元素表示被误分的样本的数量。
[ T P F N F P T N ] \begin{bmatrix} TP & FN \\ FP & TN \end{bmatrix} [TPFPFNTN]

准确率(Accuracy)

准确率是常用的一个评价指标,但是不适合样本不均衡的情况(比如10000 个样本中,9999 个为负类,1 个为正类。此时全将样本划分为负类则该算法的准确率可高达 99.9% 以上,但是这样的分类算法是没有意义的)。

A c c u r a c y = T P + T N T P + T N + F P + F N = 分 类 正 确 的 样 本 数 样 本 总 数 Accuracy = \frac{TP+TN}{TP+TN+FP+FN} = \frac{分类正确的样本数}{样本总数} Accuracy=TP+TN+FP+FNTP+TN=

精确率(Precision)

又称查准率,正确预测为正样本(TP)占预测为正样本(TP+FP)的百分比,即预测为正类的样本中,有多少是预测正确的。

P r e c i s i o n = T P T P + F P = 预 测 正 确 的 正 类 预 测 为 正 类 的 样 本 数 量 Precision = \frac{TP}{TP+FP} = \frac{预测正确的正类}{预测为正类的样本数量} Precision=TP+FPTP=

召回率(Recall)

又称为查全率,正确预测为正样本(TP)占正样本(TP+FN)的百分比,即分类算法能找到所有正类样本中的多少样本。

R e c a l l = T P T P + F N = 预 测 正 确 的 正 类 正 类 的 样 本 数 量 Recall = \frac{TP}{TP+FN} = \frac{预测正确的正类}{正类的样本数量} Recall=TP+FNTP=

F1 Score

精确率和召回率是相互影响的,精确率升高则召回率下降,召回率升高则精确率下降,如果需要兼顾二者,就需要精确率、召回率的结合 F1 Score.

F 1 − S c o r e = 2 1 P r e c i s i o n + 1 R e c a l l F1-Score = \frac{2}{\frac{1}{Precision}+\frac{1}{Recall}} F1Score=Precision1+Recall12

P-R曲线(Precision-Recall Curve)

P-R 曲线是描述精确率和召回率变化的曲线。

在这里插入图片描述

ROC(Receiver Operating Characteristic)

ROC曲线是描述假正例率(FPR)和真正例率(TPR)的曲线。

在这里插入图片描述

  • TPR:在所有实际为正类的样本中,被正确地判断为正类之比率
    T P R = T P T P + F N TPR = \frac{TP}{TP+FN} TPR=TP+FNTP
  • FPR:在所有实际为负类的样本中,被错误地判断为正类之比率
    F P R = F P F P + T N FPR = \frac{FP}{FP+TN} FPR=FP+TNFP

AUC(Area Under Curve)

AUC(Area Under Curve)被定义为 ROC 曲线与 x 轴围成的面积,显然这个面积的数值不会大于1. 又由于 ROC 曲线一般都位于 y = x y=x y=x 直线的上方,所以 AUC 的取值范围在 0.5 和 1 之间。AUC 越接近 1,检测方法真实性越高,AUC 等于 0.5 时,真实性最低,无应用价值。

金融风控预测类常见的评估指标

KS(Kolmogorov-Smirnov)

  • KS 曲线与 ROC 曲线类似,不同在于ROC 曲线将真正例率和假正例率作为横纵轴,KS 曲线将真正例率和假正例率都作为纵轴,横轴则由选定的阈值(区分正类和负类的阈值)来充当。
     
    在这里插入图片描述
  • K S = m a x ( T P R − F P R ) KS = max(TPR-FPR) KS=max(TPRFPR),即两条曲线间的最大间隔。
  • KS 曲线的值越大,表示模型能够将正、负类别区分开的程度越大,KS值的取值范围是 [ 0 , 1 ] [0,1] [0,1]. 但是也不是 KS 的值越大模型效果就越好,如果 KS 过大,模型可能存在异常,所以当 KS 值过高可能需要检查模型是否过拟合。
    • K S < 0.2 KS < 0.2 KS<0.2,一般认为模型没有区分能力
    • K S ∈ [ 0.2 , 0.3 ] KS \in [0.2,0.3] KS[0.2,0.3],模型具有一定区分能力,勉强可以接受
    • K S ∈ [ 0.3 , 0.5 ] KS \in [0.3,0.5] KS[0.3,0.5],模型具有较强的区分能力
    • K S > 0.75 KS > 0.75 KS>0.75,往往表示模型有异常

评估指标的代码实现

混淆矩阵

## 混淆矩阵
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))

Accuracy

## 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))

Precision,Recall,F1-score

## 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))

P-R 曲线

## 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)

ROC 曲线

## 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--') # y = x 直线
plt.ylabel('TPR')
plt.xlabel('FPR')

AUC

## 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))

KS 值

## 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)

评分卡

  • 评分卡是以分数的形式来衡量风险几率的一种手段
  • 评分卡对未来一段时间内违约行为的概率进行预测,通常评分越高越安全
  • 根据使用场景可分为反欺诈评分卡、申请评分卡、行为评分卡、催收评分卡等
#评分卡
def Score(prob,P0=600,PDO=20,badrate=None,goodrate=None):
P0 = P0 # 基础分
PDO = PDO # 好坏行为翻倍比
theta0 = badrate/goodrate
B = PDO/np.log(2) 
A = P0 + B*np.log(2*theta0)  
score = A-B*np.log(prob/(1-prob))
return score
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值