前言:

Github代码:基于逻辑评分卡建模

在介绍基于逻辑评分卡之前,需要对逻辑回归有个基本认知,最好能自己推导公式。文章链接:逻辑回归推导及相关常问问题

评分卡模型

1:概述

信用评分本质上是模式识别中的一类分类问题,将企业或者个体消费者划分为能够按期还本付息(即“好”客户)和违约(即“坏”)两类。

具体做法是根据历史数据中的样本,从已知的数据中找出违约及不违约客户的特征,从而总结出分类的规则,建立数学模型,用于测量价款人的违约风险(或者违约概率),为消费信贷决策提供依据。

2:建模的准备

2.1:目标变量的准备

研究的目标变量为客户是否具有违约行为,其中,以标管定义的在应还日期前应该还款但没有还款的行为,定义为逾期行为。

2.2:定量指标的筛选方法

筛选方法大致流程
随机森林用随机森林法寻找自变量中对违约状态影响最显著的指标
计算变量的相对重要性通过相对重要性的排序,获取自变量中对违约状态影响最显著的指标
广义交叉验证法通过自变量间的广义交叉验证,获取自变量中对违约状态影响最显著指标
自变量的逐步回归法通过自变量的逐步回归,获取自变量中对违约状态影响最显著的指标
采用“Boruta”法采用采用“Boruta”法,获取自变量中对违约状态影响最显著的指标

2.3:定性指标的筛选方法

定性指标的筛选是通过IV(Information Value)值选出适用于建模的指标-----(这里就不对IV做详细的解释和介绍了),总之IV值可以帮助我们衡量变量的预测能力(即帮模型预测好坏客户的能力)。再引入IV之前,要介绍另一个概念——WOE,这是因为IV值得计算是在WOE基础上的,同时,在介绍WOE之前,要介绍下特征分箱,这是因为WOE值是特征分箱后的计算结果。

由此,我们按照:特征分箱—— WOE值—— IV值,这条逻辑主线来依次介绍。

2.3.1 特征分箱

分箱的定义:

(1)将连续变量离散化

(2)将多状态的离散变量合并成少状态

(3)可以 将缺失作为独立的一个箱带入模型中

(4)将所有变量变换到相似的尺度上

分箱的重要性:

(1)稳定性:避免特征中无意义的波动对评分带来的波动

(2)健壮性:避免了极端值的影响

分箱的限制:

(1)计算量大

(2)分箱后需要编码

其中,分箱的方法分为:有监督和无监督分箱

有监督无监督
Best-KS等频
ChiMerge(即:常用的卡方分箱法)等距
聚类

**注:**这里不详细介绍每种分箱方法具体实现的过程

接下来介绍分箱需要注意点:

对于连续型变量:

(1)使用ChiMerge进行分箱(默认是5份)

(2)检查分箱后的bad rate的单调性,如果不满足,需要进行相邻的两箱合并,直到bad rate为止

(3)上述过程是收敛的,因为当箱数为2时,bad rate自然单调

(4)分箱必须覆盖所有样本为可能存在的值

(5)原始值很多时,为了减小时间的开销,通常选取较少(例如50个)初始切分点,但是要注意分布不均匀。

对于类别型变量:

(1)当类别上较少时,原则上不需要进行分箱

(2)都某个或者几个类别的bad rate为0时,需要和最小的非0的bad rate的箱进行合并

(3)当该变量可以完全区分目标变量时,需要认真检查该变量的合理性

2.3.2 WOE编码

WOE(weight of evidence),证据权重,是一种有监督的编码方式,将预测类别的集中度的属性作为编码的数值。

优势:

(1)将特征的值规范到相近的尺度上

(2)具有业务含义

缺点:

(1)需要每箱中同时包含好坏两个类别

以年龄属性,查看好坏样本的数量分布,得出WOE值

					**表1:按照“年龄”各个属性的好、坏统计**
AgebadgoodWOE
<1050200=ln((50/100)/(200/1000))=ln((50/200)/(100/1000))
10-1820200=ln((20/100)/(200/1000))=ln((20/200)/(100/1000))
18-355200=ln((5/100)/(200/1000))=ln((5/200)/(100/1000))
35-5015200=ln((15/100)/(200/1000))=ln((15/200)/(100/1000))
50y以上10200=ln((10/100)/(200/1000))=ln((10/200)/(100/1000))
总计1001000

