使用$金额作为损失来衡量分类绩效

时间:2019-01-02 21:44:29

标签: python scikit-learn classification loss

我正在开发一个欺诈检测系统,我想对该系统进行优化,以考虑审核部门的成本(以美元为单位):

我想根据最终费用调整损失:

  • 如果交易是欺诈行为,但金额很小,花时间进行审核可能会更昂贵。
  • 经过审查的非欺诈性交易仍然有成本。
  • 某些交易可能真的很昂贵,必须被抓住

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

  • TP->没有费用
  • FP->审核费用
  • TN->审查费用+我们从欺诈行为中获得的金额(如果不是全部的话)
  • FN->欺诈交易的总金额

指标应如下所示:

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

谢谢

1 个答案:

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