我正在研究一个欺诈检测系统,我想优化这个系统,以考虑到审查部门的成本(以美元计):
我想根据最终成本调整损失:
衡量标准应是以下各项的总和:
衡量标准应该是这样的:
def fraudmetric(ytrue, ypred, fraudulentamt, reviewcost):
cost = [0 if yt==0 and yp==0 else ## TN
reviewcost if yt==1 and yp==1 else ## TP
reviewcost if yt==0 and yp==1 else ## FP
fa if yt==1 and yp==0 else 0 ## FN
for yt, yp, fa in zip(ytrue, ypred, fraudulentamt, reviewcost)]
return np.sum(cost)是否有一种优雅的方法可以用Python来实现呢?
谢谢
发布于 2019-01-02 21:52:56
您可以很容易地实现这样的二进制表,使用..。一张桌子。看起来是这样的:
metric_table = [[0, reviewcost],
[fa, reviewcost]]
metric_value = metric_table[yt][yp] # for a given yt, yp我在这里冒昧地修复了您的代码中似乎是一个bug,因为您压缩了四个可迭代程序,并且只得到了三个值。我假设您需要的是reviewcost中的元素,而不是整个元素。如果那不对就把它修好。另外,我不认为需要创建一个临时数组,只需对其进行汇总,所以我将其折叠为生成器的总和:
def fraudmetric(ytrue, ypred, fraudulentamt, reviewcost):
return sum([[ 0, rc],
[fa, rc]][yt][yp]
for yt, yp, fa, rc in zip(ytrue, ypred, fraudulentamt, reviewcost))https://stackoverflow.com/questions/54013554
复制相似问题