基于上述pdf , 利⽤ Python 计算 WOE 和 IV, 并将过程代码及⽣成对应表格进⾏展示。
时间: 2024-10-15 13:24:52 浏览: 80
对于计算WoE(Weight of Evidence)和IV(Information Value),我们首先需要对数据进行预处理,并且按照目标变量(在这个场景中是`admit`列)是否为1来分组计数。然后我们会针对每个特征的不同取值区间(例如`gre`分数段)计算其WoE值,并进一步得到IV值。以下是用Python实现这一流程的一个简单示例:
### 步骤一:导入必要的库并读入数据
假设我们的数据已经从PDF文件转换为了一个CSV格式的数据集,并保存在名为`admission.csv`的文件中。这里我们将使用pandas库来加载数据。
```python
import pandas as pd
from math import log
# 加载数据
df = pd.read_csv('admission.csv')
```
### 步骤二:定义计算WoE与IV的函数
接下来定义一个函数,它能够接收DataFrame以及指定的目标变量名称和自变量名称作为输入,并返回该自变量的各个区间的WoE和IV值。
```python
def calculate_woe_iv(df, target_variable_name, variable_name):
# 分割数据以获得正样本(被录取的学生)和负样本(未被录取的学生)
df_good = df[df[target_variable_name] == 1]
df_bad = df[df[target_variable_name] == 0]
total_good = df_good.shape[0]
total_bad = df_bad.shape[0]
woe_dict = {}
iv = 0
for value in df[variable_name].unique():
val_good = df_good[df_good[variable_name] == value].shape[0]
val_bad = df_bad[df_bad[variable_name] == value].shape[0]
rate_good = val_good / total_good if val_good > 0 else 0
rate_bad = val_bad / total_bad if val_bad > 0 else 0
if (rate_good > 0) and (rate_bad > 0):
woe = log(rate_good / rate_bad)
elif rate_good > 0:
woe = -log(1/rate_good)
elif rate_bad > 0:
woe = log(1/rate_bad)
else:
woe = 0
woe_dict[value] = woe
iv += (rate_good - rate_bad) * woe
return woe_dict, iv
```
### 步骤三:应用函数到特定变量上
我们可以选择任意一个自变量比如GRE成绩(`gre`)来计算它的WoE和IV。
```python
woe_gre, iv_gre = calculate_woe_iv(df, 'admit', 'gre')
print(f"IV for GRE: {iv_gre}")
print("WoE values:", woe_gre)
```
### 步骤四:生成结果表格
最后,我们可以创建一个新的DataFrame来存储这些WoE值,并将其打印出来查看。
```python
woe_df = pd.DataFrame(list(woe_gre.items()), columns=['GRE Score', 'WoE'])
print(woe_df)
```
以上就是基于提供的PDF中的数据计算WoE和IV的过程概述。注意实际操作时可能还需要根据具体情况进行一些调整或增加额外的逻辑处理。
阅读全文
相关推荐
















