python计算iv和woe,IVA算法

  python计算iv和woe,IVA算法

  1.1的目的。静脉的

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

  当我们使用logistic回归、决策树等模型方法构建分类模型时,往往需要对自变量进行筛选。例如,我们有200个候选独立变量。通常我们不会直接把200个变量放入模型进行拟合训练。而是我们会用一些方法在这200个自变量中选取一部分放入模型中,形成模型中的变量列表。那么我们如何选择输入变量呢?

  选择变量进入模型的过程是一个相当复杂的过程,需要考虑很多因素,比如:变量的预测能力、变量之间的相关性、变量的简单性(易于生成和使用)、变量的稳健性(不易被绕过)、变量在业务中的可解释性(受到挑战时易于解释)等等。然而,最重要和最直接的衡量标准是变量的预测能力。

  “变量的预测能力”这一术语非常笼统、主观、非量化。在筛选变量的时候,不能总说“我觉得这个变量的预测能力很强,所以他要进入模型”?我们需要一些具体的量化指标来衡量各个自变量的预测能力,根据这些量化指标的大小来确定哪些变量进入模型。IV就是这样一个指标,可以用来衡量自变量的预测能力。类似的指标还有信息增益、基尼系数等等。

  2.对IV的直观理解

  从直观的逻辑上,我们大致可以这样理解“用IV衡量变量预测能力”这件事:我们假设在一个分类问题中,目标变量有两类:Y1和Y2。对于要预测的个体A,我们需要一定的信息量来判断A属于Y1还是Y2。假设信息总量为I,所需信息包含在所有自变量C1、C2、C3中

  3.3的计算。静脉的

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

  悲哀

  WOE的全称是“WeightofEvidence”,即证据的权重。WOE是原自变量的一种编码形式。

  为了对一个变量进行编码,有必要首先对变量进行分组(也称为离散化、宁滨等。都是一个意思)。分组后,对于I组,WOE的计算公式如下:

  其中,pyi为该组响应客户(在风险模型中,对应于违约客户,简而言之,指预测变量值为“是”或1的个体)在所有样本中的比例,pni为该组未响应客户在所有样本中的比例,#yi为该组响应客户数,#ni为该组未响应客户数,#yT为样本。

  从这个公式中我们可以认识到,WOE实际上代表的是“当前分组中响应客户占所有响应客户的比例”和“当前分组中未响应客户占所有未响应客户的比例”之差。

  通过对这个公式进行简单的变换,您可以得到:

  改造后可以看到,WOE也能理解这一点。他代表了当前组中有反应的客户与无反应的客户的比率,以及这个比率在所有样本中的差异。这种差异用这两个比值的比值来表示,然后取对数。WOE越大,差异越大,在这个分组中样本反应的可能性越大。WOE越小,差异越小,在这个分组中样本反应的可能性越小。

  至于WOE编码的意义,大家可以自己好好体会一下。

  3.2 IV的计算公式

  有了前面的介绍,我们就可以正式给出IV的计算公式了。对于分组变量,组I的权重系数已在前面介绍过,其计算如下:

  类似地,对于组I,将有相应的IV值,其计算如下:

  有了每组变量的IV值,我们就可以计算出整个变量的IV值。方法很简单,就是把各组的IV加起来:

  其中n是可变组的数量。

  3.3举例介绍IV的计算和使用。

  下面通过一个例子来说明IV的用法。

  3.3.1示例

  假设我们需要建立一个预测模型,就是预测公司客户集合中的每一个客户是否能够对我们的一个营销活动做出反应,或者说我们要预测的是客户对我们的营销活动做出反应的可能性。假设我们从公司的客户名单中随机抽取10万个客户进行营销活动测试,收集这些客户的响应结果作为我们的建模数据集,其中有1万个客户响应。此外,假设我们提取了这些客户的一些变量作为我们模型的候选变量,这些变量包括以下(实际上,我们可能有更多的变量,这里列出的变量只是为了说明我们的问题):

  最近一个月是否有过购买行为;最后一次购买的金额;上次购买的类别;是否是公司的VIP客户;

  假设我们已经将这些变量离散化,统计结果如下表所示。

  (1)您在过去一个月中是否购买过任何物品:

  (2)最后一次购买的金额:

  (3)最后一次购买的类别:

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

  3.3.2计算权重和权重

  以我们的一个变量“上次购买金额”变量为例:

  我们把这个变量离散成四段:100元,[100,200],[200,500],=500元。首先,根据权重计算公式,这四个部分的权重为:

  打断一段话。从上面的计算结果,我们可以看一看WOE的基本特征:

  在当前数据包中,响应的比例越大,WOE值越大;当前分组的正和负WOE由当前分组的响应和无响应的比率以及样本的总响应和无响应的比率来确定。当当前包的比率小于样本的总比率时,WOE为负;当当前包的比率大于总比率时,WOE为正;当当前分组的比率等于总比率时,WOE为零。WOE的取值范围都是实数。

  如果我们进一步理解WOE,会发现WOE实际上描述的是变量当前的分组情况,影响了判断个体是否会做出反应(或者属于哪个阶层)的方向和大小。当WOE为正时,变量的当前值对判断个体是否会做出反应有正面影响,当WOE为负时,则有负面影响。而WOE值的大小就是这种影响力的体现。

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

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

  对于一个变量分组,这个分组的有反应和无反应的比例与样本总体有反应和无反应的比例之差越大,IV值越大;否则,IV值越小;极端情况下,当前数据包有响应和无响应的比例等于整个样本有响应和无响应的比例时,IV值为0;IV的取值范围为[0,),当当前数据包只包含响应客户或不响应客户时,IV=。

  好了,再回到正题。最后,我们计算变量的总IV值:

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

  我们已经计算了四个变量之一的WOE和IV值。其他三个的计算过程我们就不详细解释了,直接给出IV的结果。

  你在过去的一个月里购买过东西吗?上次购买的类别:0.615275563。你是公司的贵宾客户吗:1 . 59986 . 58868886861

  我们之前已经计算过最后一次购买金额的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处理后的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取决于WOE,IV是一个很好的衡量自变量对目标变量影响程度的指标。但在使用过程中要注意一个问题:在任何变量分组中,都不应该出现有应答数=0或无应答数=0的情况。

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

  此时对应的IVi为。

  并且当变量包中没有响应的数量=0时,

  此时IVi为。

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

  从上面的问题可以看出,使用IV其实有一个缺点,就是不能自动处理变量的分组中的响应比是0或者100%。那么,当响应率为0或100%时,我们该怎么办呢?建议如下:

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

  (2)重新离散化或分组变量,使每组的响应比不为0和100%,特别是当一个组中的个体数量非常少时(例如少于100)。强烈建议这样做,因为使一个群体中的个体数量非常少是不合理的。

  (3)如果以上两种方法都不能用,建议手动调整数据包的有响应和无响应数量。如果响应号原来是0,可以手动调整响应号为1;如果未响应数量最初为0,您可以手动将未响应数量调整为1。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: