WOE与IV值原理

python 批量计算WOE与IV值


前言

  IV值用途:评价特征或变量的预测能力。类似的指标还有信息增益 、增益率和基尼系数等。IV的计算依赖于WOE。

  IV 和 WOE 通常是用在对模型的特征筛选,在模型刚建立时,选择的变量往往比较多,这个时候就需要有一种方法来帮助我们衡量什么变量应该进入模型,什么变量应该舍弃,IV和WOE就可以帮助我们进行衡量。对于一个变量来说,我们考虑该变量是否可以加入预测一般可以考虑以下五个因素:

(1) 变量的预测能力
(2) 变量的鲁棒性
(3) 变量在业务上的可解释性
(4) 变量的生成难度
(5) 变量之间的相关性。

  对于上述的第一点,就可以用 IV 和 WOE 值来进行判断,值越大就表示预测能力越强。计算WOE和IV是评分卡模型的一个重要环节,比如判断用户收入对用户是否会发生逾期的预测强度。这两个值有两个方面的应用:

  • 1.指导变量离散化。在建模过程中,时常需要对连续变量进行离散化处理,如将年龄进行分段。但是变量不同的离散化结果(如:年龄分为[0-20]还是[0-15])会对模型产生不同影响。因此,可以根据指标所反应的预测强度,调整变量离散化结果。(对一些取值很多的分类变量,在需要时也可以对其进行再分组,实现降维。)
  • 2.变量筛选。我们需要选取比较重要的变量加入模型,预测强度可以作为我们判断变量是否重要的一个依据。

提示:以下是本篇文章正文内容,下面案例可供参考

1. WOE编码

WOE全名是 weight of Evidence(证据权重)。

1.1 WOE计算公式

(1)解释及公式

  WOE是对原始自变量的一种编码形式。

  要对一个变量进行WOE编码,需要首先把这个变量进行分组处理/离散化处理(等宽切割,等高切割,或者利用决策树来切割)。分组后,对于第 i i i 组,WOE的计算公式如下:

W O E i = l n ( p y 1 p y 0 ) = l n ( B i B / G i G ) = l n ( B i G i / B G ) WOE_i = ln \left ( \frac{p_{y1}}{p_{y0}} \right ) = ln\left ( \frac{B_i}{B} / \frac{G_i}{G}\right )=ln\left ( \frac{B_i}{G_i} / \frac{B}{G}\right ) WOEi=ln(py0py1)=ln(BBi/GGi)=ln(GiBi/GB)
其中:
p y 1 p_{y1} py1 为正样本占所有正样本的比例, p y 0 p_{y0} py0 负样本占所有负样本的比例;
B B B 为负样本总数, B i B_i Bi 为变量 i i i 对应的负样本个数;
G G G 为正样本总数, G i G_i Gi 为变量 i i i 对应的正样本个数 ;

注:将模型目标变量y为1记为违约用户(正样本),对于目标变量为0记为正常用户(负样本)

(2)直观字面理解:

  WOE表示的实际上是 “当前分组中正样本占所有正样本的比例” 和 “当前分组中负样本占所有负样本的比例”的差异。转化公式以后,也可以理解为: 当前分箱中正负样本的比例 与 总体正负样本比例 的差异。这个差异为这两个比值的比值再取对数来表示的。


如果WOE的绝对值越大,这种差异就越明显,绝对值越小就表明差异不明显。
如果WOE为0,则说明该分箱中正负样本比例等于随机正样本和负样本比值,此时这个分箱就无预测能力

WOE 可以理解为当前组中正负样本的比值,与所有样本中正负样本比值的差异。这个差异是用这两个比值的比值,再取对数来表示的。

  • WOE > 0 表示当前组正负样本比例大于总体的正负样本比例,值越大表示这个分组里的样本响应的可能性越大;
  • WOE < 0 表示当前组正负样本比例小于总体的正负样本比例,值越小表示这个分组里的样本响应的可能性越小。
  • WOE绝对值越大,对于分类贡献越大。当分箱中正负的比例等于随机(大盘)正负样本的比值时,说明这个分箱没有预测能力,即WOE = 0

(3)WOE计算案例:

  以年龄为某个自变量,由于年龄是连续型自变量,需要对其进行离散化处理,假设离散化分为5组。#bad和#good表示在这五组年龄中正样本和负样本的数量分布。

用年龄作为计算WOE的例子,先统计不同层的正负样本数量
在这里插入图片描述


计算各层正负样本比例(相对于总体正负样本的比例)

