python - 如何在python中获得证据权重(WOE)和信息值(value)(IV)?

标签 python pandas

我想知道如何在 python 中计算 WOE 和 IV。
numpy/scipy/pandas/sklearn 中是否有奉献功能?

这是我的示例数据框:

import numpy as np
import pandas as pd
np.random.seed(100)


df = pd.DataFrame({'grade': np.random.choice(list('ABCD'),size=(20)),
                   'pass': np.random.choice([0,1],size=(20))
})
df

最佳答案

woe 和 iv 的公式:

enter image description here

实现此目的的代码:

import numpy as np
import pandas as pd
np.random.seed(100)


df = pd.DataFrame({'grade': np.random.choice(list('ABCD'),size=(20)),
                   'pass': np.random.choice([0,1],size=(20))
})

feature,target = 'grade','pass'
df_woe_iv = (pd.crosstab(df[feature],df[target],
                      normalize='columns')
             .assign(woe=lambda dfx: np.log(dfx[1] / dfx[0]))
             .assign(iv=lambda dfx: np.sum(dfx['woe']*
                                           (dfx[1]-dfx[0]))))

df_woe_iv

输出
pass     0    1       woe        iv
grade                              
A      0.3  0.3  0.000000  0.690776
B      0.1  0.1  0.000000  0.690776
C      0.2  0.5  0.916291  0.690776
D      0.4  0.1 -1.386294  0.690776

关于python - 如何在python中获得证据权重(WOE)和信息值(value)(IV)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60892714/

相关文章:

python - TypeError : can't multiply sequence by non-int of type 'float' , 我无法弄清楚

具有两个或多个键的 Pandas 字典

python - Pandas HDFStore.create_table_index 没有提高选择查询速度,寻找更好的搜索方式

python - 无法在 OS X 中导入 cx_oracle

python - 如何捕获 sqlalchemy 上的特定异常?

python - 如何通过计算 pandas 数据框中的值来创建新系列?

python - Pandas:使用 `sep` 和 `comment` 参数读取 CSV 文件时出错

python - 如何在nlp中进行特征提取

python - 在 2 列上合并 pandas 数据帧,但顺序不限

python - 计算 lambda 函数中上述出现的次数