首页 > 解决方案 > python中的风险评分

问题描述

我有一个检测欺诈的指标,比如呼叫、传输率、辅助时间等等。

我已经根据四分位数将它们分组到垃圾箱中,现在我必须根据垃圾箱给出 1 到 5 的评分。例如:calls > 150 指定排名为 1,calls <=150 和 >=300 指定为 2,依此类推。对于所有指标也是如此。

我尝试了以下方法:

np.where(x.Calls<=125.8,1,
np.where(x.Calls>=153.2 & x.Calls<=190.0,2,np.where(x.Calls>=190.0 & x.Calls<=235.0,3,np.where(x.Calls>=235.0 & x.Calls<=304.4,4,np.where(x.Calls>=304.4,5,0))))

错误:

File "<ipython-input-32-41fe2292e308>", line 2 np.where(x.Calls>=153.2 & x.Calls<=190.0,2,np.where(x.Calls>=190.0 & x.Calls<=235.0,3,np.where(x.Calls>=235.0 & x.Calls<=304.4,4,np.where(x.Calls>=304.4,5,0))))

^ SyntaxError: unexpected EOF while parsing

我希望代码从获得的四分位数中获取值的范围,并自行对其进行评分。

标签: python-3.xnumpy

解决方案


您的具体错误表明您打开了一些括号。

但是你得到这个错误是因为嵌套np.where方法真的很难实现(因此调试和维护)。所以值得考虑其他方式。

您要实施的规则对我来说并不完全清楚,但我认为np.digitize可能会帮助您取得进步。它“量化”你的数据:你给它一个类似数组的 bin,它返回每个数组值出现的 bin。它的工作原理是这样的:

>>> import numpy as np
>>> a = np.array([55, 99, 65, 121, 189, 205, 211, 304, 999])
>>> bins = [100, 200, 300]
>>> np.digitize(a, bins=bins)
array([0, 0, 0, 1, 1, 2, 2, 3, 3])

推荐阅读