在这里插入图片描述


计算WOE值

在这里插入图片描述


在这里插入图片描述

  • 当前分组中,正样本比例越大,WOE值越大
  • 当前分组WOE的正负,由当前分组正样本和负样本的比例,与样本整体正样本和负样本的比例的大小关系决定,当前分组的比例小于样本整体比例时,WOE为负,当前分组的比例大于整体比例时,WOE为正,当前分组的比例和整体比例相等时,WOE为0。
  • WOE的取值范围是全体实数。

WOE其实描述了变量当前这个分组,对判断个体是否属于正样本所起到影响方向和大小

  • 当WOE为正时,变量当前取值对判断个体是否会响应起到的正向影响,
  • 当WOE为负时,起到了负向影响。
  • 而WOE值的大小,则是这个影响的大小的体现。

1.2 WOE编码好处

逻辑回归假设
l o g ( o d d s ) = l o g p 1 − p = θ 0 + θ 1 x 1 + ⋯ + θ p x p + log(odds) = log\frac{p}{1-p} = \theta_0 + \theta_1x_1 + \cdots +\theta_px_p + log(odds)=log1pp=θ0+θ1x1++θpxp+
通常等式左边不会与等式右边呈线性关系,需要对 x x x 变量作变换 T ( ⋅ ) T(·) T() T ( ⋅ ) T(·) T() l o g ( o d d s ) log(odds) log(odds) 线性相关。

(1) 可以证明WOE是其中一种比较好的把自变量转化为与 l o g ( o d d s ) log(odds) log(odds) 线性相关的有效形式
(2)所有自变量被WOE编码标准化后,求解得到的系数值取值都在同一范围,可以直接比较不同自变量对 o d d s odds odds 的影响


1.3 对于连续型变量,如何进行WOE编码

  在计算WOE编码前需要对连续变量进行分箱(binning)处理

1.3.1 分箱数量

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

  如果缺失值有预测能力,则将缺失值单独分作一箱或者是合并到拥有相似风险因子的分箱中去。

  为什么不分1000箱?更少的箱数能够捕捉到数据中的重要模式,同时忽略噪声。当某一分箱中样本数少于5%,则该箱可能不是数据分布的一个真实反映,也可能导致模型不稳定。

分箱操作:

  • 连续变量:可以采用等距分箱、等频分箱、卡方分箱、自定义分箱
  • 分类变量:如分箱太多,可以进行分箱合并

1.3.2 处理分箱中没有响应样本或者全部是响应样本

 处理分箱中没有响应样本或者全部是响应样本,可以用以下公式修正

W O E i = = l n ( B i + 0.5 B / G i + 0.5 G ) WOE_i == ln\left ( \frac{B_i +0.5}{B} / \frac{G_i+0.5}{G}\right ) WOEi==ln(BBi+0.5/GGi+0.5)

或者当某个分箱中,只存在正样本或负样本时,会使得 ln(.) 的分子或分母为0,可选择将其替换为0.0001


1.3.3 如何用WOE检查分箱的正确性

(1)WOE最好应该呈单调趋势
(2)在预测变量做了WOE编码后跑一个单变量的逻辑回归,如果斜率(变量系数)不为1或者截距项不等于

l n ( B a d T G o o d T ) ln \left ( \frac{Bad_T}{Good_T} \right ) ln(GoodTBadT)
则该分箱效果不佳。

  对于离散变量,例如职业变量包含学生、老师、工人等名义属性时,先将变量的不同 level 作 WOE 编码后,把 WOE 值相近的 level 合并在一起,这样可以减少 level 数量。因为有相近的WOE值的level有几乎相同的响应率/非响应率,换句话说,某几个level有相近的woe值就将他们合并成一个箱子。


1.4 WOE编码的优点与缺点

WOE转化优势:提升模型的预测效果,提高模型的可理解性

优点:

  • 1.可以有效处理缺失值(把缺失值单独作为一个分箱)
  • 2.可以有效处理异常值(Outlier),一些极值变量,可以通过分组的WOE,变为非异常值
  • 3.WOE转换基于分布的对数值,这与逻辑回归输出函数一致。
  • 4.不需要进行哑变量编码
  • 5.用了合适的分箱手段后,能够建立自变量与因变量的单调关系
  • 6.具备标准化的功能:WOE编码之后,自变量其实具备了某种标准化的性质,也就是说,自变量内部的各个取值之间都可以直接进行比较(WOE之间的比较)

缺点:

