初识IV、WOE

IV值的简单说明

IV,即information value,中文含义为信息价值,或者说信息量

当现实中,我们进行建模时,不知道哪些自变量对模型有效,会构造几百个甚至上千个自变量,但这些自变量不会都放入模型进行训练,而是会使用一些方法,对自变量进行筛选后,再放入模型进行拟合训练。那么,如何挑选入模变量呢?

入模变量需要考虑的因素:

1、变量的预测能力

2、变量之间的相关性

3、变量的简单性

4、变量的稳健型

5、变量的可解释性

其中,以变量的预测能力为最主要和最直接的衡量标准。而IV值、信息增益、基尼系数等都能用来衡量自变量的预测能力。

IV值如何计算?

IV值是在WOE的基础上计算得出的,我们先来说说WOE是个什么意思~

WOE,全称Weight of Evidence,即证据的权重,woe是对原始自变量的一种编码形式。

首先,需要对自变量进行分组(分bin、离散化等),对不同组别分别计算woe值,其中第i组,WOE的计算公式为:

WOEi=ln(Pyi/Pni)
在这里插入图片描述
Pyi为该分组中响应用户数占所有响应用户的比例,Pni为该分组中非响应用户数占所有非响应用户的比例,将公式稍微变形,可知:
在这里插入图片描述
WOE也可表示“当前分组中响应用户与非响应用户的比值,同整体样本中响应用户与非响应用户的比值差异“。那么WOE越大,这种差异就越大,这个分组中样本响应的可能性越大。

各分组的IV值可以由WOE计算得到,计算方式为:
在这里插入图片描述
该变量的IV值为各组内IV值汇总
在这里插入图片描述
其中n为组数

实例介绍:见下方链接

常见问题:

1、为什么IV值不用WOE的绝对值汇总,而要乘(pyi-pni)?

若分组后,1组响应用户与非响应用户占比的确很显著,但1组用户数只占总用户数的1%,这样的变量其实对整体样本而言,是没有多大意义的,因为大部分的用户不会分到1组,该变量的预测能力并不强

2、IV的极端情况及处理方式?

使用IV其实有一个缺点,就是不能自动处理变量的分组中出现响应比例为0或100%的情况。那么,遇到响应比例为0或者100%的情况,我们应该怎么做呢?建议如下:

(1)如果可能,直接把这个分组做成一个规则,作为模型的前置条件或补充条件;

(2)重新对变量进行离散化或分组,使每个分组的响应比例都不为0且不为100%,尤其是当一个分组个体数很小时(比如小于100个),强烈建议这样做,因为本身把一个分组个体数弄得很小就不是太合理。

(3)如果上面两种方法都无法使用,建议人工把该分组的响应数和非响应的数量进行一定的调整。如果响应数原本为0,可以人工调整响应数为1,如果非响应数原本为0,可以人工调整非响应数为1.

学习自https://www.jianshu.com/p/3a7cb26ca268

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 是一种广泛应用于数据分析和科学计算的编程语言,可以利用它进行计算IV(Information Value)和WOE(Weight of Evidence)。 IV 是一种常用于评估变量的预测能力的指标。它衡量了自变量与因变量之间的相关性,也可以用于特征选择。计算 IV 的一般步骤如下: 1. 对于某个自变量,根据其不同取值将数据集划分成多个子集。 2. 在每个子集中,计算该子集中因变量的事件发生率和非事件发生率。 3. 根据每个子集中的事件发生率和非事件发生率计算每个子集的 IV 值。 4. 将每个子集的 IV 值相加得到最终的 IV 值。 下面是一个计算 IV 值的示例代码: ```python import pandas as pd import numpy as np def calculate_iv(dataset, feature, target): dataset['Event'] = np.where(dataset[target] == 1, 1, 0) dataset['NonEvent'] = np.where(dataset[target] == 0, 1, 0) event_total = dataset['Event'].sum() nonevent_total = dataset['NonEvent'].sum() dataset['EventRate'] = dataset['Event'] / event_total dataset['NonEventRate'] = dataset['NonEvent'] / nonevent_total dataset['WOE'] = np.log(dataset['EventRate'] / dataset['NonEventRate']) dataset['IV'] = (dataset['EventRate'] - dataset['NonEventRate']) * dataset['WOE'] iv = dataset['IV'].sum() return iv # 使用示例 dataset = pd.read_csv('data.csv') iv_value = calculate_iv(dataset, 'feature', 'target') print("IV value:", iv_value) ``` WOE 是一种衡量特征的预测能力的指标,它将每个特征的每个取值映射到一个权重值。计算 WOE 的一般步骤如下: 1. 对于某个自变量,根据其不同取值将数据集划分成多个子集。 2. 在每个子集中,计算该子集中事件发生的概率和非事件发生的概率。 3. 根据每个子集中事件发生的概率和非事件发生的概率计算每个子集的 WOE 值。 4. 将每个子集的 WOE 值相加得到最终的 WOE 值。 下面是一个计算 WOE 值的示例代码: ```python import pandas as pd import numpy as np def calculate_woe(dataset, feature, target): dataset['Event'] = np.where(dataset[target] == 1, 1, 0) dataset['NonEvent'] = np.where(dataset[target] == 0, 1, 0) event_total = dataset['Event'].sum() nonevent_total = dataset['NonEvent'].sum() dataset['EventRate'] = dataset['Event'] / event_total dataset['NonEventRate'] = dataset['NonEvent'] / nonevent_total dataset['WOE'] = np.log(dataset['EventRate'] / dataset['NonEventRate']) return dataset['WOE'] # 使用示例 dataset = pd.read_csv('data.csv') woe_values = calculate_woe(dataset, 'feature', 'target') print("WOE values:", woe_values) ``` 以上就是利用 Python 计算 IVWOE 的简单示例,根据数据的不同特点和需求,可以对代码进行相应的修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值