WOE转化的意义

之前一直在网上搜为什么在做评分卡的时候,要把bian变量转化为WOE,现在找到一定的原因,记录一下。

先说结论:转化为WOE后,WOE值与对应的违约率是呈单调相反的关系。

即WOE值越高,其违约率越低。

对应的违约率:该箱内,该箱坏样本占该箱总样本的比例。

因为没有转化前,违约率与变量的箱shi是没有太大关系的。

上图

很明显,cutpoint与badrate是没有线性关系的,而woe与badrate就是线性相关的。

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 # 计算每个分箱的WOE和IV 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']) # 计算数据集的IV iv = 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、付费专栏及课程。

余额充值