只考虑了每个分箱的相对风险,没有考虑到每个分箱样本数量占全样本的比例。可以用IV值来评估每个分箱的相对贡献


注意事项:

  • 检查变量WOE后与违约概率的关系
    一般筛选的变量WOE与违约概率都是单调的,如果出现U型,或者其他曲线形状,则需要重新看下变量是否有问题。
  • 核查WOE变量模型的变量系数出现负值
    如果最终模型的出来的系数出现负值,需要考虑是否出现了多重共线性的影响,或者变量计算逻辑问题.

WOE没有考虑分组中样本占整体样本的比例,如果一个分组的WOE值很高,但是样本数占整体样本数很低,则对变量整体预测的能力会下降。因此,我们还需要计算 IV 值。


2. IV(Information Value)信息价值

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

  挑选入模变量过程比较复杂,需要考虑的因素很多,比如:

  • 变量的预测能力,
  • 变量之间的相关性,
  • 变量的简单性(容易生成和使用),
  • 变量的强壮性(不容易被绕过),
  • 变量在业务上的可解释性(被挑战时可以解释的通)等等。

但是,其中最主要和最直接的衡量标准是变量的预测能力

IV就是用来衡量自变量的预测能力。类似的指标还有信息增益、基尼系数等等。

如何理解IV

  假设在一个分类问题中,目标变量值为1,0。对于一个待预测的个体 A A A,要判断 A A A 属于1还是0,需要知道一写特定信息,假设这个信息总量是 I I I,而这些所需要的信息,就蕴含在所有的自变量 x 1 , x 2 , x 3 , ⋯ , x n x_1,x_2,x_3,\cdots,x_n x1x2x3xn中,那么,对于其中一个变量 x i x_i xi来说,其蕴含的信息越多,那么它对于判断 A A A 属于0还是1的贡献就越大, x i x_i xi的信息价值就越大, x i x_i xi 的 IV 就越大,它就越应该进入到入模变量列表中。


2.1 IV值计算公式

  信息值是预测模型中选择重要变量的方式之一,它能根据预测变量的重要性对预测变量进行排序,IV值计算公式如下
I V = ∑ i n ( 响应比例 − 未响应比例 ) × W O E i = ∑ i n ( B i B T − G i G T ) × W O E i \begin{aligned} IV&=\sum_{i}^{n}(响应比例 - 未响应比例) \times WOE_i \\ &= \sum_{i}^{n} \left( \frac{B_i}{B_T} - \frac{G_i}{G_T} \right)\times WOE_i \end{aligned} IV=in(响应比例未响应比例)×WOEi=in(BTBiGTGi)×WOEi

  IV值是对一个变量而言,即每个变量有一个IV值(其值等于每个分箱的IV值相加)。IV值在WOE的基础上保证了结果非负

如何理解IV
  假设变量 X X X n n n 个分箱,每个分箱的 WOE 编码取值为 W O E i WOE_i WOEi ,该分箱的 IV 值就是用该分箱响应比例与未响应比例之差再乘上 W O E i WOE_i WOEi。注意这里的响应比例和未响应比例都是用当前分箱中响应数量/整体样本响应数量和当前分箱未响应数量/整体样本未响应数量计算得到。

  • IV值是看单个变量正负样本分布的差异,这种差异越大表明这个变量对于正负样本的区分度越高
  • WOE可能为负值,IV值不可能为负,根据IV值选择变量后,用WOE替换变量各分组的值进入模型

2.2 利用IV值进行变量筛选

IV值预测能力
IV < 0.02无用特征:认为该指标对因变量没有预测能力,应该被剔除
0.02 < IV < 0.1弱价值特征:认为该指标对因变量有较弱的预测能力
0.1 < IV < 0.3中价值特征 :认为该指标对因变量的预测能力一般
0.3 < IV < 0.5强价值特征 :认为该指标对因变量有较强的预测能力
IV > 0.5价值过高,不真实

  一般我们选择 IV值大于0.02的那些变量进入模型如果IV值大于0.5,则考虑要对这个变量进行分群处理。即根据这个变量拆分成几个样本子集,分别在各个样本子集上建模。


2.3 IV计算案例

在这里插入图片描述

  • 对于变量的一个分组,这个分组的坏样本和好样本的比例与样本整体坏样本和好样本的比例相差越大,IV值越大,否则,IV值越小;
  • 极端情况下,当前分组的好样本和坏样本的比例和样本整体的坏样本和好样本的比例相等时,IV值为0;
  • IV值的取值范围是[0,+∞),且当前分组中只包含好样本或坏样本时,IV = +∞,此种情况无任何意义

