【数据分箱】WOE,IV

数据分箱是下列情形下常用的方法:

1.某些数值自变量在测量时存在随机误差,需要对数值进行平滑以消除噪音。

2.有些数值自变量有大量不重复的取值,对于使用<、>、=等基本操作符的算法(如决策树)而言,如果能减少这些不重复取值的个数,就能提高算法的速度。

3.有些算法只能使用分类自变量,需要把数值变量离散化。

数据被归入几个分箱之后,可以用每个分箱内数值的均值、中位数或边界值来替代该分箱内各观测的数值,也可以把每个分箱作为离散化后的一个类别。例如,某个自变量的观测值为1,2.1,2.5,3.4,4,5.6,7,7.4,8.2.假设将它们分为三个分箱,(1,2.1,2.5),(3.4,4,5.6),(7,7.4,8.2),那么使用分箱均值替代后所得值为(1.87,1.87,1.87),(4.33,4.33,4.33),(7.53,7.53,7.53),使用分箱中位数替代后所得值为(2.1,2.1,2.1),(4,4,4),(7.4,7.4,7.4),使用边界值替代后所得值为(1,2.5,2.5),(3.4,3.4,5.6),(7,7,8.2)(每个观测值由其所属分箱的两个边界值中较近的值替代)。


IV 值经验规则:

 IV < 0.02 :不具有预测能力

 0.02<= IV < 0.1 :预测能力很弱

 0.1<= IV < 0.3 :中等程度预测能力

IV >= 0.3 :预测能力很强

 

 IV 值法只适用于分类变量,可以通过调整分类阈值来提高IV值。使用IV值进行变量筛选时,可以计算出所有的分类变量的IV值,然后选择 IV值大于 0.1 或IV值最高的前 10% 变量。



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WOE转换后,可以使用IV(Information Value)来衡量每个分箱的预测能力。通常来说,一个好的分箱方案应该具有较高的IV值,因为这意味着该方案能够很好地区分目标事件和非目标事件。 在Python中,可以使用以下函数来计算每个分箱IV值: 1. pandas.crosstab()函数:用于生成交叉表,可以用于统计每个分箱中的样本数和目标变量的分布情况。 2. pandas.DataFrame.apply()函数:用于对数据集中的每一列应用给定的函数,可以用于计算每个分箱IV值。 3. numpy.log()函数:用于计算自然对数。 4. pandas.DataFrame.sum()函数:用于计算数据集中的每一列之和。 5. pandas.DataFrame.eval()函数:用于计算表达式的值。 6. pandas.concat()函数:用于将两个或多个数据集按照指定的轴进行拼接。 具体的计算步骤可以参考以下代码: ``` python import pandas as pd import numpy as np # 计算每个分箱WOEIV值 def calc_woe_iv(df, col, target): total = df.groupby(col)[target].agg(['count', 'sum']) total.columns = ['total', 'bad'] total['good'] = total['total'] - total['bad'] total['bad_rate'] = total['bad'] / total['total'] total['good_rate'] = total['good'] / total['total'] total['woe'] = np.log(total['good_rate'] / total['bad_rate']) total['iv'] = (total['good_rate'] - total['bad_rate']) * total['woe'] return total['iv'].sum() # 计算每个变量的IV值 def calc_iv(df, target): iv_values = [] for col in df.columns: if col != target: iv = calc_woe_iv(df, col, target) iv_values.append((col, iv)) iv_values = sorted(iv_values, key=lambda x: x[1], reverse=True) return pd.DataFrame(iv_values, columns=['Variable', 'IV']) # 计算数据集的IViv = calc_iv(df, target) print(iv) ``` 其中,`calc_woe_iv()`函数用于计算每个分箱IV值,`calc_iv()`函数用于计算每个变量的IV值,最终得到的结果是一个DataFrame,其中包含了每个变量的名称和对应的IV值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值