受试者工作特性(ROC)曲线是最常见的评价模型预测能力的方式之一,曲面下面积(AUC)越高则模型表现越好。除了 ROC 以外,还有一个相对少见但有时非常重要的评价方式,就是精度-召回率曲线(PRC),虽然同样是曲面下面积越高越好,其和 ROC 所考虑的评价指标不同,除了样子不同外,AUC 往往也不同。尽管在任意时刻使用 ROC 曲线评价模型无可厚非,但当数据不平衡时(常指阴性样本远大于阳性样本),ROC 往往会高估模型的质量,此时用 PRC 更为妥当。这种数据不平衡十分常见,比如临床中大多数受试者(以下称病人)是健康的,无论用哪种方法检测基本都呈阴性;又比如在药物设计领域,大多数小分子不会与蛋白相结合产生药效。

术语与公式

英文缩写 英文全称 中文意思
ROC receiver operating characteristics 受试者工作特性曲线
AUC area under curve 曲面下面积
PRC precision-recall curve 精度-召回率曲线
TP true positive 真阳性预测数量
FP false positive 假阳性预测数量
TN true negative 真阴性预测数量
FN false negative 假阴预测数量
SE sensitivity/recall 敏感度/召回率
SP specificity 特异性
TPR true positive rate 真阳性率,等于 SE
FPR false positive rate 假阳性率,等于 1-SP
PPV positive predictive value 等同于 precision(精度)

敏感、特异、召回都是相对于某个分类的,一般我们都认为是对阳性的敏感程度,对阳性样本的召回能力。而特异性其本质是对阴性样本的召回率。

$$ SE = \frac{TP}{TP+FN} $$

$$ SP = \frac{TN}{TN+FP} $$

$$ PPV = \frac{TP}{TP+FP} $$

基础概念与曲线的绘制

我们假设现在有 100 位病人,其中 50 位是有疾病的(下面称为患者),另外 50 位是健康的,此时我们有个检测手段,会给出一个打分,越高表示该患者越有可能患有这种疾病。现在这个打分的分布情况如下图所示。患者的打分普遍偏高一点,似乎是一个不错的检测手段,但若要量化它准确率如何,则需要定一个阈值,高于阈值认为是阳性。有了阈值我们就可以把所有样本归结为四种情况,如下表所示。
要想知道这个检测手段到底好不好,则需要绘制 ROC 曲线进行描述。

平衡样本

预测\真实 患者 健康
阳性 TP FP
阴性 FN TN

首先不同阈值下预测结果各不相同,比如如果把阈值设到最低,所有病人都是患者,那么敏感度极强, 为 1(因为所有患者都能检查出来),但特异性极差,为 0,因为所有健康病人都没有被排除(左图右上角)。同样可以把阈值设到最高,所有患者都认为是阴性的,则指标完全相反。不难发现随着阈值提高,越来越少的患者被检查出来,敏感度逐渐下降,但同时更多健康病人被排除,特异性逐渐上升,最终敏感度降到 0,特异性升到 1(左图左下角)这就绘制出如下的工作特性曲线。类似的,随着阈值的上升,敏感度降低的同时,精度也会相应发生改变,于是绘制出 PR 曲线。

ROC 曲线与 PR 曲

ROC 与 PRC 的区别

ROC 可以理解为敏感性随特异性降低而提高的变化趋势。PR 曲线则可以理解为精度随着敏感性升高而变化的趋势。
从下表可以看出 ROC 与 PRC 的异同点,大家都有敏感度(召回率),但另一个轴不同。我们甚至可以想象把 ROC 顺时针旋转 90 度(FPR会转换成SP),其长相和 PRC 会一样,所以可见两者的区别是一个更关注特异性,一个更关注精度。
这里要说明下敏感度提高,精度总体上是下降的,但并非单调(可见 PRC 曲线短期呈 Z 字型)。

曲线

X 轴

Y 轴

指标

公式

指标

公式

PRC

召回率

TP / (TP + FN)

精度

TP / (TP + FP)

ROC

特异性

FP / (FP + TN)

敏感性

TP / (TP + FN)

数据不平衡下的俩曲线变化

刚刚例子中数据是平衡的(50 阳性 50 阴性),但在实际的情况下往往阴性样本非常多,我们不妨在原来的数据基础上增加 400 个阴性样本,这样阴阳比例刚好达到 10:1。真实情况往往如下图所示,大多数的阴性样本十分容易识别,比如健康的患者压根没有任何症状仅仅怀疑自己患病,这样通过简单的检测就可以发现;又比如大多数化合物无法与靶蛋白进行有效结合,可能在一千个化合物中都很难发现有一个有活性的化合物(此活性仅仅是与蛋白有相互作用,其是否真能在体内有作用则又是另一回事)。

不平衡样本

此时如果我们仍然用 ROC进行判断这个模型怎么样,不难发现 AUC 将有明显增长,与原来相比在敏感性不变的情况下(可以认为是与原来的阈值一样,因为我们仅仅增加了阴性样本数量,并不改变阈值与敏感性的关系),特异性得到提高,曲线向左上偏移。但如何我们去比较 PR 曲线,则发现没有任何变化,因为这些真阴样本的增加并不会提高模型的预测精度,即同样的阈值下对假阳性预测没有变化。

新的 ROC 曲线与 PR 曲线

与其他评价指标的联系

从 ROC 与 PRC 的区别中我们能看出,ROC 的核心是敏感性和特异性。在我们用一个模型(或者某指标)预测病人是否患病时,希望这个模型有很高的敏感性,即大多数患者都能被这个指标检测出来,但同时又希望它具有较高的特异性以减少假阳性的出现。当数据不平衡,尤指阴性样本数特别多时,这个特异性可能会给我们一种错觉这个模型已经很好了,因为大多数阴性数据都没有被报假阳性。可若我们关注一下精度,即预测为阳性的样本中真阳性的比例,就不难发现其实模型并没有想象中那么好,比如每出现 10 个检测为阳性的样本,仅有 4 个病人真的是患者(假设我们定的阈值为了保证 90% 的敏感度。这样就意味着即使出现了阳性,医生也不敢说它一定得病,试想如果冠状病毒的核酸检测是这样的一个准确率,很多患者可能会喊冤了。

这也是为什么当数据不平衡时,可能我们要综合考虑更多评价指标,比如与 ROC 相似的有平衡准确率,即敏感度和特异性的均值,而与 PRC 类似的包括 F1 socre 和 Fowlkes-Mallows index,可以认为是敏感性和精度的(调和或几何)平均数。当然如果想要综合敏感度特异性和精度,则可以考虑马修斯相关系数(MCC)。

结语

尽管在真实的模型比较中,往往各个指标都可能会考虑其中,敏感性、精度、特异性也是大家常常会计算的指标,这些都是越大越好,其指标可解释都很好(相比于 MCC 值)。大家也往往会画 ROC 曲线,并计算 AUC 来判断自己模型的好坏,同样在模型选择时也是越大越好。这些都没有问题,也并非一定要绘制 PRC。只是当我们数据不平衡、阴性样本非常多且(往往)很容易预测时,要提醒自己只看 ROC 曲线可能会有种错觉认为当前的模型已经非常好了,其实精度并不一定高。这是为什么建议在数据不平衡时,关注 PR 曲线有利于更了解模型真实的情况,不能自欺欺人。

参考

  1. Precision-recall curves – what are they and how are they used?

  2. The Precision-Recall Plot Is More Informative than the ROC Plot When Evaluating Binary Classifiers on Imbalanced Datasets