F1 分数 vs ROC AUC

Posted

技术标签:

【中文标题】F1 分数 vs ROC AUC【英文标题】:F1 Score vs ROC AUC 【发布时间】:2017-10-25 14:40:34 【问题描述】:

我有以下两种不同情况的 F1 和 AUC 分数

模型 1:精度:85.11 召回率:99.04 F1:91.55 AUC:69.94

模型 2:精度:85.1 召回率:98.73 F1:91.41 AUC:71.69

我的问题的主要动机是正确预测正例,即减少假负例(FN)。我应该使用 F1 分数并选择模型 1 还是使用 AUC 并选择模型 2。谢谢

【问题讨论】:

这个答案可能会有所帮助:***.com/questions/34698161/… 遇到类似情况。对此有任何答案/提示吗? @Mohammadreza,如果你还在寻找,下面似乎有一个很好的答案。 【参考方案1】:

简介

根据经验,每次您想要比较 ROC AUCF1 分数 时,请考虑一下,就好像您在比较您的模型性能时基于:

[Sensitivity vs (1-Specificity)] VS [Precision vs Recall]

请注意,Sensitivity 是 Recall(它们是完全相同的指标)。

现在我们需要了解什么是:特异性、精确度和召回率(灵敏度)直观地


背景

特异性:由以下公式给出:

直观地说,如果我们有 100% 的特定模型,这意味着它确实没有漏掉任何真阴性,换句话说,有 NO 假阳性(即被错误地标记为阳性的阴性结果)。然而,存在大量假阴性的风险!

精度:由以下公式给出:

直观地说,如果我们有一个 100% 精确的模型,这意味着它可以捕捉所有真阳性但有 NO 假阳性。

召回:由以下公式给出:

直观地说,如果我们有一个 100% 召回的模型,这意味着它确实没有漏掉任何真阳性,换句话说,有 NO 假阴性(即被错误地标记为阴性的阳性结果)。然而,存在大量误报的风险!

如您所见,这三个概念非常接近!


根据经验,如果假阴性的成本很高,我们希望提高模型灵敏度和召回率(它们的公式完全相同)!。

例如,在欺诈检测或病人检测中,我们不想将欺诈交易(真阳性)标记/预测为非欺诈(假阴性)。此外,我们不想将具有传染性的病人(真阳性)标记/预测为没有生病(假阴性)。

这是因为后果会比误报(错误地将无害的交易标记为欺诈或将非传染性患者标记为具有传染性)更糟糕。

另一方面,如果 False Positive 的成本很高,那么我们希望提高模型的特异性和精度!。

例如,在垃圾邮件检测中,我们不想将非垃圾邮件(真阴性)标记/预测为垃圾邮件(假阳性)。另一方面,未能将垃圾邮件标记为垃圾邮件(假阴性)的成本更低。


F1 分数

由以下公式给出:

F1 分数在精确率和召回率之间保持平衡。如果类分布不均匀,我们会使用它,因为精度和召回率可能会产生误导性结果!

所以我们使用 F1 Score 作为 Precision 和 Recall Numbers 之间的比较指标!


受试者工作特征曲线下面积 (AUROC)

它比较敏感度和(1-特异性),换句话说,比较真阳性率和假阳性率。

所以,AUROC 越大,真阳性和真阴性之间的区别就越大!


AUROC vs F1 分数(结论)

一般来说,ROC 适用于许多不同级别的阈值,因此它有许多 F 分值。 F1 分数适用于 ROC 曲线上的任何特定点。

您可以将其视为在特定阈值下的精度和召回率的度量,而 AUC 是 ROC 曲线下的面积。 F 分数要高,准确率和召回率都应该高。

因此,当正负样本之间存在数据不平衡时,您应该始终使用 F1-score,因为 ROC 平均可能的阈值!


进一步阅读:

Credit Card Fraud: Handling highly imbalance classes and why Receiver Operating Characteristics Curve (ROC Curve) should not be used, and Precision/Recall curve should be preferred in highly imbalanced situations


【讨论】:

敏感度和召回率在this answer 中被认为是相同的,您对它们给出相同的解释,同时将它们描述为不同的概念。什么给了? @eddygeek 它可能是特异性与敏感性维度是一个统计概念,而召回与精度维度是一个信息工程概念。 @JoeyC:不,他在帖子中引用了 2 个完全相同的敏感度和召回率公式。 如果我通过设置 class_weight = 平衡来纠正不平衡(例如在逻辑回归中),仍然最好使用 F1 分数或 roc_auc 变得更可靠(因为我已经平衡了)?非常感谢【参考方案2】:

如果您查看定义,您可以发现 AUC 和 F1-score 都优化了“某事”以及标记为“阳性”的样本中实际为真阳性的部分。

这个“东西”是:

对于 AUC,特异性,即正确标记的阴性标记样本的分数。您没有查看正确标记的阳性标记样本的比例。 使用 F1 分数,它是精确度:正确标记的阳性标记样本的分数。并且使用 F1 分数,您不会考虑标记为阴性的样本的纯度(特异性)。

当您有高度不平衡或偏斜的类时,差异变得很重要:例如,真正的负数比真正的正数多得多。

假设您正在查看来自普通人群的数据以寻找患有罕见疾病的人。 “消极”的人比“积极”的人多得多,尝试使用 AUC 同时优化你在积极和消极样本上的表现并不是最优的。如果可能,您希望正样本包含所有正样本,并且您不希望它很大,因为误报率很高。所以在这种情况下,您使用 F1 分数。

相反,如果两个类都占您数据集的 50%,或者两者都占相当大的比例,并且您关心自己在识别每个类方面的表现,那么您应该使用 AUC,它针对两个类进行了优化,正面和否定的。

【讨论】:

【参考方案3】:

只需在此处添加我的 2 美分:

AUC 对样本进行隐式加权,而 F1 没有。

在我上一个比较药物对患者疗效的用例中,很容易知道哪些药物通常强效,哪些药物弱。最大的问题是你是否可以击中异常值(弱药的少数阳性或强药的少数阴性)。要回答这个问题,您必须使用 F1 专门权衡异常值,而无需使用 AUC。

【讨论】:

【参考方案4】:

正确预测阳性病例

你可以重写一点你的目标并得到:当一个案例真的是positive时,你也想把它归类为positive。此类事件的概率p(predicted_label = positive | true_label = positive) 定义为召回。如果你想最大化你的模型的这个属性,你会选择模型 1。

【讨论】:

以上是关于F1 分数 vs ROC AUC的主要内容,如果未能解决你的问题,请参考以下文章

如何计算具有 3 个类别的 ROC_AUC 分数

如何求CNN模型(keras)的ROC曲线和AUC分数

如何从积极的未标记学习中计算 roc auc 分数?

best_score_的gridsearch cv的AUC分数与gridsearch cv的最佳模型的auc_roc_score不同

为啥当我将 GridSearchCV 与 roc_auc 评分一起使用时,grid_search.score(X,y) 和 roc_auc_score(y, y_predict) 的分数不同?

在使用 5 折交叉验证时,在高度不平衡的数据中混淆 F1 分数和 AUC 分数