阿里云天池学习赛【金融风控-贷款违约预测】
- 赛题数据及背景
-
- 学习目标
- 赛题概况
- 数据概况
- 预测指标
- 预测指标的直接引入
-
- sklearn里的常见评测指标
- 经验总结
赛题数据及背景
阿里云天池学习赛【金融风控-贷款违约预测】
https://tianchi.aliyun.com/competition/entrance/531830/introduction
学习目标
1.理解赛题数据和目标
2.清楚评分体系
赛题概况
比赛要求参赛选手根据给定的数据集,建立模型,预测金融风险。
赛题以预测金融风险为任务,数据集报名后可见并可下载,该数据来自某信贷平台的贷款记录,总数据量超过120w,包含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,为一些贷款人行为计数特征的处理
预测指标
竞赛采用AUC作为评价指标。AUC(Area Under Curve)被定义为 ROC曲线 下与坐标轴围成的面积。
预测指标的直接引入
因个人专业知识有限,不能很好的给大家解释AUC的定义
小白如何快速进行对自己预测的结果进行评价是个很重要的问题
这里推荐给大家一个如何快速进行评价的方法
引入sklearn.metrics 里面提供了大部分评价的方法可以直接进行预测结果的评估
sklearn里的常见评测指标
评价指标 分类问题(Classification) | 函数(评价指标详细内容点击查看官方文档) | 评价侧重点 |
---|---|---|
accuracy | metrics.accuracy_score | 正确预测的样本数占总预测样本数的比值 |
average_precision | metrics.average_precision_score | 所有预测为正确样本的样本中有多少是真正的正确样本 |
f1 | metrics.f1_score | F值是精确率1和召回率2的均值 |
f1_micro | metrics.f1_score | 通过先计算总体的TP3,FN4和FP5的数量,再计算F1 |
f1_macro | metrics.f1_score | 先计算出每个类别的F1值,然后去平均,比如下面多分类问题,总共有1,2,3,4这4个类别,我们可以先算出1的F1,2的F1,3的F1,4的F1,然后再取平均(F1+F2+F3+4)/4 |
f1_weighted | metrics.f1_score | 先计算出每个类别的F1值,然后与对应类别标签所占的样本比例相乘,然后相加最后得到f1_weighted |
f1_samples | metrics.f1_score | 计算每个实例的指标,并找到其平均值 |
neg_log_loss | metrics.log_loss | 即log_loss(y_true,y_pred),它将生成一个正分数-分数越小,性能越好。 |
precision etc. | metrics.precision_score | 精确度1计算 |
recall etc. | metrics.recall_score | 召回率2计算 |
roc_auc | metrics.roc_auc_score | 根据预测分数计算 特性曲线(ROC AUC) 下的面积。(本次比赛所用评价指标) |
评价指标 聚类问题(Clustering) | 函数(评价指标详细内容点击查看官方文档) | 评价侧重点 |
---|---|---|
adjusted_rand_score | metrics.adjusted_rand_score | 通过考虑所有样本对并计算在预测的聚类和真实的聚类中分配在相同或不同聚类中的对来计算两个聚类之间的相似性度量 |
评价指标 回归问题(Regression) | 函数(评价指标详细内容点击查看官方文档) | 评价侧重点 |
---|---|---|
neg_mean_absolute_error | metrics.mean_absolute_error | 平均绝对误差回归损失 |
neg_mean_squared_error | metrics.mean_squared_error | 均方误差回归损失 |
neg_median_absolute_error | metrics.median_absolute_error | 中值绝对误差回归损失 |
r2 | metrics.r2_score | R ^ 2(确定系数)回归得分函数。 |
本次比赛使用的评价指标是 roc_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])
roc_auc_score(y_true, y_scores)
# 评价分数为0.75
其他评价指标函数的详细信息,可点击对应函数名称查阅详细的解释文档,这里就不再赘述
经验总结
- 在开始比赛之前对赛题的目标,评价指标进行了解。
- 比赛什么时候开始,什么时候结束,什么时候换B榜数据。
A榜:提交预测结果文件,返回分数进行排名,仅作初步判断
B榜:最终线上成绩与排名以B榜成绩与排名为准
采用AB榜的主要原因是考察机器学习模型的泛化能力
简单来说就是测试集被划分成A与B,提交“测试集”的所有预测结果(包含A和B),排行榜上仅显示测试集A的成绩,即A榜,最终成绩还是需要看B榜成绩。 - 和该比赛有没有类似的比赛可以参考借鉴。
- 线上提交结果的次数往往是有限的,提前了解每日可以提交的次数,有的比赛可能会限制总提交次数。
- 比赛使用的是什么评价指标,可以选择相同的评价指标作为线下验证的方式。
- 可以将训练集按照比例再次划分为训练集与测试集,提升模型的泛化能力。
END
by xiaoc【Datawhale学习群名称:南山有鸢】
精确率:所有预测为正确样本的样本中有多少是真正的正确样本,可理解为查准率。
Precision = TP/(TP+FP)
即正确预测的正例数 /预测正例总数 ↩︎ ↩︎召回率:实际正样本中,分类器能预测出多少。与真正率相等,可理解为查全率。
Recall = TP/(TP+FN)
即正确预测的正例数 /实际正例总数 ↩︎ ↩︎真阳性(TP): 预测为正, 实际也为正 ↩︎
假阴性(FN): 预测为负,实际为正 ↩︎
假阳性(FP): 预测为正, 实际为负 ↩︎