2.4 IV值为+∞处理

IV其实有一个缺点,就是不能自动处理变量的分组中出现响应比例为0或100%的情况。遇到坏样本比例为0或者100%的情况,建议如下:

  • 如果可能,直接把这个分组做成一个规则,作为模型的前置条件或补充条件。
  • 重新对变量进行离散化或分组,使每个分组的响应比例都不为0且不为100%,尤其是当一个分组个体数很小时(比如小于100个),强烈建议这样做,因为本身把一个分组个体数弄得很小就不是太合理。
  • 如果上面两种方法都无法使用,建议人工把该分组的响应数和非响应的数量进行一定的调整。如果响应数原本为0,可以人工调整响应数为1,如果非响应数原本为0,可以人工调整非响应数为1。

2.5 IV值注意事项

  • IV值会随着分箱数的变多而增长,但是如果分箱数量过多,比如大于20个分箱会导致每个分箱中样本数量太少,导致某个分箱几乎没有响应的样本或者是几乎没有未响应样本。

  • (待确认)当你在建立的分类模型不是二元逻辑回归模型时,比如你用SVM或者是随机森林等,不应该用IV值作为变量选择的方法,因为IV值作为变量选择的方法是专门针对逻辑回归设计的。


3 IV和WOE的差别与意义

3.1 IV和WOE的差别

  • IV和WOE的差别,就在于IV在WOE基础上乘以一个权重 ( p y 1 − p y 0 ) (p_{y1}-p_{y0}) (py1py0),这个权重也是变量筛选考虑使用IV而非WOE去筛选变量的重要。
  • woe的取值为实数,含有负数,当我们衡量一个变量的预测能力时,使用的指标的评价一般为正数,比如woe值为-0.5的时候,就不知道如何评价这个指标的好坏。而且总体的WOE值,需要单独设立公式,而不是简单的各个组的WOE值相加。

  • 而iv值,因为有这个 ( p y 1 − p y 0 ) (p_{y1}-p_{y0}) (py1py0) 权重系数,保证了变量每个分组的结果都是非负数,可以验证一下,当一个分组的WOE是正数时,权重系数也是正数,当一个分组的WOE是负数时,权重也是负数,而当一个分组的WOE=0时,权重系数也是0。

  • IV值避免了一个组样本数很小,但 B i / G i B_i/G_i Bi/Gi 很大,从而WOE很大的情况。这种情况出现时,这组样本其实对整体的解释能力是很弱的,比如举个极端的例子,比如
    p y 1 p_{y1} py1 p y 0 p_{y0} py0均小于0.001,但 B i / G i B_i/G_i Bi/Gi 很大,比如0.9的情况,这时WOE值很高,但IV值会很小。


3.2 IV和WOE的意义

计算WOE(weight of evidence)证据权重和 IV值的意义是

  • (1)IV值可以衡量各变量对 y y y 的预测能力,用于筛选变量。
  • (2)对离散型变量,WOE 可以观察各个level间的跳转对odds的提升是否呈线性,而 IV 可以衡量变量整体(而不是每个level)的预测能力。
  • (3)对连续型变量,WOE 和 IV 值为分箱的合理性提供了一定的依据。
  • (4)用 WOE 编码可以处理缺失值问题。

4 python实例代码

  WOE的全称是“Weight of Evidence”,即证据权重,WOE是对原始自变量的一种编码形式。要对一个变量进行WOE编码,需要首先把这个变量进行分箱。

IV值(Information Value)

  在机器学习的二分类问题中,IV值(Information Value)主要用来对输入变量进行编码和预测能力评估。特征变量IV值的大小即表示该变量预测能力的强弱,在面对大量变量的情况下,可计算各个变量的IV值,取IV值大于某个固定值的变量参与到模型中去,这样不仅保留了特征携带的信息量。且提高了模型效率,此外有利于给客户解释和汇报。

数据分箱的重要性及优势:

  • 1、离散特征的增加和减少都很容易,易于模型的快速迭代;
  • 2、稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
  • 3、离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
  • 4、逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
  • 5、离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
  • 6、 特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
  • 7、特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。 可以将缺失作为独立的一类带入模型。 将所有变量变换到相似的尺度上。

python实例代码请看下一篇文章:

python 批量计算WOE与IV值



参考:

WOE与IV值浅谈
逻辑回归中常用的概念: WOE、IV详解
WOE编码与IV值
WOE编码与IV值
Python数据分箱,计算woe,iv

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值