风控评分卡模型原理与应用(四):WOE编码的单调性

在实际用逻辑回归做A卡的时候,老司机们会经常对我们说变量分箱要满足badrate要满足单调性,当变量单调了,再进行WOE转换,然后作为LR的入参训练模型。这篇文章给你解释一下这么做的原因,并延申解释如下几个问题:

  • LR模型的入参一定要WOE吗?
  • WOE转化前的变量分箱结果的badrate一定需要满足单调性吗?
  • 连续变量难道就不可以直接进LR模型吗?

WOE回顾

WOE是weight of evidence的缩写,是一种编码形式,首先我们要知道WOE是针对类别变量而言的,所以连续性变量需要提前做好分组(这里也是一个很好的考点,也有会说分箱、离散化的,变量优化也可以从这个角度出发)

WOE的计算公式如下:

WOEi=ln(pi1pi0)=ln(#Bi/#BT#Gi/#GT)WOE_i=ln(\frac{p_{i1}}{p_{i0}})=ln(\frac{\#B_i/\#B_T}{\#G_i/\#G_T})\\ WOEi=ln(pi0pi1)=ln(#Gi/#GT#Bi/#BT)

其中 :

pi1p_{i1}pi1是第iii箱中坏客户占所有坏客户的比例

pi0p_{i0}pi0是第iii箱中好客户占所有好客户的比例

#Bi\#B_i#Bi是第iii箱中坏客户的人数

#Gi\#G_i#Gi 是第iii箱中好客户人数

#BT\#B_T#BT是总共坏客户人数

#GT\#G_T#GT总共好客户人数

所以,WOE主要就是体现组内的好坏占比与整体的差异化程度大小,WOE越大,差异越大。

LR模型的入参一定要WOE吗?

并非所有LR的入参都需要WOE的,也可以是直接原始值入模型的。但存在即合理,为什么大家都在说要对变量进行WOE编码呢?我们可以引出下面两个问题:

什么情况下用WOE比较合适?

以及用WOE有什么好处?

我们知道,在风控领域的变量可以大致分为两类,就是数值型变量以及类别型变量,前者就是类似于年龄、逾期天数等,后者就是职业类别、行业类别等。

针对类别型变量,我们很容易可以想到使用one-hot编码来,但是这种编码方式有一定的缺陷,那就是对于枚举值特别多的变量,独热编码之后十分稀疏从而特征空间很大,另外如果丢弃一部分维度则会造成信息丢失,指不定这些是关键的信息。以上的信息说明了放入LR中很难有很好的效果。

而针对数值型变量,很多同学则会有更大的疑问,那就是为什么要分箱然后又进行WOE转换这么麻烦,反正都可以直接入模型的,何必多此一举?

当然了!这个想法也是没错的,在本小节开头也已经说明了,并非要求所有的变量都要进行WOE编码然后进入模型。而什么情况下十分适合WOE转换呢,那就是变量本身与y值并非存在直接线性关系的时候。

我们看上面的图,"年龄"这个字段经常性地会出现在我们的A卡模型里,作为预测一个客户信用水平的衡量指标。我们可以清楚知道,age这个变量的badrate分布,经常性会呈现"U型",业务解释就是:年轻人和老年人的还款能力会比中年人的要低,风险也因此更高。从统计角度看,年龄与违约率,便不是一个线性关系!

我们回忆一下LR模型(Logistic Regression),从本质上讲,LR就是经过对训练集的学习,得到一组权值w,当有新的一组数据x输入时,根据公式计算出结果,然后经过Sigmoid函数判断这个数据所属的类别。

hw(x)=w0+w1x1+w2x2+...+wnxn h_w(x) = w_0+w_1x_1+w_2x_2+...+w_nx_n hw(x)=w0+w1x1+w2x2+...+wnxn

假如我们的年龄就是上面的x1,并且模型只有一个变量,那么随着x1的变大,的值也会不断变大,而不是像上图一样呈现"U型",说明了这是一个非线性的问题。

但如果我们对年龄进行WOE转换,就可以看到如上图所示的那样,随着WOE的增大,goodrate也增大这种线性关系(badrate=1-goodrate,因此和badrate也是线形关系)。

以上也是使用WOE编码的一个最大好处,也就是把badrate呈现非线性的变量转换为线形,便于理解也便于后续模型求解。此外,WOE编码还有一个好处,那就是具有"容错性",因为WOE编码其实也可以理解为需要预先分箱,那么对于异常值没那么敏感,对于单个变量的异常波动不会有太大反应。

WOE不单调可以进LR模型吗

1)针对类别变量

类别变量可以分有序和无序变量。

针对有序类别变量,比如像学历,我们分箱的时候要保证原始顺序的前提下,进行不同原始组别的合并,完成分箱,然后需要看分箱的badrate单调性,最后才来看WOE单调性情况。

针对无序类别变量,无序类别变量又可以根据枚举值的多少拆分为两类:多枚举无序类别变量和少枚举无序类别变量。无论是哪一种,我们都可以根据对每个枚举值的badrate统计得到其量化指标,然后根据badrate进行适当的类别合并,完成分箱操作,这时候的分箱结果,天然单调!而针对少枚举无序类别变量,我们还可以根据业务认识,进行类别的合并,比如像中国大区字段(华南、华北等),WOE编码后,也不做严格的单调性要求。

2)针对数值变量

进行合适的分箱算法进行分箱后的bin,需要满足badrate单调性,然后才进行WOE编码。不过呢,这个也不是严格要求的。

为什么需要WOE具备单调性

WOE不一定都需要是单调的,只要从业务角度可以解释得通,那就没有问题!就好像上面的那个栗子,年龄字段,WOE就不是单调的,但从业务上可以解释得通,那就没有问题!

如果从业务上解释是需要单调性,但分组后的WOE并没有单调,那么这时候有两条路可以选择,一是重新分组然后重新计算WOE,二是放弃这个变量。

最后提一下,如果不单调的变量不进行WOE编码直接进入LR模型,一般都是很难求解的,因为很难找到一个线性公式来描述关系。

参考文章:

https://zhuanlan.zhihu.com/p/465951746

相关推荐
许彰午1 小时前
04_Java数组操作全解
java·开发语言·python
废弃的小码农1 小时前
APP测试--adb使用介绍
python·测试工具·adb
曲幽1 小时前
你的FastAPI又在服务器上“跑不起来”了?来,今天咱把打包这件事彻底聊透
linux·windows·python·docker·fastapi·web·pyinstaller·nssm·services
AI玫瑰助手1 小时前
Python函数:局部变量与全局变量的作用域
开发语言·python·信息可视化
imDwAaY1 小时前
机器学习入门:从感知机到逻辑回归,理解线性分类器与Softmax CS188 Note20 学习笔记
人工智能·笔记·python·学习·机器学习·逻辑回归
2601_961194021 小时前
2026初级会计实务教材电子版|章节讲义+习题PDF
python·考研·django·pdf·virtualenv·pygame
极客笔记Jack1 小时前
Scanpy 富集分析实战:gseapy 从基因列表到通路解读
python
岁月宁静2 小时前
Hermes Agent:让你的AI智能体越用越聪明
python·agent
财经资讯数据_灵砚智能2 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年5月29日
人工智能·python·信息可视化·自然语言处理·ai编程