风控业务-特征IV值和WOE值的计算原理和区别

       我们在用逻辑回归、决策树等模型方法构建分类模型时,经常需要对自变量进行筛选,比如我们有200个候选自变量,通常情况下,不会直接把200个变量直接放到模型中去进行拟合训练,而是会用一些方法,从这200个自变量中挑选一些出来,放进模型,形成入模变量列表。

       挑选入模变量过程是个比较复杂的过程,需要考虑的因素很多,比如:变量的预测能力,变量之间的相关性,变量的简单性(容易生成和使用),变量的强壮性(不容易被绕过),变量在业务上的可解释性(异议时可以解释的通)等等。但是,其中最主要和最直接的衡量标准是变量的预测能力。

WOE的全称是Weight of Evidence,即证据权重,WOE是对原始自变量的一种编形式,常用在风险评估、授信评分卡等领域。

IV的全称是Information Value,中文意思是信息价值,或者信息量,可通过WOE加权求和得到,衡量自变量对应变量的预测能力。

 

目录

WOE的概念及计算

IV值的计算

计算示例

相关问题注意


WOE的概念及计算

WOE 即变量权重,是对原始自变量的一种编码形式。要对一个变量进行 WOE 编码,需要首先把这个变量进行分组处理(也叫离散化、分箱),分组后,对于第i组,WOE的计算公式如下:

其中,

 pyi 是这个组中坏样本的占总的坏样本的比例(风险模型中,对应的是违约客户,总之,指的是模型中预测变量取值为“是”或者说1的个体)占所有样本中所有响应客户的比例;
 pni 是这个组好样本的占总的好样本的比例;
 yi 是这个组中坏样本的数量;
 ni 是这个组中好样本的数量;
 yT 是样本中所有坏样本的数量;
 nT 是样本中所有好的数量;

以上公式表示,实质上WOE表示的是当前分箱中好坏客户的各自占总的好坏客户比例的差异,对这个公式做一个简单变换,可以得到:

变换以后含义更明显,可以理解为当前组中正负样本的比值,与所有样本中正负样本比值的差异。这个差异是用这两个比值的比值,再取对数来表示的,差异越大,WOE越大,这个分组里的样本响应的可能性就越大,差异越小,WOE越小,这个分组里的样本响应的可能性就越小。

WOE可能为负,但其绝对值越大,对于分类贡献越大。当分箱中正负的比例等于随机(大盘)正负样本的比值时,说明这个分箱没有预测能力,即WOE=0。

在类似Excel的行列式中存储数据时,WOE计算公式为:

IV值的计算

对于一个分组后的变量,第i组的WOE已经介绍过,同样,对于分组 i,也会有一个对应的IV值,计算公式如下:

IV值在WOE的基础上保证了结果非负,根据变量在各分组上的IV值,得到整个变量的IV值为:

n为变量分组个数,WOE可能为负值,IV值不可能为负,根据IV值选择变量后,用WOE替换变量各分组的值进入模型。

在类似Excel的行列式中存储数据时,IV值计算公式为:

根据IV值评估变量预测能力

一般我们选择 IV值大于0.02的那些变量进入模型。 如果IV值大于 0.5,改变量就是属于过预测变量,通常被选座分群变量,将样本拆分成多个群体,针对不同的群体分别开发模型。

 

计算示例

示例1:

假设,我们有一个变量为“最近一次购买金额”,“响应”和“未响应”即我们需要预测的标签,现在要计算这个变量的IV值,首先需要对这个变量进行了离散化,统计的结果如下表所示,最近一次购买金额:

我们把这个变量离散化为了4个分段:<100元,[100,200),[200,500),>=500元。首先,根据WOE计算公式,这四个分段的WOE分别为:

通过WOE值,我们计算IV值

最后,我们计算变量总IV值:

我们也可以通过Excel中的公式直接计算IV值,如下:

计算公式为:

         

示例2:

如上图所示,我们假设一个变量有5个类别,分布如下:

从上面的计算结果中我们可以看一下WOE的基本特点:

  • 当前分组中,1标签比例越小,WOE值越大;
  • 当前分组WOE的正负,由当前分组0和1的比例决定,当0和1的比例相等时,WOE为0,如上图的5类别;
  • WOE的取值范围是全体实数。

