银行业评分卡制作——IV、WOE

摘要:
为了介绍IV的计算方法,我们首先需要认识和理解另一个概念——WOE,因为IV的计算是以WOE为基础的。WOE的取值范围是全体实数。而WOE值的大小,则是这个影响的大小的体现。并且,从计算公式来看,对于变量的一个分组,IV是WOE乘以这个分组响应占比和未响应占比的差。

参考链接:https://blog.csdn.net/kevin7658/article/details/50780391

1.IV的用途

IV的全称是InformationValue,中文意思是信息价值,或者信息量。

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

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

2.对IV的直观理解

从直观逻辑上大体可以这样理解“用IV去衡量变量预测能力”这件事情:我们假设在一个分类问题中,目标变量的类别有两类:Y1,Y2。对于一个待预测的个体A,要判断A属于Y1还是Y2,我们是需要一定的信息的,假设这个信息总量是I,而这些所需要的信息,就蕴含在所有的自变量C1,C2,C3,……,Cn中,那么,对于其中的一个变量Ci来说,其蕴含的信息越多,那么它对于判断A属于Y1还是Y2的贡献就越大,Ci的信息价值就越大,Ci的IV就越大,它就越应该进入到入模变量列表中。

3.IV的计算

前面我们从感性角度和逻辑层面对IV进行了解释和描述,那么回到数学层面,对于一个待评估变量,他的IV值究竟如何计算呢?为了介绍IV的计算方法,我们首先需要认识和理解另一个概念——WOE,因为IV的计算是以WOE为基础的。

3.1WOE

WOE的全称是“WeightofEvidence”,即证据权重。首先把这个变量进行分组处理(也叫离散化、分箱等等,说的都是一个意思)。分组后,对于第i组,WOE的计算公式如下:

银行业评分卡制作——IV、WOE第1张

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

#yi是这个组中响应客户的数量,#ni是这个组中未响应客户的数量,#yT是样本中所有响应客户的数量,#nT是样本中所有未响应客户的数量。

从这个公式中我们可以体会到,WOE表示的实际上是“当前分组中响应客户占所有响应客户的比例”和“当前分组中没有响应的客户占所有没有响应的客户的比例”的差异

对这个公式做一个简单变换,可以得到:

银行业评分卡制作——IV、WOE第2张

变换以后我们可以看出,WOE也可以这么理解,他表示的是当前这个组中响应的客户和未响应客户的比值,和所有样本中这个比值的差异。这个差异是用这两个比值的比值,再取对数来表示的。WOE越大,这种差异越大,这个分组里的样本响应的可能性就越大,WOE越小,差异越小,这个分组里的样本响应的可能性就越小

3.2 IV的计算公式

对于一个分组后的变量,第i组的WOE前面已经介绍过,是这样计算的:

银行业评分卡制作——IV、WOE第3张

同样,对于分组i,也会有一个对应的IV值,计算公式如下:

银行业评分卡制作——IV、WOE第4张

有了一个变量各分组的IV值,我们就可以计算整个变量的IV值,方法很简单,就是把各分组的IV相加:

其中,n为变量分组个数。

银行业评分卡制作——IV、WOE第5张

其中,n为变量分组个数

3.3 用实例介绍IV的计算和使用

下面我们通过一个实例来讲解一下IV的使用方式。

3.3.1 实例

假设我们需要构建一个预测模型,这个模型是为了预测公司的客户集合中的每个客户对于我们的某项营销活动是否能够响应,或者说我们要预测的是客户对我们的这项营销活动响应的可能性有多大。假设我们已经从公司客户列表中随机抽取了100000个客户进行了营销活动测试,收集了这些客户的响应结果,作为我们的建模数据集,其中响应的客户有10000个。另外假设我们也已经提取到了这些客户的一些变量,作为我们模型的候选变量集,这些变量包括以下这些(实际情况中,我们拥有的变量可能比这些多得多,这里列出的变量仅仅是为了说明我们的问题):

  • 最近一个月是否有过购买:
  • 最近一次购买金额:
  • 最近一笔购买的商品类别:
  • 是否是公司VIP客户:

假设,我们已经对这些变量进行了离散化,统计的结果如下面几张表所示。

(1)最近一个月是否有购买;

银行业评分卡制作——IV、WOE第6张

(2)最近一次购买金额;

银行业评分卡制作——IV、WOE第7张

(3)最近一笔购买的商品类别;

银行业评分卡制作——IV、WOE第8张

(4)是否是公司VIP客户;

银行业评分卡制作——IV、WOE第9张

3.3.2 计算WOE和IV

我们以其中的一个变量“最近一次购买金额”变量为例:

银行业评分卡制作——IV、WOE第10张

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

银行业评分卡制作——IV、WOE第11张

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

银行业评分卡制作——IV、WOE第12张

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

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

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

计算完WOE,我们分别计算四个分组的IV值:

银行业评分卡制作——IV、WOE第13张

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

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

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

银行业评分卡制作——IV、WOE第14张

3.3.3 IV值的比较和变量预测能力的排序

我们已经计算了四个变量中其中一个的WOE和IV值。另外三个的计算过程我们不再详细的说明,直接给出IV结果。

  • 最近一个月是否有过购买:0.250224725
  • 最近一笔购买的商品类别:0.615275563
  • 是否是公司VIP客户:1.56550367

前面我们已经计算过,最近一次购买金额的IV为0.49270645

这四个变量IV排序结果是这样的:是否是公司VIP客户>最近一笔购买的商品类别>最近一次购买金额>最近一个月是否有过购买。我们发现“是否是公司VIP客户”是预测能力最高的变量,“最近一个月是否有过购买”是预测能力最低的变量。如果我们需要在这四个变量中去挑选变量,就可以根据IV从高到低去挑选了

4.关于IV和WOE的进一步思考

4.1 为什么用IV而不是直接用WOE

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

并且,从计算公式来看,对于变量的一个分组,IV是WOE乘以这个分组响应占比和未响应占比的差。而一个变量的IV等于各分组IV的和。如果愿意,我们同样也能用WOE构造出一个这样的一个和出来,我们只需要把变量各个分组的WOE和取绝对值再相加,即(取绝对值是因为WOE可正可负,如果不取绝对值,则会把变量的区分度通过正负抵消的方式抵消掉):

银行业评分卡制作——IV、WOE第15张

那么我们为什么不直接用这个WOE绝对值的加和来衡量一个变量整体预测能力的好坏,而是要用WOE处理后的IV呢。

我们这里给出两个原因。IV和WOE的差别在于IV在WOE基础上乘以的那个银行业评分卡制作——IV、WOE第16张,我们暂且用pyn来代表这个值。

  • 第一个原因,当我们衡量一个变量的预测能力时,我们所使用的指标值不应该是负数,否则,说一个变量的预测能力的指标是-2.3,听起来很别扭。从这个角度讲,乘以pyn这个系数,保证了变量每个分组的结果都是非负数,你可以验证一下,当一个分组的WOE是正数时,pyn也是正数,当一个分组的WOE是负数时,pyn也是负数,而当一个分组的WOE=0时,pyn也是0。

当然,上面的原因不是最主要的,因为其实我们上面提到的银行业评分卡制作——IV、WOE第17张这个指标也可以完全避免负数的出现。

  • 更主要的原因,也就是第二个原因是,乘以pyn后,体现出了变量当前分组中个体的数量占整体个体数量的比例,对变量预测能力的影响。怎么理解这句话呢?我们还是举个例子。

假设我们上面所说的营销响应模型中,还有一个变量A,其取值只有两个:0,1,数据如下:

银行业评分卡制作——IV、WOE第18张

我们从上表可以看出,当变量A取值1时,其响应比例达到了90%,非常的高,但是我们能否说变量A的预测能力非常强呢?不能。为什么呢?原因就在于,A取1时,响应比例虽然很高,但这个分组的客户数太少了,占的比例太低了。虽然,如果一个客户在A这个变量上取1,那他有90%的响应可能性,但是一个客户变量A取1的可能性本身就非常的低。所以,对于样本整体来说,变量的预测能力并没有那么强。我们分别看一下变量各分组和整体的WOE,IV。