可以看出,WOE反映的是在自变量每个分组下违约用户对正常用户占比和总体中违约用户对正常用户占比之间的差异,WOE越大,这种差异越大,这个分组里的样本响应的可能性就越大,WOE越小,差异越小,这个分组里的样本响应的可能性就越小。

从而可以直观的认为WOE蕴含了自变量取值对目标变量(违约概率)的影响。同时,又因为WOE计算形式与逻辑回归中目标变量的逻辑转换:
l n p 1 − p = W 0 + W 1 ∗ X 1 + . . . + W n ∗ X n ln\frac{p}{1-p}=W_0+W_1*X_1+...+W_n*X_n ln1pp=W0+W1X1+...+WnXn
非常相似,所以可将自变量WOE值替代原先的自变量值,计算公式如下:
W O E i = l n p i p n i = l n B i ∗ G T G i ∗ B T WOE_i=ln\frac{p_i}{p_{ni}}=ln\frac{B_i*G_T}{G_i*B_T} WOEi=lnpnipi=lnGiBTBiGT
其中,Bi 表示第i组违约用户的数量,BT 表示违约用户的总数量,Gi表示第i组正常用户的数量,GT表示正常用户的总数量。

WOE编码的一个最大好处,也就是把badrate呈现非线性的变量转换为线形,便于理解也便于后续模型求解

同样,对于每个分组i,都有一个IV值,IV指的计算公式如下:
I V i = B i B T − G i G T ∗ l n ( B i ∗ G T G i ∗ B T ) IV_i=\frac{B_i}{B_T}-\frac{G_i}{G_T}*ln(\frac{B_i*G_T}{G_i*B_T}) IVi=BTBiGTGiln(GiBTBiGT)

I V = ∑ k = 0 n I V i IV=\sum_{k=0}^n{IV_i} IV=k=0nIVi

IV值衡量的是解释变量对于目标变量的影响的显著水平。在使用IV值来考虑解释变量对于目标变量的影响时,解释变量筛选、变量赋值编码和模型稳健性评估,这些有先后顺序的过程可以同时进行。筛选出能够较好第预测目标变量的解释变量,并同时给出这些解释变量的一个合理的赋值编码结果。在进行建模前选择入模变量一般选择IV值较大的变量。

IV值的作用:

(1)非负指标,高IV表示该特征和目标变量的关联度高

(2)目标变量只能是二分类

(3)过高的IV,可能有潜在的风险

(4)特征分箱越细,IV值越高

常用的阈值:

IV <= 0.02 : 没有预测性,不可用

0.02 ~ 0.1 : 弱预测性

0.1 ~ 0.2 :有一定预测性

0.2 + :高预测性


3 :基于逻辑回归的评分卡模型

特征工程

3.1 特征工程

在构建基于逻辑回归评分卡模型前,需要进行特征工程步骤:
  1. 包括数据探索性分析
  2. 缺失值处理
  3. 异常值处理

3.2 特征分箱

完成特征工程步骤后,再进行特征分箱需要注意以下几点:
  1. 不超过5箱

  2. Bad Rate单调

  3. 每箱同时包含好坏样本

  4. 特殊值如-1,单独成一箱

连续型变量可直接分箱
类别型变量:

  1. 当取值较多时,先用bad rate编码,再用连续型分箱的方式进行分箱

  2. 当取值较少时:

    2.1 如果每种类别同时包含好坏样本,无需分箱

    2.2 如果有类别只包含好坏样本的一种,需要合并

3.3 特征筛选

特征筛选主要包括多变量和单变量分析
  1. 多变量分析主要是特征之间的协方差,得出不同特征之间相似性,剔除某些相似性高度相关的特征,可以加速模型收敛(即python常见的热度图分析)。
  2. 单变量分析,主要是根据基于WOE计算得出的IV值的大小进行特征筛选,IV值越大,包含的信息越多。剔除掉低于阈值的特征,因为这些特征没有预测性或者说预测性很低。

3.4 特征WOE化

再进行特征筛选后,仅保留需要的特征,然后进行WOE编码。

3.5 逻辑回归拟合

特征WOE编码后的结果,在进行逻辑回归拟合,得到拟合后的系数值

