WOE和IV的计算公式和理解

WOE

  woe是weight of evidence的缩写,是对原始自变量数据的一种编码方式。对特征变量进行分箱操作,得到的只是单纯的一个分组,并没有与组内标签值建立联系,而进行woe编码就是将分箱数据与标签值建立联系。

woe的计算公式

  对于一个二分类问题,将特征划分为n个组,对于每一个组,都可以计算其woe值。用x_it表示第i组中正例数,用x_if表示第i组的负例数,用X_T和X_F分别表示负例总数和正例总数。
  第i组的负例占总负例比率, P i f = x i f / X F P_{if}=x_{if}/X_F Pif=xif/XF
  第i组的正例占总正例比率, P i t = x i t / X T P_{it}=x_{it}/X_T Pit=xit/XT
  woe的计算公式如下:
W O E i = l n ⁡ ( P i f / P i t ) {WOE}_i=ln⁡(P_{if}/P_{it} ) WOEi=ln(Pif/Pit)

woe的意义

  woe衡量了分箱数据各个组的组内正负例比率与样本总体正负例比率的差异,使用woe对分箱数据进行编码,形成的新的特征变量暴露值与类标签(因变量)有正向关系。woe值描述了特征变量分组对判断个体的类属性的影响方向和大小。如果一个个体样本特征变量值所属分组的woe值比较大,那么该样本响应负例的概率就比较大。

IV

  IV是information value的缩写,即信息价值。

IV计算公式

  对每个分组, I V i = ( P i f − P i t ) l n ⁡ ( P i f / P i t ) {IV}_i=(P_{if}-P_{it})ln⁡(P_{if}/P_{it} ) IVi=(PifPit)ln(Pif/Pit)
  单个特征变量的信息价值为,
I V = ∑ ( i = 1 ) n I V i IV=∑_{(i=1)^n}{IV}_i IV=(i=1)nIVi

IV的意义

   IV是单个特征变量的信息价值,即该特征变量对整个模型所能提供的信息,反映了该特征变量的预测能力,IV值越大,预测能力越强。可以用IV值来对特征的预测能力进行排序和筛选。
  可以看到,特征的IV值是每个分组 I V i {IV}_i IVi的总和,那为什么不用woe值直接进行加总,而是要在woe前面乘以 ( P i f − P i t ) (P_{if}-P_{it}) (PifPit)呢?
  其实IV值可以看成是woe的加权求和,避免了极端情况下对信息价值的反映失真。例如,当变量的一个分组woe很高,但是该分组占样本总数的比例很小的情况时,虽然个体样本落在该分组时,能以极大的概率预测,但是样本落在该分组的概率却非常的小,综合来看,不能认为该变量具有很强的预测能力。而 ( P i f − P i t ) (P_{if}-P_{it}) (PifPit)体现了分组占样本总数的比例。

简单探索一下 I V i IV_i IVi的取值范围
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 创建一个数据集
x = np.arange(0.0001, 1, 0.0001)
y = np.arange(0.0001, 1, 0.0001)
x, y = np.meshgrid(x, y)
z = (x - y) * np.log(x / y)

# 创建一个3D图形对象
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制3D线图
ax.plot_surface(x, y, z, cmap='viridis')

# 添加标签
ax.set_xlabel('$P_{if}$')
ax.set_ylabel('$P_{it}$')
ax.set_zlabel('Z')

# 显示图形
plt.show()

在这里插入图片描述

  可以看到, I V i IV_{i} IVi的取值范围为 ( 0 , + ∞ ) (0, +∞) (0,+),当 P i f = P i t P_{if}=P_{it} Pif=Pit时, I V i IV_{i} IVi取值为0,当 P i f P_{if} Pif P i t P_{it} Pit分别接近0和1时, I V i IV_{i} IVi取值接近正无穷。从该图也可以看出,如果 P i f P_{if} Pif P i t P_{it} Pit均比较小,但 P i f P_{if} Pif P i t P_{it} Pit是对方的很多倍时, W O E i WOE_i WOEi可能比较大,但是 I V i IV_{i} IVi会比较小。

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WOE(Weight of Evidence)是一种用于评估变量对目标变量的预测能力的统计方法,常用于信用风险评估和预测建模中。 在 pandas 中,可以使用 WOE 进行分析和计算。通常的步骤包括: 1. 将数据按照自变量(特征)进行分组。 2. 对每个分组计算目标变量的好坏比例(即目标事件发生的比例)。 3. 计算每个分组的 WOE 值,可以通过以下公式得到:WOE = ln(good%) - ln(bad%) 其中,good% 表示目标变量为好的比例,bad% 表示目标变量为坏的比例。 4. 可以根据 WOE 值的大小来评估变量的预测能力。WOE 值越大,表示该分组下目标变量为好的可能性越大;WOE 值越小,表示该分组下目标变量为坏的可能性越大。 使用 pandas,你可以使用 groupby 函数对数据进行分组,并使用 apply 函数计算每个分组的 WOE 值。然后可以根据 WOE 值的大小进行进一步的分析和建模。 下面是一个简单示例,演示如何使用 pandas 计算 WOE 值: ```python import pandas as pd import numpy as np # 假设有一个名为 df 的 DataFrame,包含特征变量 X 和目标变量 Y # 假设目标变量 Y 只有两个取值:0 和 1 # 按照特征变量 X 进行分组,并计算坏样本比例和好样本比例 grouped = df.groupby('X')['Y'].agg([('bad', lambda y: np.sum(y == 1)), ('good', lambda y: np.sum(y == 0))]) # 计算坏样本比例和好样本比例的占比 grouped['bad_pct'] = grouped['bad'] / np.sum(grouped['

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值