当我计算信息价值时,我使用“功能”和“目标”。 对于“目标”,我使用值1和0。
但是,步骤产生了问题:
data['all'] = d1[target].count()
,错误消息为'TypeError:无法散列的类型:'numpy.ndarray'
我该如何解决?
我试图解决这个问题,
data ['all'] = d1 [target] .count()-> data ['all'] = d1.target.apply(str).count()
但是,它没有用。
信息值计算
df:数据。 功能:功能名称。 target:目标名称。 pr:打印标志
def calc_iv(df,feature,target,pr = False):
d1 = df.groupby(by=feature, as_index=True)
data = pd.DataFrame()
data['all'] = d1[target].count()
data['bad'] = d1[target].sum()
data['share'] = data['all'] / data['all'].sum()
data['bad_rate'] = d1[target].mean()
data['d_g'] = (data['all'] - data['bad']) / (data['all'] - data['bad']).sum()
data['d_b'] = data['bad'] / data['bad'].sum()
data['woe'] = np.log(data['d_g'] / data['d_b'])
data = data.replace({'woe': {np.inf: 0, -np.inf: 0}})
data['iv'] = data['woe'] * (data['d_g'] - data['d_b'])
data.insert(0, 'variable', feature)
data.insert(1, 'value', data.index)
data.index = range(len(data))
iv = data['iv'].sum()
if pr:
print(data)
print('IV = %s' % iv)
return iv, data
我希望祸和四。