WOE其实描述了变量当前这个分组,对判断个体是否会响应(或者说属于哪个类)所起到影响方向和大小,当WOE为正时,变量当前取值对判断个体是否会响应起到的正向的影响,当WOE为负时,起到了负向影响。而WOE值的大小,则是这个影响的大小的体现。

从上面IV的计算结果我们可以看出IV的以下特点:

  • 对于变量的一个分组,这个分组的0标签比例和1标签比例与样本整体0和1的比例相差越大,IV值越大,否则,IV值越小;
  • 极端情况下,当前分组的0标签比例和1标签比例和样本整体的0和1的比例相等时,IV值为0;
  • IV值的取值范围是[0,+∞),且,当当前分组中只包含0标签数量或者1标签数量时,IV = +∞。

 

相关问题注意

1. 为什么用IV而不是直接用WOE

从上面的内容来看,变量各分组的WOE和IV都隐含着这个分组对目标变量的预测能力这样的意义。那我们为什么不直接用WOE相加或者绝对值相加作为衡量一个变量整体预测能力的指标呢?

IV和WOE的差别在于IV在WOE基础上乘以的那个(pyi-pni),我们暂且用pyn来代表这个值。第一个原因,当我们衡量一个变量的预测能力时,我们所使用的指标值不应该是负数。从这个角度讲,乘以pyn这个系数,保证了变量每个分组的结果都是非负数,可以验证一下,当一个分组的WOE是正数时,pyn也是正数,当一个分组的WOE是负数时,pyn也是负数,而当一个分组的WOE=0时,pyn也是0。

当然,上面的原因不是最主要的,因为其实WOE的绝对值也可以完全避免负数的出现。更主要的原因,也就是第二个原因是,乘以pyn后,体现出了变量当前分组中个体的数量占整体个体数量的比例,对变量预测能力的影响。即当各分组样本分布不均匀时对其预测能力的影响。

2. 分类中某一类数量为0

当样本中为0正例或0负例时,时 IV 值是+∞,这两个极端都是没有意义的,不能与正常 IV进行比较;

如下表,当类别3中1标签数量为0时,计算错误

当类别3中1标签数量为0.01时,

当类别3中1标签数量为0.00000000000001时,

其中ln函数曲线为下图,所以当 “1标签比例” 越小,WOE值越大,直接导致IV值越大:

解决方法:

1.如果可能,直接把这个分组做成一个规则,作为模型的前置条件或补充条件;

2.重新对变量进行离散化或分组,使每个分组的响应比例都不为0且不为100%,尤其是当一个分组个体数很小时(比如小于100个),强烈建议这样做,因为本身把一个分组个体数弄得很小就不是太合理。

3.如果上面两种方法都无法使用,建议人工把该分组的响应数和非响应的数量进行一定的调整。如果响应数原本为0,可以人工调整响应数为1,如果非响应数原本为0,可以人工调整非响应数为1,如下表:

3. 除非分组规则改变,组间的先后排序和目标变量的对调都不会影响IV 值;


如上图随机调整分类类别的顺序,IV值的计算结果不变。

4. 不同的分组方式对IV值有影响

同一批数据,分别分2组,5组,20组对比计算的IV值,查看分组对IV值的影响。

分成2组,计算IV值为:

分成5组,计算IV值为:

分成20组,计算IV值为:

划分越大,相当于这个变量信息粒度变得越粗,表达能力下降(被平均),整体的IV降低;划分的越小,每个小段与整体的差异越大,导致整体的IV变大。所以IV值会随着分箱数的变多而增长,但是如果分箱数量过多,比如大于20个分箱会导致每个分箱中样本数量太少,导致某个分箱几乎没有 “1标签” 的样本或者是几乎没有 “0标签” 样本。

       但是分组数量越多,IV值越大,并不意味着这个变量越好,IV值的具体表现要结合woe值进行判断。当我们算完woe的时候,我们关注的点一般会有woe是否单调、woe是否呈线性、以及IV值的大小,由于评分卡通常采用线性分类器Logistics Regression,入模数据最好呈现单调性。

