风控建模中的IV和WOE

  在风控建模中IV(信息价值)和WOE(证据权重)分别是变量筛选和变量转换中不可缺少的部分。

  很多文章已经讨论过这两个变量,本文在吸收前人优秀成果的基础上,希望用通俗易懂的语言让大家快速理解这两个变量。并用简单的例子让大家明白在实际中如何运用这两个变量,最后给出建模过程中实际需要用到的Python代码。

1. IV运用背景

  在信贷中,都希望借钱给有意愿且有能力还钱的客户,这样借出去的钱才会有收益(利息),并且不会形成坏账(欠钱不还给公司造成损失)。如何找到这样的客户,把这些客户和会逾期的客户区分开来?

  很多银行和公司,基础的模型都是逻辑回归,通过逻辑回归建模把正常客户(好客户)和逾期客户(坏客户)区分开来。而可以用逻辑回归区分好坏客户的前提假设是 “历史样本和未来样本服从同一总体分布” ,逻辑回归模型通过从过去的数据中学习样本的分布特征,从而可以对未来的数据进行处理,判别出未来客户逾期的可能性,从而决定公司是放款还是拒绝。

  那哪些变量可以进入逻辑回归模型,帮助模型更好的区分正常客户和逾期客户?让公司放款金额更多地进入能还钱的人手里,按期还本付息。尽可能少地给到会逾期不还钱的人手里,产生坏账?本文所讲的IV就可以帮助我们挑选变量,决定哪些变量可以进入到模型,哪些变量最好不要进入模型。其它挑选变量的方法如:GBDT、随机森林、相关系数、逐步回归等会在后续文章中详细说明。对于IV的预测能力,一般的会有以下建议:

<
  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

阿黎逸阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值