转自:https://blog.csdn.net/iModel/article/details/79420437

这篇文章是我认为对IV和WOE解释比较好的博客,在做信贷领域风控建模的时候,我们针对评分卡模型,一般性的将数据自变量与因变量之间通过IV值做一次筛选,为便于以后查阅,自己全篇抄录下来,如有其他需要,请联系该文章原作者,谢谢。

现在开始本文正文:

1.IV的用途

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

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

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

“变量的预测能力”这个说法很笼统,很主观,非量化,在筛选变量的时候我们总不能说:“我觉得这个变量预测能力很强,所以他要进入模型”吧?我们需要一些具体的量化指标来衡量每自变量的预测能力,并根据这些量化指标的大小,来确定哪些变量进入模型。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的全称是“Weight of Evidence”,即证据权重。WOE是对原始自变量的一种编码形式。

要对一个变量进行WOE编码,需要首先把这个变量进行分组处理(也叫离散化、分箱等等,说的都是一个意思)。分组后,对于第i组,WOE的计算公式如下:

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

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

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

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

关于WOE编码所表示的意义,大家可以自己再好好体会一下。

3.2 IV的计算公式

有了前面的介绍,我们可以正式给出IV的计算公式。对于一个分组后的变量,第i 组的WOE前面已经介绍过,是这样计算的:

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

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

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

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

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

3.3.1 实例

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

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

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

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


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

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

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


3.3.2 计算WOE和IV

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


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

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

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

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

好,回到正题,计算完WOE,我们分别计算四个分组的IV值:

再插播一段,从上面IV的计算结果我们可以看出IV的以下特点:

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

OK,再次回到正题。最后,我们计算变量总IV值:

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可正可负,如果不取绝对值,则会把变量的区分度通过正负抵消的方式抵消掉):

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

我们这里给出两个原因。IV和WOE的差别在于IV在WOE基础上乘以的那个,我们暂且用pyn来代表这个值。

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

当然,上面的原因不是最主要的,因为其实我们上面提到的这个指标也可以完全避免负数的出现。

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

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

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

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

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

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

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

此时对应的IVi为+∞。

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

此时的IVi为+∞。

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

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

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

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

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

IV值和WOE值的理解相关推荐

  1. 分计算iv值_机器学习-变量筛选之IV值和WOE

    1.IV值的用途 IV,即信息价值(Information Value),也称信息量. 目前还只是在对LR建模时用到过这两个关键指标,当我们使用决策树时可以通过限制树的深度间接筛选掉一些对于当前任务贡 ...

  2. 风控算法知识——WOE值的深度理解与应用

    导语:WOE值的深度理解与应用看这一篇就够啦!!! 关注"金科应用研院",回复"礼包" 领取风控资料合集 WOE是什么? WOE,全称是"Weight ...

  3. 学习记录633@python特征筛选之WOE值与IV值

    在使用逻辑回归.决策树等模型算法构建分类模型时,经常需要对特征变量进行筛选.因为有时可能会获得100多个候选特征变量,通常不会直接把这些特征变量放到模型中去进行拟合训练,而是从这些特征变量中挑选一些放 ...

  4. 评分卡模型开发(六)--WOE值计算

    转自:https://cloud.tencent.com/developer/article/1016331 对入模的定量和定性指标,分别进行连续变量分段(对定量指标进行分段),以便于计算定量指标的W ...

  5. 如何理解ANOVA中的F值与P值

    ANOVA(analysis of variance),方差分析,曾经以为它是一个多么复杂的简写... 一.理解F分布 要理解F分布,就要先理解卡方分布,要理解卡方分布,就要先理解正态分布. 1.正态 ...

  6. html clear属性值,clear属性有哪些属性值 CSS clear属性的理解.

    CSS clear是什么属性... 语法: clear : none | left |right | both 参数: none : 允许两边都可以有浮动对象 both : 不允许有浮动对象 left ...

  7. 评分法模型开发-WOE值计算

    定量指标筛选见上篇: http://blog.csdn.net/lll1528238733/article/details/76600019 定性指标筛选见上篇: http://blog.csdn.n ...

  8. c语言中字符串关于左值,关于左值lvalue和右值rvalue的一点理解

    发现很多朋友对"lvalue"和"rvalue"理解有误,我先谈谈自己对此的一些理解,并期望能够引起更多朋友的广泛讨论.也算起到抛砖引玉的作用吧.引用:注:这里 ...

  9. 理解C和C++中的左值和右值

    翻译至https://eli.thegreenplace.net/2011/12/15/understanding-lvalues-and-rvalues-in-c-and-c/ C/C++编程中不是 ...

  10. 理解C++中的左值和右值

    一.前言 一直以来,我都对C++中左值(lvalue)和右值(lvalue)的概念模糊不清.我认为是时候好好理解他们了,因为这些概念随着C++语言的进化变得越来越重要. 二.左值和右值--一个友好的定 ...

最新文章

  1. .NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权
  2. 复现经典:《统计学习方法》​第16章 主成分分析
  3. 计算机机房电力切换演练方案,机房停电应急演练实施具体技术方案.doc
  4. 转发2篇大学生写的博文---看了比较有感触
  5. 使用python和pandas进行同类群组分析
  6. 51nod--1212 最小生成树
  7. netty java_GitHub - leihuazhe/Java11-Netty-Demo: 基于Java11 构建的 netty 服务端客户端 模块化例子...
  8. mybatis和spring jdbc持久层框架事务支持分析
  9. html中图片阴影怎么写,css如何给图片加阴影?
  10. 【水果识别】基于matalb GUI灰度、二值化、滤波水果分级【含Matlab源码 1848期】
  11. TCPUDP测试工具的使用
  12. 中国猫道系统市场趋势报告、技术动态创新及市场预测
  13. java4.25生成车牌号_泸牌16年涨882倍 超25万人拍一张车牌为哪般?
  14. 乘幂法求主特征值和特征向量(C++)
  15. java 通过身份证判断性别
  16. 神经网络和深度学习-习题
  17. 新手建站十大免费空间推荐-稳定,可用的免费空间及其使用体验
  18. coffeescript java 执行_javascript – CoffeeScript中的方法调用语法
  19. PHP实现sha-256哈希算法
  20. 运城学院计算机课,运城学院微机原理与应用精品课程

热门文章

  1. CodeBlocks汉化安装教程
  2. Win10——使用WePE工具U盘重装系统
  3. Python软件无线电(1):概述
  4. cJSON基本使用方法
  5. Android如何实现汉字手写输入法(带中文自动识别提示)
  6. 程序代码中,怎么区分status和state?
  7. 随机森林python反欺诈_基于三明治结构深度学习框架的金融反欺诈模型研究与应用...
  8. 信号与系统实验六 傅里叶分析方法的应用
  9. python记录鼠标和键盘操作并重复_鼠标和键盘操作
  10. 计算机核心期刊排名及投稿信息