python的评分卡模型

本文通过对kaggle上的Give Me Some Credit数据的挖掘分析,结合信用评分卡的建立原理,从数据的预处理、建模分析、建立评分卡创建了一个简单的信用评分系统。
1、评分卡的原理
客户申请评分卡是一种统计模型,它可基于对当前申请人的各项资料进行评估并给出一个分数,该评分能定量对申请人做出等级划分。
申请评分卡由一系列特征项分割组成,每个特征项相当于申请表上的一个问题(例如,年龄、银行流水、收入等)。每一个特征项都有一系列可能的水平,相当于每一个问题的一系列可能答案(例如,对于年龄这个问题,答案可能就有30岁以下、30到45等)。在开发评分卡系统模型中,先确定特征水平与申请人未来信用表现之间的逻辑关系,然后给特征水平分配适当的分数权重,分配的分数权重要反映这种相互关系。分数权重越大,说明该特征水平对预测的作用越大。一个申请的得分是其属性分值的简单求和。如果申请人的信用评分大于等于金融放款机构所设定的界限分数,此申请处于可接受的风险水平并将被批准;低于界限分数的申请人将被拒绝或给予标示以便进一步审查。
2、评分卡模型的构建步骤
1、数据抽取和整理
2、模型设计
3、数据加工清洗
4、单变量WOE分析和转换
5、 逻辑回归模型训练
6、 评分转换
7、模型实施和监控
2.1 数据导入

2.2 数据预处理
2.2.1 列名转换

2.2.2 缺失值处理
月收入缺失比:19.82%
家属数量缺失比:2.62%
家属数量对应的缺失比例低于5%,可直接删除;月收入缺失比比较高,不能直接删除,利用填充平均值的方法进行补充;

2.2.3 异常值处理
异常值处理之前,我们首先需要对异常值进行检测,这里是用箱形图判断异常值。

可用额度的比值是该客户的可用额度比总额度的比值,所以值不应该大于1,大于1的部分进行删除。

年龄不应该有0岁,显然是异常值,因此需要删除等于0岁的记录。


固定资产贷款数量大于50的算作异常值,予以删除。


3、数据探索性分析
这里针对用户的年龄、月收入、负债率等指标进行分析,看坏账用户与哪些指标有关。
3.1 单变量分析




通过上面年龄-好坏客户分布图和坏客户率与年龄变化图可以看出,38-55岁这部分人群的好客户和坏客户的绝对数量均是top1,随着年龄的增长、坏客户率在降低,且38-72岁之间降低最快。


好坏客户主要集中在月收入10000以下的群体中,月收入在0-15000之间,坏客户率随着月收入的增加而降低,之后进入平稳,当月收入超过20000时,坏客户率又开始上升。这里为什么月收入越高超过20000时,坏客户率开始上升?结合这些人群的职业,发现这部分人不是普通工作,收入不太稳固。
4. 多变量分析
多变量分析主要是分析变量之间的关系。

热力图表示不同变量之间的关系,单元格颜色越深,表示交叉的两个变量相关性越强。整体变量之间相关系数小于0.5,偏向弱相关,可不处理。
5. 特征选择
1、共线性检验
共线性是线性回归模型中的特征之间由于存在相关关系而使模型估计失真或者难以估计准确。而评分卡中用到的是LR模型是广义线性模型,所以需要进行共线性检验。
由上图热力图,变量之间的相关性比较小,所以不存在共线性问题。
2、特征选择
特征选择是指剔除跟目标变量不太相关的特征,过滤掉一些对于目标变量影响权重较小的特征变量,本篇我们使用IV值进行特征筛选。
WOE称为迹象权数(weight of evidence),计算公式为:ln(正常件占比/违约件占比) = ln((组内正常/组内违约)/(整体正常/整体违约)),违约件占率高于正常件时,迹象权数为负数。绝对值越高,表示该组别好坏客户的区隔程度越高,各组之间WOE值差距尽可能拉开并呈现由低至高的合理趋势
。
迹象权数相近,可见好/坏概念特征相仿,所以合并组减少N(N代表组数),从而突出好坏客户的资产分界线特征;
WOE其实描述了变量当前这个分组,对判断个体是否会响应(或者说属于哪个类)所起到影响方向和大小,当WOE为正时,变量当前取值对判断个体是否会响应起到的正向的影响,当WOE为负时,起到了负向影响。而WOE值的大小,则是这个影响的大小的体现。
IV称为信息值(Information value,IV),计算公式为SUM((正常件占比-违约件占比)* 迹象权数),IV值表示变量预测能力的强度
;
IV值于WOE值的区别:IV值是WOE值乘上(正常件-违约件占比)两类总体占比差值,体现了变量当前分组中个体的数量占总体个体数量的比例。
2.1 WOE分箱
所谓的WOE分箱就是将连续变量离散化, 即切分成不同的区间段,离散化后的变量具有很好的稳定性,比如年龄这个连续变量,如果是连续值的时候21和29就是两个不同的值,对模型的效果可能就不一样,如果离散化成20-30的时候,这两个年龄对模型的效果就是一样,更加稳定。
分组的原则:
数据切分的进行分组,分组的原则为组间差异大,组内差异小。分组占率不宜低于5%,且各组中必须同时拥有好坏客户。分裂出的分箱数<=预设的最大分箱数;
分组中,响应的比例越大(违约件组内占比越大),WOE值越大,WOE值差距要尽可能拉开,并呈现由低至高的单调趋势。
pandas.core.series.Series





2.2 计算IV值

可以看到["负债率","月收入","信贷数量","固定资产贷款量","家属数量"]这几个特征的IV值过低,对目标变量的影响较小,将其过滤掉。
2.3 用woe值代替原始数据
6、模型训练
ROC曲线

## 由于样本不平衡导致正确率与AUC差距大
7 计算得分
可用额度比值对应的分数:[-22.0, -21.0, -5.0, 19.0]
年龄对应的分数:[8.0, 5.0, 4.0, 3.0, -0.0, -6.0, -13.0, -16.0]
逾期30-59天笔数对应的分数:[-8.0, 14.0, 27.0, 37.0, 42.0]
逾期90天笔数对应的分数:[-6.0, 34.0, 48.0, 57.0, 57.0]
逾期60-89天笔数对应的分数:[-3.0, 24.0, 35.0, 39.0]
上面得到的是不同特征值对应的分数,评分越高表明该用户越有可能相应目标变量,成为坏用户;特征划分区间是依次递增的,特征区间值与得分是相对应的,年龄越大,坏账的可能性越低;逾期笔数越多,坏账可能性越高,得分越高;最后将所有的变量对应的得分相加,就是每个用户的得分。
转载https://zhuanlan.zhihu.com/p/131011501
作者评论:此文描述了评分卡大概流程,但诸多细节还有改善空间,例如变量筛选,分箱,模型验证,多算法比较,非平衡数据处理等等流程。异常值删除也指的讨论。
欢迎了解专业系统化的《python金融风控评分卡模型和数据分析(加强版)》
https://ke.qq.com/course/package/43071

QQ学习群:1026993837 领学习资料
在公众号「python风控模型」里回复关键字:学习资料
