我试图手动计算WoE,但我无法得到与category_编码器计算结果相同的结果。这是我要计算分数的数据帧:
df = pd.DataFrame({'cat': ['a', 'b', 'a', 'b', 'a', 'a', 'b', 'c', 'c'], 'target': [1, 0, 0, 1, 0, 0, 1, 1, 0]})
这是我用来计算灾难分数的代码
woe = WOEEncoder(cols=['cat'], random_state=42)
X = df['cat']
y = df.target
encoded_df = woe.fit_transform(X, y)
同样的结果是:
0 -0.538997
1 0.559616
2 -0.538997
3 0.559616
4 -0.538997
5 -0.538997
6 0.559616
7 0.154151
8 0.154151
所以, “a”编码为-0.538997 “b”的编码为0.559616 “c”编码为0.154151
当我手工计算分数时,它们是不同的,我取
ln(% of non events / % of events).
比如说,为了计算一个国家的灾难
% of non events = targets which are 0 for 'a'/ total targets for group 'a'
因此,非事件的百分比=3/4=0.75
% of events = targets which are 1 for 'a' / total targets for group 'a'
So, % of events = 1/4 = 0.25
Now, 0.75/0.25 = 3
因此,WoE(a)=ln(3)=1.09,这与上述编码器不同
目前没有回答
相关问题 更多 >
编程相关推荐