WOE编码为啥有效

WOE编码为啥有效

想起刚入门风控时,天天对变量进行WOE变换,当初很多书籍和文章都讲得很详细,公式和例子都有,但他们很少直接回答:
* 为啥要用WOE
* 不用WOE不行吗?
* WOE有啥神奇功效?
本文试图根据自己理解解答。

在风控用到的数据里,我们会用到两种变量:

  • Numerical Variable,数值变量。例如逾期金额,天数。
  • Categorical Variable,类别变量。例如客户职业。

在制作评分卡过程中,我们还需要把数值变量变成类别变量,例如客户年龄段,我们可以划分为[20及以下],[21-30],[31-40],[41-50],[51-60],[61-70],[70以上]七个类别,这时候我们就把数值变成了类别。这种把数值变成类别的技巧叫做分箱(binning)。

但是当把所有变量都变成类别后,这时候你也许有这个疑惑:怎么去训练一个模型呢?例如逻辑回归,只能用数值作为特征输入。怎么把类别变成数值呢?

你这时候想到的可能是one-hot encoding,但还是有问题,对于逻辑回归来说,one-hot encoding输出的矩阵太稀疏了,很难让逻辑回归有很好的效果。

这时候,我们可以试试把类别或者分箱转化成响应的数值(怎么又转回数值了?等下解答你)。这个分数必须和必须有这个特性:分数越大,代表这个变量给bad label的贡献度越大,这个贡献度,视运算符号不同,可以是正向,也可以是负向,但我们期望它们之间有个线性关系。

这时候我们需要引入WOE编码。

什么是WOE

我相信在看到这片文章时,你已经看过很多关于WOE的讲解,但为了照顾第一次研究WOE的朋友,我还是详细解释下。

WOE全称是Weight of Evidence,即证据权重,也叫作自变量的一种编码

WOE的公式定义如下:

WOE_i = ln(\frac{Bad_i}{Bad_T}/\frac{Good_i}{Good_T})=ln(\frac{Bad_i}{Bad_T})-ln(\frac{Good_i}{Good_T})

其中i为某个特征的第i个分箱。Bad_i为在i个分箱的bad label数量,Bad_T为总共的bad label数量。例如下面举个例子, Bad_1 = 20, Bad_T = 50,  Good_1=80, Good_T = 450, 计算可以得到 WOE_1 = 0.8109

现在我们观察bad rate 和 WOE的关系,可以看到WOE越大,bad rate越高,也就是说,通过WOE变换,特征值不仅仅代表一个分类,还代表了这个分类的权重。这就回答了问题”WOE编码为啥有效“

什么情况下用WOE

当然,你会有疑问:“类别变量我能理解要WOE,但对于连续变量,通过分箱变成类别变量,又通过WOE去“模拟”连续变量,这不是舍近求远吗?那我为啥不直接用原始的数值变量?

哈哈哈很聪明嘛,没被我绕进去。答案是当然可以,而且很多情况下并不会比WOE效果差。但binning+WOE能解决一个问题,就是可以把非线性的特征转化为线性。

例如在风控场景里,我们可能用到客户的年龄做特征。我们知道肯定不是年龄越大风险越高,或者年龄越大风险越低,一定是有个年龄段的风险是比其他年龄段高些。我们拿Give Me Some Credit的数据做个分析,在数据里有个年龄字段,我们来看看年龄(age)和违约率(SeriousDlqin2yrs)的关系

可以看到年龄和违约率并不是线性相关的。我们知道,逻辑回归的方程是:

ln(odds) = w_1x_1+w_2x_2+w_3x_3+.....

逻辑回归拿年龄做变量,例如 x_1 是年龄,训练后 w_1 是固定权重值,如果 w_1 是正值,那么年龄越高, w_1x_1 的值越大,最后分数 ln(odds) 值也越大,但从上图可以看出实际不是这样的。

为了解决这个非线性的问题,我们用WOE代替年龄段,根据WOE的计算过程,我们可以知道WOE值越高的分类,违约率越高,这样就可以把非线性映射。下图已经把年龄换成了WOE,可以看到WOE和违约率是线性。

总结一下:WOE可以把相对于bad rate显现非线性的特征转换为线性的,这对于广义线性模型(Generalized linear model、简称GLM,我们用的线性回归,逻辑回归都算GLM)来说非常有必要。

WOE还有什么好处

除了可以把非线性的特征转换成线性的,WOE好处还有:

  1. 对波动不敏感。遇到异常数据亦能平稳表现。例如有个人年龄为20,不小心按键盘时按成了200,也不会产生10倍的波动。
  2. 容易操作。 这是对业务人员说的,用模型计算出评分卡后,给任何不懂技术的人都能算出一个客户的风险值。

其他问题:

Q:特征有null值怎么办

A:两种策略。1.预先fillna。2.null值单独一箱


总结

  • WOE越大,bad rate越高,也就是说,通过WOE变换,特征值不仅仅代表一个分类,还代表了这个分类的权重。这就回答了问题”WOE编码为啥有效“
  • WOE可以把相对于bad rate显现非线性的特征转换为线性的,这对于广义线性模型(Generalized linear model、简称GLM,我们用的线性回归,逻辑回归都算GLM)来说非常有必要。
编辑于 06-08

文章被以下专栏收录