我正在开发一个欺诈检测系统,我想对该系统进行优化,以考虑审核部门的成本(以美元为单位):
我想根据最终费用调整损失:
指标应为以下各项的总和:
指标应如下所示:
link /subsystem:windows /out:test64.exe kernel32.lib user32.lib test64.obj
是否有一种优雅的方法可以使用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)
来做到这一点?
谢谢
答案 0 :(得分:1)
您可以使用...很容易地实现一个二进制表。看起来像这样:
metric_table = [[0, reviewcost],
[fa, reviewcost]]
metric_value = metric_table[yt][yp] # for a given yt, yp
由于您压缩了四个可迭代的变量,而只提取了三个值,因此我采取了这种自由态度来修复似乎是代码中的错误的地方。我假设您要使用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))