因此,在计算出每个分箱的WOE值后,需同时校验训练数据和测试的WOE是否呈现单调性,若非单调且在业务中无法解释(如随着年龄的增长,体能的变化呈现“n”形),需要修改或合并分箱,从而使WOE呈现单调。如上表中的变量在分成20组后WOE依然呈现单调性:

一个好的变量分组不仅要求woe单调,还有其他限制,如下:

针对分箱数量,一般来说10~20个分箱足够了,因为每个分箱应保证不少于5%的样本数。分箱数量决定了平滑程度,分箱数越少平滑度越高。所以一般采用先精细分箱(fine classing),初始将箱数分成20~50个箱,然后进行粗分箱(coarse classing),利用IV值、基尼系数、卡方统计量等值将箱数合并,通常最多10箱。目的是通过创建更少的箱子来实现简化,每个箱子具有明显不同的风险因子同时最小化信息损失。

如果缺失值有预测能力,则将缺失值单独分作一箱或者是合并到拥有相似风险因子的分箱中去。为什么不分1000箱?更少的箱数能够捕捉到数据中的重要模式,同时忽略噪声。当某一分箱中样本数少于5%,则该箱可能不是数据分布的一个真实反映,也可能导致模型不稳定。

如果强制变量分箱的WOE单调性,这样可能就会低估某些非线性变量的IV值,如U型变量为非线性,但是分组合理。因此,为了尽可能使得IV值计算最大,同时尽可能保证分箱的单调性(让预测变量对目标变量有更好的解释性),要选择对比合适的分箱方法。分箱的方法有很多,有等宽分箱,等频分箱,聚类分箱,卡方分箱,还可以利用决策树的信息增益最大化思想来实现变量的最优分箱。

 

具体的几种分箱方法可以参考:https://blog.csdn.net/carrylvan/article/details/108775507

 

参考链接:https://blog.csdn.net/kevin7658/article/details/50780391/
参考链接:https://zhuanlan.zhihu.com/p/78809853
参考链接:https://www.cnblogs.com/wqbin/p/10547628.html
参考链接:https://zhuanlan.zhihu.com/p/36539125

 

  • 10
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WOE编码和IV是一种常用的特征工程方法,它们可以用于衡量一个特征与目标变量之间的关联程度和预测能力。下面是Python计算IVWOE编码的示例代码: ```python import pandas as pd import numpy as np def calc_woe_iv(df, col, target): """ 计算指定特征WOE编码和IV :param df: 数据集 :param col: 特征列名 :param target: 目标变量列名 :return: WOE编码和IV """ # 计算特征每个取的数量和占比 freq = pd.DataFrame({'total': df.groupby(col)[target].count(), 'bad': df.groupby(col)[target].sum()}) freq['good'] = freq['total'] - freq['bad'] freq['bad_rate'] = freq['bad'] / freq['bad'].sum() freq['good_rate'] = freq['good'] / freq['good'].sum() # 防止出现除0错误 freq.loc[freq['bad_rate'] == 0, 'bad_rate'] = 0.0001 freq.loc[freq['good_rate'] == 0, 'good_rate'] = 0.0001 # 计算WOE编码 freq['woe'] = np.log(freq['good_rate'] / freq['bad_rate']) # 计算IV freq['iv'] = (freq['good_rate'] - freq['bad_rate']) * freq['woe'] iv = freq['iv'].sum() return freq[['woe', 'iv']].reset_index().rename(columns={col: 'value'}), iv ``` 这个函数的输入参数包括数据集`df`、特征列名`col`和目标变量列名`target`,输出WOE编码和IV。在函数中,我们首先计算了该特征每个取的数量、坏样本数量、好样本数量、坏样本率、好样本率和WOE,然后根据IV的公式计算了每个取对应的IV,并将它们相加得到总的IV。最后,我们将WOE编码和IV合并成一个DataFrame并返回。 需要注意的是,代码中为了避免出现除0错误,我们在计算WOE编码和IV时对分母加上了一个极小0.0001。同时,WOE编码和IV计算方式可以根据具体的业务需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值