Python计算iv值和woe代码
时间: 2023-09-30 09:06:09 浏览: 50
WOE编码和IV值是一种常用的特征工程方法,它们可以用于衡量一个特征与目标变量之间的关联程度和预测能力。下面是Python计算IV值和WOE编码的示例代码:
```python
import pandas as pd
import numpy as np
def calc_woe_iv(df, col, target):
"""
计算指定特征的WOE编码和IV值
:param df: 数据集
:param col: 特征列名
:param target: 目标变量列名
:return: WOE编码和IV值
"""
# 计算该特征每个取值的数量和占比
freq = pd.DataFrame({'total': df.groupby(col)[target].count(),
'bad': df.groupby(col)[target].sum()})
freq['good'] = freq['total'] - freq['bad']
freq['bad_rate'] = freq['bad'] / freq['bad'].sum()
freq['good_rate'] = freq['good'] / freq['good'].sum()
# 防止出现除0错误
freq.loc[freq['bad_rate'] == 0, 'bad_rate'] = 0.0001
freq.loc[freq['good_rate'] == 0, 'good_rate'] = 0.0001
# 计算WOE编码
freq['woe'] = np.log(freq['good_rate'] / freq['bad_rate'])
# 计算IV值
freq['iv'] = (freq['good_rate'] - freq['bad_rate']) * freq['woe']
iv = freq['iv'].sum()
return freq[['woe', 'iv']].reset_index().rename(columns={col: 'value'}), iv
```
这个函数的输入参数包括数据集`df`、特征列名`col`和目标变量列名`target`,输出WOE编码和IV值。在函数中,我们首先计算了该特征每个取值的数量、坏样本数量、好样本数量、坏样本率、好样本率和WOE值,然后根据IV值的公式计算了每个取值对应的IV值,并将它们相加得到总的IV值。最后,我们将WOE编码和IV值合并成一个DataFrame并返回。
需要注意的是,代码中为了避免出现除0错误,我们在计算WOE编码和IV值时对分母加上了一个极小值0.0001。同时,WOE编码和IV值的计算方式可以根据具体的业务需求进行调整。