我正试图将成本分配给混淆矩阵。也就是说,在我的问题中,FP没有与FN相同的成本,所以我想给这些情况分配一个成本"x“,这样算法就可以根据这些代价来学习。
我将用一个例子来解释我的情况:
我想知道的是,R中是否有一个库,其中我可以将成本分配给这些错误的决策(即,给混淆矩阵的每个可能值一个代价),或者是否有一个基于成本/收益矩阵的学习算法。
我也可以使用一些方法来实现这一点,而不需要使用库。
非常感谢。
发布于 2022-05-31 09:47:45
在这种情况下,可以考虑使用平均利润作为评估指标的报酬矩阵。重要的是要记住成本函数(在训练过程中使用的算法学习过程中使用的,它也必须与基于梯度的优化)和性能度量(这是我认为在这种情况下应该考虑的,例如平均利润)之间的区别。
如果您有以下混淆矩阵:

您可以在矩阵的每象限分配收益/损失:

在这种情况下,您的评估指标(选择最佳模型):
此度量还可用于选择模型的最佳阈值:

例如,如果您想将培训算法提供给R中的XGB,请查看文档,其中有一个名为feval的参数,以包含您的自定义评估度量函数(文档链接):
feval ->自定义评价函数.返回列表(度量=“度量-名称”,值=“度量-值”),其中包含给定的预测和数据序列。
发布于 2022-05-30 10:20:21
什么定义了每个FP或FN的惩罚值?这是与TP和TN相比,这些决定造成的最终成本。
伪造100万美元的信用卡欺诈,与10美元的假阳性不一样重要。
这就是为什么成本函数将直接联系到欺诈的数量,因此你的算法的目标函数。
因此,您可以将每个决策结果(TP、TN、FP、FN)乘以每次支付的金额:记住,您的目标是改进整个模型,包括正确的结果,而不仅仅是糟糕的结果。
因此,目标函数是试图求出所有付款的总和的最大值,将良好付款(TP、TN)除以所有金额(TP、TN、FP、FN)。
例如:
TP= [2500, 200, 60]
TN= [300,5000]
FP= [1500,30,600]
FN= [300, 200]
Score = (2500+200+60+300+5000) / (2500+200+60+300+5000 + 1500 + 30 +600 +300 +200)
Score = 0.75这意味着75%的资金被正确分配,目标是尽可能接近100%。
如果你也想考虑欺诈的数量,你只需要在每笔交易中增加和人为的惩罚(比如说100美元),这样你也可以对欺诈的数量进行评估,而不是最终的原始成本结果。
Score = ( 2600+300+160+400+5100) / (2600+300+160+400+5100 + 1600 + 130 +700 +400 +300)
Score = 0.73当试图降低大交易的重要性时,这个选项是有用的,有利于小交易(=考虑更多的小客户)。
您可以在这里找到有关成本敏感成本函数的更多信息:https://towardsdatascience.com/fraud-detection-with-cost-sensitive-machine-learning-24b8760d35d9
https://datascience.stackexchange.com/questions/111282
复制相似问题