美文网首页
ROC vs. PRC

ROC vs. PRC

作者: 401a26360366 | 来源:发表于2017-11-30 10:29 被阅读0次

前言

评价二元分类器性能的指标,常见的有:Accuracy,ROC curve(Sensitivity + Specificity)、AUC、PR curve(Precision + Recall)、F1 score。

其中,主要的争论在于,评价模型时应该选用ROC(即Sensitivity + Specificity)还是PRC(即Precision + Recall)。

把知乎上「精确率、召回率、F1 值、ROC、AUC 各自的优缺点是什么?」 下的回答都看了一遍,有人偏向ROC,有人偏向PRC。

但有两点基本是统一的:

  • 对于不平衡数据,PRC很敏感;
  • 哪个指标更适合,需要就结合问题的实际情况讨论。

这篇文章简单讨论一下不同情况下Sensitivity(也即Recall)、Specificity和Precision的变化情况,和由此得之的ROC、PRC选择偏好。

先放结论:总体而言,如果只能二选一,我会选择ROC。

混淆矩阵 Confusion Matrix

先讲讲混淆矩阵。

混淆矩阵是用来总结一个分类器结果的矩阵。对于k元分类,它是一个k x k的表格,用来记录分类器的预测结果。

最常见的二元分类,它的混淆矩阵是一个2x2表:

01
  • TP:True Positive,预测分类为class 1、实际分类也为class 1的数据个数;
  • FN:False Negative,预测分类为class 0、实际分类为class 1的数据个数;
  • FP:False Positive,预测分类为class 1、实际分类为class 0的数据个数;
  • TN:True Negative,预测分类为class 0、实际分类也为class 0 的数据个数;

二元分类器的大多数指标都是上述TP、FN、FP、TN的排列组合运算。

这篇文章涉及到ROC和PRC下的三个指标:

  • Sensitivity = Recall = TP / (TP + FN)
  • Specificity = TN / (FP + TN)
  • Precision = TP / (TP + FP)

Sensitivity(Recall)指的是,真实的class 1被正确分类的比例。

Specificity指的是,真实的class 0被正确分类的比例。

Precision指的是,被分类为class 1的数据中,被判断正确的数据的比例。

简单实验

在实际工作中使用分类器做预测的时候,目的一般是为了识别class 1,比如识别一封邮件是否为垃圾邮件(是:1,否:0)。即,我们想要高Sensitivity(或高Recall)。

以下,我基于数据是否平衡,以及Recall和Specificity或高或低的不同情况(双低的情况就不讨论了),简单设计了相应的混淆矩阵,并计算了每种情况下的Recall值、Specificity值和Precision值,具体如图(请无视其中的F1 score):

02

在数据平衡的情况中,实际的class 1和class 0在数量上都为100。在数据不平衡的情况中,实际的class 1有20个、class 0有180个。

在数据平衡和不平衡的情况中,都有Recall和Specificity双高(0.8)、或二者中一个高(0.8)一个低(0.2)三种情况。Precision根据不同情况所得的混淆矩阵计算。

实验结果

通过比较上述六种情况下各指标的值可以发现:

  1. Precision受数据不平衡的影响很大。在Recall和Specificity相同的情况下,数据极度不平衡时的Precision比数据平衡时的低很多。
  2. 数据极度不平衡时,由于Precision一般不高,一味地追求Precision的高绝对值是不现实的,应该比较其相对值。
  3. Recall相同的情况下,Specificity升/降,Precision也会升/降,但Precision的变化幅度比Specificity小。 这也许说明,在保证Recall的情况下,通过看Specificity(即ROC)来比较不同模型性能,比看Precision(即PRC)要更有效。

场景应用

下面我通过两个不同的应用场景,来分析具体情况在应该选择ROC还是PRC。

1. 识别垃圾邮件(class 1重要,class 0同样重要)
  • Recall:垃圾邮件被正确识别出的概率

  • Specificity:普通邮件被正确识别出的概率

  • Precision:1 - 在被标为垃圾邮件的邮件中普通邮件被误判的概率

  • 期望:普通邮件不被误判,垃圾邮件能被识别。即,Precision高,Recall尽量高,Specificity最好也高。

乍看之下,在这个场景里PRC是更好的选择,因为我们对Precision和Recall的要求高。但结合上述实验结果可以发现,在Recall相同的情况下,无论数据是否平衡,Specificity和Precision变化方向总是相同的,但Precision的变化幅度比Specificity小。换言之,Recall不变的时候,看Specificity比看Precision要更容易对比模型优劣。因此,ROC是更好的选择。

2. 识别地震源(class 1比class 0重要得多)
  • Recall:地震源被正确识别出的概率

  • Specificity:非地震源被正确识别出的概率

  • Precision:1 - 在被标为地震源的数据中被误判的概率

  • 期望:地震源的识别准确率越高越好,宁可错杀一千不可放过一个。即,Recall越高越好,Precision最好别太低。

在这个场景下,数据显然是极度不平衡的 ,毕竟地震源很少,并且,我们希望Recall越高越好,即使出现误判,我们也不希望放过一个地震源。这个时候,无论是ROC还是PRC都是可选的。

总结

通过对上述两类应用场景的简单分析,可以发现,在选择ROC还是PRC上,要结合具体情况来考虑,但如果二者只能选其一,ROC是更保险的选择。

相关文章

网友评论

      本文标题:ROC vs. PRC

      本文链接:https://www.haomeiwen.com/subject/fgmubxtx.html