计算WOE和IV是评分卡模型的一个重要环节,之前没有仔细研究过,但总觉得他们既然可以放在评分卡模型中去解决相应的问题,那应该也可以放在其他模型中解决相似的问题,所以还是很值得研究一下。下文是自己对这两个指标的理解整理。
应用场景
WOE和IV主要用来判断变量的预测强度,比如判断用户收入对用户是否会发生逾期的预测强度。因此,两个值的使用主要是在有监督的分类问题中,具体可以细化到如下方面:
WOE(Weight of Evidence)
我们使用german credit数据来解释WOE及后面的IV值。german credit数据集包括了用户状态,信用历史,是否有工作,财产状况等属性,和是否发生违约标签。
german credit中一共有1000条数据,其中700条为未违约用户,300条为违约样本。我们选取savings这个分类字段进行相应解释,以此省去之前的离散化操作。此字段共有5个取值,具体如下:
每个取值代表一个分组,每个分组中好坏样本数如下,其中1代表未违约,2代表违约:
1(未违约) | 2(违约) | 总计 | |
---|---|---|---|
A61 | 386 | 217 | 603 |
A62 | 69 | 34 | 103 |
A63 | 52 | 11 | 63 |
A64 | 42 | 6 | 48 |
A65 | 151 | 32 | 183 |
总计 | 700 | 300 | 1000 |
统计好后,就可以进行WOE值的计算,WOE公式如下:
P(yi)代表第i组中,违约样本占所有违约样本的比例;
P(ni)代表第i组中,未违约样本占所有未违约样本比例;
y:所有违约样本数;
n:所有未违约样本数。
经过变换,上述式子可以变为
根据对数变换曲线,可知,WOE取值为全体实数,且在大于0部分,WOE越大表示分组中存在违约样本可能性越大(正向作用),小于0部分,WOE越小则越表示了一种反向作用。因此,WOE反映了自变量取值对目标变量的影响。经过计算,得到相应的WOE值:
1(未违约) | 2(违约) | 总计 | woe | |
---|---|---|---|---|
A61 | 386 | 217 | 603 | 0.271 |
A62 | 69 | 34 | 103 | 0.14 |
A63 | 52 | 11 | 63 | -0.706 |
A64 | 42 | 6 | 48 | -1.099 |
A65 | 151 | 32 | 183 | -0.704 |
总计 | 700 | 300 | 1000 |
以savings变量取A61时为例,对应的woe=ln((217/300)/(386/700))。WOE没有考虑分组中样本占整体样本的比例,如果一个分组的WOE值很高,但是样本数占整体样本数很低,则对变量整体预测的能力会下降。因此,我们还需要计算IV值。
IV(Information Value)
IV值考虑了分组中样本占整体样本的比例,相当于WOE的加权求和。具体计算公式如下:
根据上面的公式,我们可以得到savings字段各取值IV值及字段总体IV值:
1(未违约) | 2(违约) | 总计 | WOE | IV | |
---|---|---|---|---|---|
A61 | 386 | 217 | 603 | 0.271 | 0.047 |
A62 | 69 | 34 | 103 | 0.14 | 0.002 |
A63 | 52 | 11 | 63 | -0.7066 | 0.027 |
A64 | 42 | 6 | 48 | -1.099 | 0.044 |
A65 | 151 | 32 | 183 | -0.704 | 0.077 |
总计 | 700 | 300 | 1000 | 0.197 |
R语言实现
针对此特定数据集,编写了如下函数,计算WOE与IV:
调用后得到相关结果: