ROC曲线和PR曲线都是常用的性能评价指标,但是为什么有了其中一个还要有另一个呢?他们能表达出什么不同的信息吗,他们有什么联系和区别呢?什么时候用哪个呢?
为什么ROC曲线不受样本不均衡问题的影响
对于PR曲线,它是精确率(precision,简称P)和召回率(Recall,简称R)的关系曲线,计算式如下:
对于ROC曲线,它是“真正例率”(True Positive Rate, 简称TPR),横轴是“假正例率”(False Positive Rate,简称FPR)的关系曲线,计算式如下:
因为ROC曲线计算的TPR/FPR,真正例率和假正例率(1-特异性),只关注实际上的正例/负例的,不关注其他类别的变化
从公式(2)和表中可以看出,TPR考虑的是第一行,实际都是正例,FPR考虑的是第二行,实际都是负例。因此,在正负样本数量不均衡的时候,比如负样本的数量增加到原来的10倍,那TPR不受影响,FPR的各项也是成比例的增加,并不会有太大的变化。因此,在样本不均衡的情况下,同样ROC曲线仍然能较好地评价分类器的性能,这是ROC的一个优良特性,也是为什么一般ROC曲线使用更多的原因。
而看公式(1)和表,精确率P考虑的是第一列,实际中包括正例和负例,因此,正负样本数量的变化会引起该值的变化,进而影响PR曲线对分类器的评价。
那么对样本不均衡不敏感就一定好吗?
如果对样本不均衡不敏感,体现的是指标的robust,但恰恰有可能因为指标的robust使得我们看不见classifier的weakness
ROC曲线的缺点
上文提到ROC曲线的优点是不会随着类别分布的改变而改变,但这在某种程度上也是其缺点。因为负例N增加了很多,而曲线却没变,这等于产生了大量FP。像信息检索中如果主要关心正例的预测准确性的话,这就不可接受了。
在类别不平衡的背景下,负例的数目众多致使FPR的增长不明显,导致ROC曲线呈现一个过分乐观的效果估计。ROC曲线的横轴采用FPR,根据FPR = FPNFPN = FPFP+TNFPFP+TN,当负例N的数量远超正例P时,FP的大幅增长只能换来FPR的微小改变。结果是虽然大量负例被错判成正例,在ROC曲线上却无法直观地看出来。(当然也可以只分析ROC曲线左边一小段)
举个例子,假设一个数据集有正例20,负例10000,开始时有20个负例被错判,FPR=2020+9980=0.002FPR=2020+9980=0.002,接着又有20个负例错判,FPR2=4040+9960=0.004FPR2=4040+9960=0.004,在ROC曲线上这个变化是很细微的。而与此同时Precision则从原来的0.5下降到了0.33,在PR曲线上将会是一个大幅下降。
所以,
如果是balanced dataset,
ROC和PR曲线都可以
如果是imbalanced dataset,
如果是正例少,负例多:
如果在乎正例的准确率,同时在乎负例的准确率,
比如识别出一千张图像中的猫和狗,就用ROC曲线
如果只在乎正例的准确率,不care true negative,
比如识别出一千张图像中的癌症和非癌症,就用PR曲线
如果是正例多,负例少:
就用ROC,直观,简单
相关讨论
一篇论文:Davis, Jesse, and Mark Goadrich. “The relationship between Precision-Recall and ROC curves.” Proceedings of the 23rd International Conference on Machine Learning (ICML). ACM, 2006. https://minds.wisconsin.edu/bitstream/handle/1793/60482/TR1551.pdf
精确率、召回率、F1 值、ROC、AUC 各自的优缺点是什么? - 知乎 https://www.zhihu.com/question/30643044/answer/64151574
非常好的动图演示:
终于搞懂了PR曲线 - yfor的文章 - 知乎 https://zhuanlan.zhihu.com/p/404798546
以及为什么PR曲线可能出现诡异的骤减 ↑
相互关系
ROC与PR对不均衡数据集的效果
一个讨论:
https://www.kaggle.com/general/7517
比较详细的讨论和验证:
总结的使用场景
ROC曲线由于兼顾正例与负例,所以适用于评估分类器的整体性能,相比而言PR曲线完全聚焦于正例。
如果有多份数据且存在不同的类别分布,比如信用卡欺诈问题中每个月正例和负例的比例可能都不相同,这时候如果只想单纯地比较分类器的性能且剔除类别分布改变的影响,则ROC曲线比较适合,因为类别分布改变可能使得PR曲线发生变化时好时坏,这种时候难以进行模型比较;反之,如果想测试不同类别分布下对分类器的性能的影响,则PR曲线比较适合。
如果想要评估在相同的类别分布下正例的预测情况,则宜选PR曲线。
类别不平衡问题中,ROC曲线通常会给出一个乐观的效果估计,所以大部分时候还是PR曲线更好。
最后可以根据具体的应用,在曲线上找到最优的点,得到相对应的precision,recall,f1 score等指标,去调整模型的阈值,从而得到一个符合具体应用的模型。
https://wrong.wang/blog/20190223-reid%E4%BB%BB%E5%8A%A1%E4%B8%AD%E7%9A%84cmc%E5%92%8Cmap/)