3.6 建立评分卡

每个属性对应的分支可以用过公式计算:WOE乘该变量的回归系数,再加上回归截距,再乘以比例因子,最后加上偏置量:

( w o e i ∗ β i ) ∗ f a c t o r + o f f s e t n (woe_i*\beta_i)*factor+\frac{offset}{n} woeiβifactor+noffset
对于评分卡的分值,可以这样计算:
s c o r e = log ⁡ ( o d d s ) ∗ f a c t o r + o f f s e t score=\log(odds)*factor+offset score=log(odds)factor+offset

= ( ∑ i = 1 n ( w o e i ∗ β i ) + a ) ∗ f a c t o r + o f f s e t =(\sum_{i=1}^n(woe_i*\beta_i)+a)*factor+offset =(i=1n(woeiβi)+a)factor+offset

= ( ∑ i = 1 n ( w o e i ∗ β i + a n ) ) ∗ f a c t o r + o f f s e t =(\sum_{i=1}^n(woe_i*\beta_i+\frac{a}{n}))*factor+offset =(i=1n(woeiβi+na))factor+offset

= ∑ i = 1 n ( ( w o e i ∗ β i + a n ) ∗ f a c t o r + o f f e t n ) =\sum_{i=1}^n((woe_i*\beta_i+\frac{a}{n})*factor+\frac{offet}{n}) =i=1n((woeiβi+na)factor+noffet)

依据以上信息得到:
a = log ⁡ ( P g o o d P b a d ) a=\log(\frac{Pgood}{Pbad}) a=log(PbadPgood)

s c o r e = o f f s e t + f a c t o r ∗ log ⁡ ( o d d s ) score=offset+factor*\log(odds) score=offset+factorlog(odds)

在建立标准评分卡之前,需要选取几个评分卡参数:基础分值,PDO(比率翻倍的分支)和好坏比,这里我们取600分为基础分值,PDO为20(每高20分好环比翻一倍),好坏比取20。

4 :BadRate单调与特征分箱之间的联系

Bad Rate:

坏样本率,指的是将特征进行分箱之后,每个bin下的样本所统计得到的坏样本率

bad rate 单调性与不同的特征场景:

在评分卡模型中,对于比较严格的评分模型,会要求连续性变量和有序性的变量在经过分箱后需要保证bad rate的单调性。

1. 连续性变量:

在严格的评分卡模型中,对于连续型变量就需要满足分箱后 所有的bin的 bad rate 要满足单调性,只有满足单调新的情况下,才能进行后续的WOE编码

2. 离散型变量:

离散化程度高,且无序的变量:

比如省份,职业等,我们会根据每个省份信息统计得到bad rate 数值对原始省份信息进行编码,这样就转化为了连续性变 量,进行后续的分箱操作,对于经过bad rate编码后的特征数据,天然单调。

只有当分箱后的所有的bin的bad rate 呈现单调性,才可以进行下一步的WOE编码

3. 离散化程度低,且无序的变量:

比如婚姻状况,只有四五个状态值,因此就不需要专门进行bad rate数值编码,只要求出每个离散值对应的bin的bad rate比例是否出现0或者1的情况,若出现说明正负样本的分布存在极端情况,需要对该bin与其他bin进行合并, 合并过程完了之后 就可以直接进行后续的WOE编码

4. 有序的离散变量:

对于学历这种情况,存在着小学,初中,高中,本科,硕士,博士等几种情况,而且从业务角度来说 这些离散值是有序的, 因此我们在分箱的时候,必须保证bin之间的有序性,再根据bad rate 是否为0 或者1的情况 决定是否进行合并,最终将合并的结果进行WOE编码

因此bad rate单调性只在连续性数值变量和有序性离散变量分箱的过程中会考虑。

bad rate要求单调性的原因分析:

(1) 逻辑回归模型本身不要求特征对目标变量的单调性。之所以要求分箱后单调,主要是从业务角度考虑,解释、使用起来方便一点。如果有某个(分箱后的)特征对目标变量不单调,会加剧模型解释型的复杂化
(2) 对于像年龄这种特征,其对目标变量往往是一个U型或倒U型的分布,有些公司/部门/团队是允许变量的bad rate呈(倒)U型的。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