首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用$金额作为损失来衡量分类性能

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

Stack Overflow用户
提问于 2019-01-02 21:44:29
回答 1查看 22关注 0票数 0

我正在研究一个欺诈检测系统,我想优化这个系统,以考虑到审查部门的成本(以美元计):

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

  • 如果交易是欺诈性的,但金额很小,则花费更多时间进行审查可能会更昂贵。
  • 被审查的非欺诈性交易仍有成本。
  • 有些交易是非常昂贵的,而且必须被捕获。

衡量标准应是以下各项的总和:

  • TP ->无成本
  • FP -->审查费用
  • 审查费用+我们从欺诈中得到的金额(如果不是总数)
  • FN ->欺诈交易总额

衡量标准应该是这样的:

代码语言:javascript
复制
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来实现呢?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-02 21:52:56

您可以很容易地实现这样的二进制表,使用..。一张桌子。看起来是这样的:

代码语言:javascript
复制
metric_table = [[0, reviewcost],
                [fa, reviewcost]]
metric_value = metric_table[yt][yp]  # for a given yt, yp

我在这里冒昧地修复了您的代码中似乎是一个bug,因为您压缩了四个可迭代程序,并且只得到了三个值。我假设您需要的是reviewcost中的元素,而不是整个元素。如果那不对就把它修好。另外,我不认为需要创建一个临时数组,只需对其进行汇总,所以我将其折叠为生成器的总和:

代码语言:javascript
复制
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))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54013554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档