金融风控-贷款违约预测
Datawhale组队学习之零基础入门金融风控-贷款违约预测
-
TASK1 赛题理解
-
-
1.1 学习目标
-
1.2 了解赛题
-
- 1.2.1 赛题概况
- 1.2.2 数据概况
- 1.2.3 预测指标
- 1.2.4 赛题流程
-
1.3 赛制说明
-
1.4 代码示例
-
- 1.4.1 数据读取之pandas
- 1.4.2 分类指标评价计算示例
-
-
1.5 经验总结
-
- 1.6 评分卡
TASK1 赛题理解
本次新人赛是由Datawhale和天池共同发起的「零基础入门」系列赛事中的第四场——「零基础入门」金融风控主题下的「贷款违约预测挑战赛」。本赛场题围绕着金融风控领域中的个人信贷问题展开,在线参赛者需基于提供的贷款申请人的数据信息来评估其是否存在违约风险的可能性,并据此决定是否批准发放相应的贷款……这是一个典型的分类问题
存储位置: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 赛题概况
本次竞赛的任务是预测金融风险。报名后可见且可下载的数据集将用于分析。这些数据源自某一信贷平台的贷款记录,并包含47个字段的信息。其中15个字段是匿名化的。为了确保比赛的公平性,在数据分析过程中会科学合理地选取80万条作为训练集A,并从中进一步提取20万条作为测试集B用于评估模型性能。同时,在数据分析前会对employmentTitle、purpose、postCode和title等字段进行脱敏处理以规避敏感信息泄露的问题。
1.2.2 数据概况
在比赛界面的信息都有对应的简要说明(不包括匿名特征)。详细阐述各字段的基本属性及其作用。了解这些字段的基本属性及其作用有助于我们更好地理解和开展后续分析。
- ID编号用于标识唯一的信用证
- 借款金额
- 还款期限(年)
- 年利率
- 分期还款额
- 信用级别
- 信用子级别
- 职业类别名称
- 任职期限(年)
- 房产所有权状态描述为...
- 借款人提供的贷款名称
- 公开可用策略_代码设置为...=1表示新产品不公开可用,=2表示新策略正在推广中
- 匿名特征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 = \frac{TP + TN}{TP + TN + FP + FN}
- 精确率(Precision)也被称为查准率,在信息检索中表示正确分类为阳性实例的数量(TP)与被分类为阳性实例的总数(TP+FP)的比例。Precision = \frac{TP}{TP + FP}
召回率(Recall)又被称作查全率,在信息检索或机器学习中表示正确识别出的正类实例数与所有真实正样本总数的比例。Recall = \frac{TP}{TP + FN}
5、F1 Score衡量精确度与召回率之间的关系,在提升其中一个指标时可能会导致另一个指标下降;因此,在两者之间寻求平衡的最佳方法是综合考量两者的综合表现。(数学公式保持不变)
6、Precision-Recall曲线(简称PR曲线) Precision-Recall曲线用于描述精确率与召回率的变化情况

7、ROC(Receiver Operating Characteristic)
在ROC空间中,假正例率(FPR)被指定为X轴变量而真正例率(TPR)则作为Y轴变量。 TPR表示,在所有真实正样本中被正确分类的比例。 FPR则表示,在所有真实负样本中被错误分类的比例。 公式如下: TPR = \frac{TP}{TP + FN} 和 FPR = \frac{FP}{FP + TN}

8、Area Under the Curve(AUC)Area\ Under\ the\ Curve 被定义为 ROC 曲线下与坐标轴围成的区域面积。可以看出该面积值不会超过 1。然而,在大多数情况下 ROC 曲线都位于 y=x 这条直线之上(除了个别异常情况),因此 AUC 的取值范围介于 0.5 至 1 之间。当 AUC 越趋近于 1.0 时,则表明检测方法的真实性能力越强;反之当 AUC 等于 0.5 时,则检测方法的真实性和应用价值均降至最低水平。
对于金融风控预测类常见的评估指标如下:
1、KS(Kolmogorov-Smirnov) KS统计量源自苏联数学家A.N. Kolmogorov和N.V. Smirnov的研究成果,在金融风控领域中被广泛应用于评估模型的区分度。具体而言,在风控应用中,当模型的风险排序能力(ranking ability)越大,则其区分度也就越高。此外,在实际应用中我们还发现K-S曲线与ROC曲线具有相似性
该法将真正例率与假正例率分别设为横纵坐标轴。 此图以真阳率与假阳率共同构成纵坐标轴,并以选定阈值作为横坐标轴。 公式如下: KS=max(TPR-FPR) 一般情况下KS值越大表明模型区分能力越强 通常情况KS值越大模型表现越优 但如果出现过大的KS值 可能提示模型存在过度拟合现象 在实际应用中应结合具体业务背景综合分析模型性能表现
| KS(%) | 好坏区分能力 |
|---|---|
| 20以下 | 不建议采用 |
| 20-40 | 较好 |
| 41-50 | 良好 |
| 51-60 | 很强 |
| 61-75 | 非常强 |
| 75以上 | 过于高,疑似存在问题 |
2、ROC
3、AUC
1.2.4 赛题流程

1.3 赛制说明
本次赛事分为两个阶段,分别为正式赛及长期赛。
正式赛(9月5日 - 11月12日)
在报名成功后的一段时间内(具体时间待系统通知),每位选手均可下载相关数据,并在此基础上完成算法调试工作;随后通过赛题页面左侧提供的提交入口上传计算结果;
每次提交完成后系统会立即进行评估测试;每日每位队伍最多可提交两次结果;排行榜将在每隔一小时重新更新一次,并依据评测得分从高到低进行排序;为了确保公平性,在本次赛事中我们特别设置了历史最优成绩展示机制(即每次更新后的排名都将基于当前最优表现),最终于11月12日晚上8点公布最终榜单并据此确定赛事期间的所有奖项名次及奖励方案。
长期赛(11月16日以后)
自比赛开始以来(或自指定日期起),本次比赛将向所有参赛者永久开放,请注意比赛的具体时间和规则安排!
本次新人赛的主要目标是旨在促进处于初级阶段的新同学积极参与其中。因此我们鼓励所有参赛者以赛题为基础撰写notebook进行分享,并涵盖以下内容:包括对题目理解的具体分析 数据处理与可视化的方法展示 算法模型的设计与优化过程以及核心创新思路等
1.4 代码示例
本部分为对于数据读取和指标评价的示例。
1.4.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()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
1.4.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)
## 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.5 经验总结
赛题理解是开始比赛的第一步,在整个竞赛过程中占据重要地位。深入分析题目理解有助于全面把控全局的业务逻辑结构,并为后续的特征工程搭建和模型选择奠定基础。
- 应应在比赛开赛前深入研究赛题内容。
- 请问比赛何时启动?何时结束?B榜数据更换的时间点是多久?
- 是否有其他性质相似的比赛可供参考?
- 线上提交次数通常有限制。建议提前查看每日可提交次数上限。
- 该评价机制采用了何种评估标准?可以选择相同或相近的标准用于线下验证。
1.6 评分卡
评分系统是一张使用分数刻度来设定不同阈值的表格;它被设计为评估用户的信贷风险等级;以下代码展示了如何构建一个非标准信用评分模型的技术流程;而评分系统则是金融风控领域中一种广泛应用于评估用户信用状况的技术手段
#评分卡 不是标准评分卡
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