银行业评分卡制作——IV、WOE第19张

从这个表我们可以看到,变量取1时,响应比达到90%,对应的WOE很高,但对应的IV却很低,原因就在于IV在WOE的前面乘以了一个系数银行业评分卡制作——IV、WOE第20张,而这个系数很好的考虑了这个分组中样本占整体样本的比例,比例越低,这个分组对变量整体预测能力的贡献越低。相反,如果直接用WOE的绝对值加和,会得到一个很高的指标,这是不合理的。

4.2 IV的极端情况以及处理方式

IV依赖WOE,并且IV是一个很好的衡量自变量对目标变量影响程度的指标。但是,使用过程中应该注意一个问题:变量的任何分组中,不应该出现响应数=0或非响应数=0的情况。

原因很简单,当变量一个分组中,响应数=0时,

银行业评分卡制作——IV、WOE第21张

此时对应的IVi为+∞。

而当变量一个分组中,没有响应的数量=0时,

银行业评分卡制作——IV、WOE第22张

此时的IVi为+∞。

IVi无论等于负无穷还是正无穷,都是没有意义的。

由上述问题我们可以看到,使用IV其实有一个缺点,就是不能自动处理变量的分组中出现响应比例为0或100%的情况。那么,遇到响应比例为0或者100%的情况,我们应该怎么做呢?建议如下:

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

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

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

免责声明:文章转载自《银行业评分卡制作——IV、WOE》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇电商系统设计磁盘调度管理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用正则表达式来截取nginx中的内置变量

nginx 中的内置变量都可以通过 if 指令 + 正则表达式来进行截取,截取之后的结果通过正则表达式的分组来进行引用 比如:从请求中传过来的一个名为 ssl_client_s_dn 的变量,它的值是类似 cn=username这样的 我们想要只留下username ,可以这样: if ( $ssl_client_s_dn ~ (CN=([Ss]*)) )...

linux简单命令与Shell脚本

说明1、#表示root用户登录,$表示普通用户登录2、|符号是管道符,用于把|前的输出作为后面命令的输入3、>表示追加并覆盖的意思4、>>两个大于符号,表示追加命令1、cd命令:切换目录cd /home 进入/home目录cd ../返回上一级目录cd  ./当前目录2、ls命令:产看文件及目录ls  ./ 查看当前目录所有的文件和目录l...

gdb查看内存(转)

可以使用examine命令(简写是x)来查看内存地址中的值。x命令的语 法如下所示:x/<n/f/u> <addr>n、f、u是可选的参数。 n是一个正整数,表示需要显示的内存单元的个数,也就是说从当前地址向后显示几个 内存单元的内容,一个内存单元的大小由后面的u定义。 f 表示显示的格式,参见下面。如果地址所指的是字符串,那么格式...

Mac下的IDEA快捷键

  快捷键 功能 Option + enter 打开提示 Command + / 注释方式是“行注释”;可以注释当前行、取消当前行的注释 注释选中的内容、取消选中行的注释 Option + Command + / 注释方式为“多行注释”;注释选中的内容、取消注释 Option + Command + L 格式化代码 Comman...

jmeter 中的 Beanshell 使用

一、操作变量:通过使内置对象vars可以对变量进行存取操作     a) vars.get("name"):从jmeter中获得变量值     b) vars.put("key","value"):数据存到jmeter变量中 二、操作属性:通过使用Bean shell内置对象props 可以对属性进行存取操作     a) props.get("STAR...

Java高级开发_性能优化的细节

一、核心部分总结: 尽量在合适的场合使用单例【减负提高效率】 尽量避免随意使用静态变量【GC】 尽量重用对象,避免过多过常地创建Java对象【最大限度地重用对象】 尽量使用final修饰符【内联(inline)】 尽量使用局部变量【栈快】 尽量处理好包装类型和基本类型两者的使用场所【堆栈】 慎用synchronized,尽量减小synchronize的方...