使用 $ 金额作为损失来衡量分类性能

Use a $ amount as loss to measure classification performance

我正在研究欺诈检测系统,我想优化系统以考虑审查部门的成本(以美元为单位):

我想根据最终成本调整损失:

指标应为以下各项的总和:

指标应如下所示:

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 做到这一点?

谢谢

您可以像这样使用...轻松实现二进制 table,table。它看起来像这样:

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))