F1分数与ROC AUC

66

我有两种不同情况下的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。谢谢。


2
这个答案可能会有所帮助:https://dev59.com/aVsW5IYBdhLWcg3wsY5P - Dan Hicks
遇到了类似的情况。有关于此的任何答案/提示吗? - Mohammadreza
2
@Mohammadreza,如果你还在寻找答案,下面似乎有一个非常好的答案。 - JoeyC
4个回答

130

介绍

一般而言,每当你想比较 ROC AUCF1 Score 时,可以将其看作是基于以下模型性能的比较:

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

请注意敏感度和召回率是相同的指标。

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


背景

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

specificity formula

Intuitively speaking, 如果我们拥有100%的特定模型,那意味着它没有错过任何True Negative,换句话说,就没有False Positives(即被错误标记为阳性的负面结果)。然而,存在大量False Negatives的风险!
Precision:由以下公式给出:Precision Formula 直观地说,如果我们有一个100%精确的模型,那意味着它可以捕捉到所有True Positive,但没有False Positive。
Recall:由以下公式给出:

Recall Formula

直观来说,如果我们有一个100%的召回率模型,那就意味着它没有漏掉任何真正的阳性,换句话说,没有假阴性(即被错误标记为阴性的阳性结果)。然而,存在大量的假阳性风险!
如您所见,这三个概念非常相似!

f1 score


作为经验法则,如果假阴性的成本很高,我们希望提高模型的灵敏度和召回率(它们在公式上完全相同)!
例如,在欺诈检测或病人检测中,我们不希望将欺诈交易(真正阳性)标记/预测为非欺诈交易(假阴性)。同样,我们也不希望将有传染病的病人(真正阳性)标记/预测为没有病(假阴性)。
这是因为后果比假阳性更严重(错误地将无害交易标记为欺诈交易或将非传染病患者标记为传染病患者)。
另一方面,如果假阳性的成本很高,那么我们希望提高模型的特异性和精确度!
例如,在电子邮件垃圾邮件检测中,我们不希望将非垃圾邮件(真负)标记/预测为垃圾邮件(假阳性)。另一方面,未能将垃圾邮件标记为垃圾邮件(假阴性)的代价较小。

F1分数

它由以下公式给出:

F1 Score Formula

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

因此,我们使用F1分数作为精确度和召回率数字之间的比较指标!


接收者操作特征曲线下面积(AUROC)

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

area under the curve

因此,AUROC越大,真正阳性和真正阴性之间的区别就越大!


AUROC与F1分数(结论)

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

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

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


进一步阅读:

信用卡欺诈:如何处理高度不平衡的类别,以及为什么不应该使用接收器操作特性曲线(ROC曲线),而应该在高度不平衡的情况下优先使用精确率/召回率曲线



8
这个答案中,敏感度和召回率被认为是相同的,并且您在将它们列为不同的概念时给出了相同的解释。为什么会这样? - eddygeek
4
可能是这样,针对特异度和敏感度的维度是一个统计概念,而针对召回率和精确度的维度则是一个信息工程概念。 - JoeyC
@JoeyC:不,他在帖子中引用了两个完全相同的灵敏度和召回率公式。 - SiXUlm
如果我通过设置class_weight = balanced来纠正不平衡问题(例如在逻辑回归中),是否仍然最好使用F1分数或roc_auc变得更加可靠(因为我已经平衡了)?非常感谢。 - Luigi87

11

如果你看定义,你会发现AUC和F1-score都优化了与被标记为“正例”的样本实际上是真正的正例的比例一起的某些东西。

这个“某些东西”分别是:

  • AUC优化的是特异度,即被负标记的样本中被正确标记的比例。你不是在看你的正标记样本被正确标记的比例。
  • F1-score使用的是精确度:被正标记样本中被正确标记的比例。而使用F1-score时不考虑负标记样本的纯度(特异度)。

当你拥有高度不平衡或偏斜的分类时,这个差异变得重要:例如,真负样例会比真正正例多很多。

假设您正在查看来自普通人群的数据,以查找患有罕见疾病的人。负面人数比正面人数多得多,尝试同时优化你在正样本和负样本上的表现,使用AUC并不是最优选择。你希望尽可能地让正样本包含所有的正例,而不想让它过大,因为会有较高的假阳性率。因此,在这种情况下,你使用F1-score。

相反地,如果两个类在数据集中各占50%,或者两个类的比例都很大,并且您关心同等识别每个类的表现,则应该使用AUC,它优化了正类和负类,以达到更好的性能。


2

我想在这里加入我的两分钱:

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

在我上一个使用案例中,比较药物对患者的有效性很容易了解哪些药物通常较强,哪些药物较弱。重点是是否能够针对异常值(弱药物的少数阳性结果或强药物的少数阴性结果)进行研究。为了回答这个问题,你需要使用F1来具体衡量异常值,而AUC则不需要。


0
可以稍微修改一下你的目标,得到:当一个案例真正是“阳性”时,你希望将其分类为“阳性”。这种事件发生的概率 p(predicted_label = positive | true_label = positive) 就是召回率。如果你想最大化模型的这个属性,你应该选择模型1。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接