目录
一、评分卡介绍
二、数据收集
三、数据准备
3.1. 数据准备包括:处理异常值、缺失值、定义好坏客户、样本量、定义样本窗口期等。
3.2. 变量可视化:可助于寻找特征数据之间的关系和发现问题。
四、变量筛选
4.1. IV和WOE
4.2. 第二次筛选:相关性分析
4.3. 衍生变量(组合变量)
五、变量分箱
六、建立模型
6.1. logit变换函数推导
6.2. 如何将logistic回归系数转化为信用评分
七、模型验证
八、模型部署
九、模型监控
信用评分是通过统计模型对潜在客户和已有客户在贷款时的风险通过打分的方式进行评估的一种方法。比如:年龄变量,25岁以下打分120,25-35岁打分150,35-50岁打分180,50岁以上则打分150。通过对申请人特征打分,相加之和再进行决策。评分卡模型建立可做多种决策,如:是否同意放款;是否同意其提升信用额度;给其发放哪一种信用卡;以及客户逾期后,如何催讨。
评分卡开发流程:
模型部署完成后,不代表项目就可以安枕无忧了,后续要需要做模型的监控,随着时间的推移(因为市场的变动,又或者黑中介对模型的检测),模型的表现力会慢慢的的下降。
数据收集分为:内部数据源和外部数据源。内部数据源:①、申请数据(Application Data):身份证、年龄三要素等;②、行为数据(Behavioural Data):贷款后还款情况等。外部数据源:芝麻分、同盾分等第三方大数据。
数据收集流程 | |
第一阶段 | 原始数据(Origination):贷前收集的申请数据 |
第二阶段 | 行为数据(Behaviour):用户还款历史、产品使用情况 |
第三阶段 | 催收数据(Collection):逾期的客户的行为数据,推测成为呆账坏账的概率 |
根据数据的收集流程,我们也可以将评分卡分为三类卡:A卡、B卡、C卡
评分卡名称 | 评分卡概述 |
A卡(Application scorecard) | 贷前审批阶段对借款申请人的量化评估 |
B卡 (Behaviour scorecard) | 贷后管理,通过借款人的还款行为,及其他维度,预测借款人未来的还款能力和意愿 |
C卡(Collection scorecard) | 催收管理,借款人当前逾期前提下,预测该笔贷款未来变为坏账的概率,由此衍生出:滚动率、还款率、失联率等细分模型 |
注意:不同的产品要开发不同的评分卡,数据不能混合着用。(比如:信用贷和抵押贷产品对逾期宽容程度是不同的,开发抵押贷产品C卡时,不能将信用贷数据并在一起开发。)
数据获取方法:①、购买(同盾、聚信立、公安OCR);②、爬虫(法院执行名单、黑名单);③、和第三方公司合作
标准化绘图公式:某分组坏客户比例 = 某分组坏客户数 ÷ 某分组总客户数
年龄段 | 总客户 | 坏客户数 | 好客户数 | 坏客户比例 |
<21 | 10 | 5 | 5 | 0.5 |
21-30 | 2500 | 1000 | 1500 | 0.4 |
31-40 | 5000 | 1500 | 3500 | 0.3 |
41-50 | 3500 | 700 | 2800 | 0.2 |
51-60 | 2000 | 300 | 1700 | 0.15 |
>=60 | 20 | 2 | 18 | 0.1 |
(数据不是真实数据,做个例子)从上图可看,年龄越大,逾期率越低。
变量筛选步骤(适合逻辑回归):1.原始变量集 —> 2.计算变量预测能力 —> 3.筛选预测能力强的变量 (数据预处理可以省掉很多步骤,可看:https://blog.csdn.net/weixin_41712808/article/details/85323417 中的特征相关性和预处理 )
具体方法:①、初步筛选:iv(适合逻辑回归评分卡);②、第二次筛选:相关性分析
其他方法有:F score 、信息增益等
公式:
例子:计算各组年龄的woe及年龄IV值
Age | good | bad | ||
<18 | 50 | 40 | ||
18-30 | 100 | 60 | ||
30-60 | 100 | 80 | ||
>60 | 80 | 40 | ||
All | 330 | 220 |
年龄IV是将各组的相加之和,等于0.0372。根据经验:
由例子来看,年龄这个变量用来预测是否好坏客户有帮助的,可用做建模特征。
拓展:从其他帖子和课程中有提到,odds和woe的关系,大多讲的不是很清楚,都是说。但我翻阅了一些资料,odds是机率,可能发生概率除以不发生概率,公式:,前后思考和woe并无关系呀,后来找呀,发现了比值比(OR)的东西。我的推断是这样的,某变量分3组预测好坏客户是否有帮助:
好客户(个数) | 坏客户(个数) | 和 | |
1组 | a | d | |
2组 | b | e | |
3组 | c | f | |
和 |
假设是1组好坏客户比率,是总好坏客户比率。
有木有发现这个结果很眼熟呢,就是我们之前写的WOE公式,就是1组好客户占比,则是1组坏客户占比:。统计学中还有个公式赔率odd:获胜概率除以失败概率,和OR比值比是一样的事情,so,化简后:odds=好客户占比/坏客户占比。
另一个心得:IV公式其实就是各组woe加权后累加之和。
变量之间相关性分析,如果两两之间相关性显著,会影响模型的预测效果。我们希望选择的变量是该变量和预测目标变量尽可能高度相关,而和其他信息维度尽可能低度相关。计算变量之间相关性有两个方法:皮尔斯和斯皮尔曼。皮尔斯方法计算相关性准确性更高,但这个方法只适合服从正态分布的变量,而斯皮尔曼则没有这个要求。如果使用皮尔斯方法,还需要检验变量是否服从正态分布,工作是比较繁琐的,所以折中可以用斯皮尔曼方法。(之前写过一篇用python处理特征相关性,用corr函数亦可:https://blog.csdn.net/weixin_41712808/article/details/85323417)
衍生变量就是由两个或两个以上的变量变换所得,使得衍生出来的新变量和其他变量相关性较低,避免发生多重共线性问题。比如:我们发现年龄和收入的相关系数是0.76,相关性是较高的。而固定债务和收入比率(FOIR)和年龄相关性只有0.18,我们可以用收入和债务变量变换后的变量来代替收入和债务,从而可降低变量间相关性。
如何处理变量转换需要由良好的领域知识和开发模型的经验,我个人心得是,多问风控人员,和业务线紧密沟通。比如上面说的FOIR是不是很像风控员做的负债表中一个指标。
为了信用评分模型的结果形式是可以打分的,需要将变量分类。变量分两种:连续变量和离散变量,对连续型变量进行分段再统计学上称为分箱。离散型变量取值较少(如:性别只有两类)可不需要对其处理,如果离散变量取值较多时,需要对其类别归并,归并方法,可以按woe值接近原则,woe相近归一类(如:职业有很多,外科医生和内科医生可以归为一类)。
前面用IV值筛选变量,我们判断变量对预测目标变量是否重要的同时,可以分析分箱是否合理。分箱一般遵循以下原则:
从上图可看,作图的分箱是不合理的,而右图是优化后的分箱。通过右图可得违约率(woe)随着年龄的增加而下降,但60岁以后违约率又开始上升。
分箱优化方法:①、卡方;②、kmean;③、平均法
好的分箱可以提高变量IV值,从而增大变量对目标变量的预测能力。
数据处理后,我们可以终于可以进行建模了,建模的算法有很多,比如神经网络、决策树、逻辑回归等。我们这里选用的是逻辑回归。Logistic回归常用于预测离散型目标变量,它的优点:稳定,广泛用于评分卡开发;解释性强,评分卡易于理解。Logistict回归详细介绍:https://blog.csdn.net/weixin_41712808/article/details/85788687
Logistict回归的模型形式为:
sigmoid函数:
sigmoid函数得到的是预测值概率,如预测某客户是坏客户的概率是多少。而odds则是预测客户赔率是多少:
目前行业常用此方程表示信用评分取值关系: ——①式
我们通常希望评分卡满足以下要求:
为了满足以上条件,那么评分卡方程需满足:
——②式
pdo:表示为了使增加一倍需增加得评分值
解①、②方程,可得:
:基本分数,即在特定刻度比时对应的特定分数。:定义好坏客户得评分临界值,高于offset则是好客户,反之坏客户。Factor:系数,回归方程转为信用评分得系数。
从上面公式,我们已经得到offset和factor值,那么我们也可推导出该客户得评分是多少:
k:各变量得分箱数;n:变量个数;i:第i个样本;j:第i个样本的第j个变量;:logistic回归常数项系数;:logistic回归第j个变量系数;:代表第j个变量的各分箱woe值,如下图:
样本序号 | 变量a | 变量a的woe |
0 | 18 | 0.102857 |
1 | 9 | -0.49062 |
2 | 12 | -0.49062 |
3 | 12 | -0.49062 |
4 | 12 | -0.49062 |
8 | 18 | 0.102857 |
10 | 11 | -0.49062 |
14 | 18 | 0.102857 |
变量a有两个分箱,9-12段woe: -0.49062,13-18段woe:0.102857,变量值在哪个阶段,该样本j变量的woe值是对应分箱的woe值。
从公式看,预测的信用评分Score值是好坏客户临界分数减各个变量的woe代入logistic回归方程的和。除此我们还可以变换得到各变量、各分箱对应的评分值:
分箱对应评分值= (这里的woe是j变量的各分箱woe,没指定哪个样本)
模型开发前,我们一般会将数据分为:训练集train、测试集test、跨时间数据oot(train和test是同一时间段数据,一般三七分,oot是不同时间段的数据,用来验证模型是否适用未来场景),除此还可以用交叉验证方法,交叉验证是防止某数据过度集中。验证指标有:
这步骤主要工作在于如何设置阈值,即设定坏客户概率大于多少时定为坏客户,拒绝放款。这部分结合产品特性,和业务线沟通可以更好的确定阈值,当然也可以用recall函数进行调整。
模型部署完不代表工作就完成,还需要不断的监控,部署的时候可以设定几个指标,如:区分能力、稳定性及单调性,可以每天返回这几个指标,如果指标出现异常的时候,可以自动发送邮件或者出现红色指标提示。进而再寻找问题,优化模型。
End……后面努力再写关于评分卡的python应用篇
参考文献及资料,感谢前辈们的经验传授: