4. WOE计算
在评分卡与风控建模中,WOE(Weight of Evidence,证据权重)不是“把类别变量转成数值”这么简单。它同时承担三件事:把非线性关系线性化、把不同量纲的分箱统一到同一尺度、把业务风险方向显式编码。理解WOE,必须从公式推导开始,再落到正负样本定义、平滑处理、零频问题与业务可解释性。
一、核心原理:WOE公式推导与正负样本定义
设某个特征被分为若干箱,对第 i 箱,记正样本(通常为“坏客户”,如违约、逾期、欺诈)数量为 Bad_i,负样本(通常为“好客户”,如正常履约)数量为 Good_i。总正样本数为 Bad_T,总负样本数为 Good_T。则第 i 箱的WOE定义为:
WOE_i = ln( (Bad_i / Bad_T) / (Good_i / Good_T) )
进一步可写成:
WOE_i = ln( (Bad_i / Good_i) / (Bad_T / Good_T) )
这个形式更直观:分子是该箱内坏好比,分母是整体坏好比。WOE衡量的是“该箱的坏好比相对于整体坏好比的倍数”,取对数后使乘法关系变为加法关系。若WOE为正,说明该箱坏样本占比高于整体,风险偏高;若WOE为负,说明该箱坏样本占比低于整体,风险偏低。
正负样本定义必须与业务目标一致。在信用评分卡中,通常将“坏”定义为逾期90天以上、违约、欺诈等;将“好”定义为正常履约或轻微逾期。若定义反了,WOE方向会整体反转,后续逻辑回归系数解释也会相反。因此,在计算前必须明确:谁是正样本、谁是负样本、样本窗口与观察期是什么。
二、方法流程:从分箱到WOE计算
WOE计算通常嵌入在分箱之后。一个可复用的流程如下:
- 确定正负样本标签,统计总正样本数
Bad_T与总负样本数Good_T。 - 对连续变量进行分箱,或对类别变量进行类别合并,得到若干箱。
- 统计每箱的
Bad_i与Good_i。 - 对零频进行平滑处理,避免除零或无穷大。
- 按公式计算每箱WOE,并检查单调性。
- 用WOE替换原始特征值,形成建模输入。
下面是一个Python示例,展示带平滑的WOE计算:
import numpy as np
import pandas as pd
def calc_woe(df, feature, target, pos_label=1, eps=0.5):
# target: 1表示正样本(坏),0表示负样本(好)
total_bad = (df[target] == pos_label).sum()
total_good = (df[target] != pos_label).sum()
grouped = df.groupby(feature)[target].agg(
bad=lambda x: (x == pos_label).sum(),
good=lambda x: (x != pos_label).sum()
).reset_index()
# 平滑处理:对零频加eps
grouped['bad_smooth'] = grouped['bad'] + eps
grouped['good_smooth'] = grouped['good'] + eps
grouped['bad_rate'] = grouped['bad_smooth'] / total_bad
grouped['good_rate'] = grouped['good_smooth'] / total_good
grouped['woe'] = np.log(grouped['bad_rate'] / grouped['good_rate'])
grouped['iv'] = (grouped['bad_rate'] - grouped['good_rate']) * grouped['woe']
return grouped
该函数返回每箱的坏样本数、好样本数、平滑后占比、WOE与IV贡献。实际工程中,eps的取值需要结合样本量调整:样本量大时可取0.5或1,样本量小时可适当增大,但不宜过大,否则会削弱区分度。
三、零频问题与平滑处理
零频是WOE计算中最常见的工程问题。若某箱 Bad_i = 0,则 Bad_i / Bad_T = 0,取对数后为负无穷;若 Good_i = 0,则分母为0,WOE为正无穷。无穷大无法直接进入模型,也会破坏后续IV计算与单调性判断。
常见处理方式有三类:
| 方法 | 做法 | 优点 | 风险 |
|---|---|---|---|
| 拉普拉斯平滑 | 对每箱坏/好样本数加一个小常数 eps |
简单、稳定、可批量处理 | eps过大将压缩WOE差异 |
| 合并零频箱 | 将零频箱与相邻箱合并 | 保留业务可解释性 | 可能损失细分信息 |
| 贝叶斯平滑 | 用整体坏好比作为先验进行收缩 | 统计上更严谨 | 实现复杂,需调参 |
四、业务可解释性与常见误区复盘
WOE的最大价值之一是业务可解释性。由于WOE是坏好比的对数倍数,业务人员可以直接理解:WOE为正且越大,该箱风险越高;WOE为负且越小,该箱风险越低。若分箱后WOE随箱序单调递增或递减,则说明特征与风险之间存在稳定方向关系,这对评分卡的可解释性与稳定性至关重要。
但实际项目中常见以下误区:
- 正负样本定义反复横跳:不同特征用不同定义,导致WOE方向混乱,模型系数无法统一解释。
- 忽略零频直接取对数:产生inf或nan,后续IV计算与模型训练报错。
- 平滑过度:eps取太大,所有箱WOE被拉向0,特征区分度被严重削弱。
- 只看IV不看单调性:IV高但WOE上下震荡,模型稳定性差,业务不敢用。
- 用WOE替代业务判断:WOE是统计编码,不能替代对客群、产品、经济周期的业务理解。
一个实用的复盘清单如下:
- 正负样本定义是否在项目文档中固定并全员确认?
- 每箱坏/好样本数是否都大于0?若为0,采用哪种平滑或合并策略?
- WOE方向是否符合业务常识?例如“逾期次数越多,WOE应越大”。
- WOE是否随分箱单调?若不单调,是否考虑合并相邻箱?
- IV是否主要来自少数箱?是否存在过拟合风险?
- 平滑参数是否经过敏感性测试?