更新于 2026年10月15日 全文 2355 字未阅读

ROC 与 AUC#

在上一节内容中介绍的那些模型指标,准确率、精确率等,都是在某个固定分类阈值下计算而来的,但如果你想评估一个模型在所有可能阈值下的整体表现,就需要换一套不同的工具了。下面我们来介绍两种常见的方法,ROC 和 AUC 曲线。


ROC 曲线#

ROC 曲线(Receiver-Operating Characteristic Curve,受试者工作特征曲线)是模型在所有阈值下效果表现的一种可视化方式。它的全称「受试者工作特征」这个名字源自二战时期的雷达检测,是一个历史遗留的称呼。

ROC 曲线的画法是这样的:在每一个可能的阈值下(实际中通常以固定步长选取阈值)算出真正例率(Recall / TPR) 与假正例率(FPR),再以 TPR 为纵轴、FPR 为横轴,然后再把这些点连成一条曲线,这便是 ROC 曲线。一个完美模型——在某个阈值下能做到 TPR = 1.0、FPR = 0.0——既可以仅用 (0, 1) 这一个点来表示(如果忽略其他阈值的话),也可以用下图所示的曲线来刻画:

完美模型的 ROC 与 AUC 示意图:从 (0,1) 到 (1,1) 的曲线
图 1. 一个理论完美模型的 ROC 与 AUC

曲线下面积:AUC#

AUC(Area Under the ROC Curve,ROC 曲线下面积) 表示的是这样一个概率:如果随机选取一个正例和一个负例,模型把正例排在负例之前的概率有多大。

前面那个完美模型,在 ROC 曲线下方恰好构成一个边长为 1 的正方形,AUC 等于 1.0。也就是说,模型有 100% 的概率会把一个随机选取的正例排在随机选取的负例之前。换一种更直观的说法,看下图的数据散点分布,AUC 衡量的就是模型把随机方块放到随机圆点右侧的概率,而这个概率与阈值具体怎么设是无关的。

AUC=1.0 的散点分布示意:所有正例(方块)都排在所有负例(圆点)右侧
图 2. 一个二分类模型预测结果的散点分布。AUC 就是随机选取的方块位于随机圆点右侧的概率

更具体地说,一个 AUC 等于 1.0 的垃圾邮件分类器,对任何一封随机选取的垃圾邮件都会打出比对正常邮件更高的「垃圾邮件概率」。至于每封邮件最终被分到哪一类,则取决于你设定的分类阈值。

对于一个二分类器来说,如果它的表现只和随机猜测(抛硬币)相当,那么它的 ROC 就是一条从 (0, 0) 到 (1, 1) 的对角直线,AUC 等于 0.5——也就是说,正确排序一对随机正例和负例的概率只有 50%。

随机猜测的 ROC:从 (0,0) 到 (1,1) 的对角线
图 3. 完全随机猜测时的 ROC 与 AUC

回到垃圾邮件分类器的例子,一个 AUC 等于 0.5 的分类器,也就意味着仅在一半的时间里会为一封随机垃圾邮件打出比随机正常邮件更高的「垃圾邮件概率」。

精确率 - 召回率曲线(Precision-Recall Curve, PRC)[进阶可选]

当数据集类别大致均衡时,AUC 与 ROC 在模型对比上效果都很好。但当数据集不均衡时,精确率 - 召回率曲线(PR Curve, PRC)以及它下方的面积,往往能给出更合适的对比可视化效果。PR 曲线的画法是:在所有阈值下,以精确率(Precision)为纵轴、召回率(Recall)为横轴绘制。

精确率 - 召回率曲线示例:从 (0,1) 到 (1,0) 的下凸曲线

用 AUC 与 ROC 选择模型和阈值#

只要数据集大致均衡,AUC 就是比较两个不同模型表现非常实用的指标——曲线下面积更大的模型通常更好。

AUC=0.65 的 ROC 曲线 AUC=0.93 的 ROC 曲线
图 4. 两个理论模型的 ROC 与 AUC。右侧那条曲线 AUC 更大,代表两者中更好的模型

一条 ROC 曲线上最接近 (0, 1) 的那些点,对应着该模型一系列最佳阈值所在的位置(例如图4(右)中左上角区域)。正如前面 分类阈值与混淆矩阵 和 指标的选择与权衡 两节内容所讨论的,具体选择哪个阈值,取决于具体业务场景中最看重哪一项指标。下图把 A、B、C 三点对应的三个阈值标了出来:

ROC 曲线上三个阈值点 A、B、C 的示意
图 5. 三个标记出的点分别代表三个不同的阈值

如果假正例(误报)的代价很高,那么选择一个 FPR 更低的阈值会更合适——比如图 5 中的 A 点——即使 TPR 也会随之降低。反过来,如果假正例的代价很低,而假负例(漏报真实正例)代价很高,那么选择 C 点对应的阈值(最大化 TPR)可能更合适。如果两者的代价大致相当,B 点通常能在 TPR 与 FPR 之间提供最好的平衡。

下面是我们在前面章节见过的那份数据所对应的 ROC 曲线:

巩固理解#

  1. 真实数据画出的 ROC 曲线,远没有上面那些示意图那么规整。下列哪一个模型(以其 ROC 曲线和 AUC 表示)的表现最好?

    • A.
    曲线先向右凸再向上,AUC 远小于 0.5
    • B.
    曲线接近 (0, 0) 到 (1, 1) 的直线,仅有少量锯齿
    • C.
    曲线在 (0, 0) 到 (1, 1) 之间呈上下锯齿状
    • D.
    曲线向上凸后再向右
  2. 下列哪一个模型的表现差于随机猜测?

    • A.
    曲线先向右凸再向上
    • B.
    垂直 + 水平两段折线
    • C.
    直线
    • D.
    接近直线并有少量锯齿
  3. 对于上一题中那个「差于随机」的模型,做下列哪一种改动可以让它的表现好于随机?

    • A. 反转预测结果,把预测为 1 的改为 0、把预测为 0 的改为 1

    • B. 让模型始终预测为负类;

    • C. 让模型始终预测为正类。

  4. 想象这样一个场景:让少量垃圾邮件进入收件箱,比把一封重要的商务邮件丢进垃圾邮件文件夹要好。你为这种场景训练了一个垃圾邮件分类器,正类是垃圾邮件,负类是正常邮件。下列哪一个 ROC 曲线上的点是更好的选择?

    接近直线并有少量锯齿
    • A. 点 A 处;

    • B. 点 B 处;

    • C. 点 C 处。

关键术语:

  • AUC(Area Under the ROC Curve,ROC 曲线下面积)
  • ROC 曲线(Receiver-Operating Characteristic Curve,受试者工作特征曲线)

小结

  • ROC 曲线把真正例率(TPR / Recall)与假正例率(FPR)随阈值变化的关系画在同一张二维图上,让模型在「所有阈值」下的整体表现一目了然。
  • AUC 的取值在 0 到 1 之间,含义是「随机选取的正例被模型排在负例之前的概率」。AUC = 1 代表完美模型,AUC = 0.5 代表与随机猜测无异,AUC < 0.5 反而比随机还差(只需把预测类别反过来就能立刻反转)。
  • 在类别大致均衡时,ROC/AUC 是对比模型的强有力工具;遇到严重不均衡数据集,可以改用 PR 曲线(PRC)与精确率 - 召回率曲线下面积。
  • 最佳阈值通常落在 ROC 曲线最接近 (0, 1) 的那段凸边上;具体选 A、B、C 中的哪一个,取决于业务上假正例与假负例的代价 对比:误报代价高选 A,漏报代价高选 C,代价相当选 B。
阅读 --