AUC 的两种算法:曲线下面积与「随机一对排对了」的概率

笔记 · · ROC · AUC

AUC 常被介绍成「ROC 曲线下的面积」,也常被介绍成「随机挑一个正样本和一个负样本,模型给正样本打分更高的概率」。这两句话说的是同一个数。这篇用 8 个样本把两种算法各算一遍,看它们为什么相等。

数据

4 个正样本的分数是 0.9、0.7、0.6、0.4,4 个负样本的分数是 0.8、0.6、0.3、0.2。注意 0.6 这个分数正负样本各有一个,后面会用到。把这 8 个样本载入计算台,可以边拖阈值边对照。

算法一:画出 ROC 曲线,求面积

把出现过的分数从高到低依次当作阈值,分数 ≥ 阈值的判为正类。每降一次阈值,就有一批样本从「判负」变成「判正」:正样本翻过来,TP 加一,曲线向上走 1/4;负样本翻过来,FP 加一,曲线向右走 1/4。

阈值新翻为正的样本TPFPTPR = TP/4FPR = FP/4
(起点)0000
0.9正 0.9100.250
0.8负 0.8110.250.25
0.7正 0.7210.50.25
0.6正 0.6、负 0.6320.750.5
0.4正 0.44210.5
0.3负 0.34310.75
0.2负 0.24411

把这些点依次连起来就是 ROC 曲线:

000.250.250.50.50.750.7511假正率 FPR召回率 TPR
8 个样本的 ROC 曲线,虚线是随机打分的参照。

曲线下面积按梯形法分段算:相邻两点之间的面积 = 横向宽度 × 两端高度的平均。竖直的段宽度为 0,没有面积,只剩四段:

从 → 到(FPR, TPR)平均高面积
(0, 0.25) → (0.25, 0.25)0.250.250.0625
(0.25, 0.5) → (0.5, 0.75)0.250.6250.15625
(0.5, 1) → (0.75, 1)0.2510.25
(0.75, 1) → (1, 1)0.2510.25

AUC = 0.0625 + 0.15625 + 0.25 + 0.25 = 0.71875

计算台算出来的是 0.7188,四舍五入到 4 位,一致。

算法二:数一数有多少对排对了

4 个正样本和 4 个负样本一共能配成 4 × 4 = 16 对。对每一对,正样本分数更高就算排对(记 1),更低算排错(记 0),相等记 0.5:

正样本 \ 负样本0.80.60.30.2小计
0.911114
0.701113
0.600.5112.5
0.400112

排对的比例 = (4 + 3 + 2.5 + 2) / 16 = 11.5 / 16 = 0.71875

和面积完全相同。

为什么两者相等

把 ROC 所在的单位正方形横向切成 4 列(每列对应一个负样本),纵向切成 4 行(每行对应一个正样本),一共 16 个小格,每格面积 1/16,正好对应 16 对正负样本。

曲线每向右走一步,就是某个负样本 q 被翻成了正类;此时曲线的高度等于「分数比 q 高、已经先翻过来的正样本个数」除以 4。所以这一列在曲线下面的小格数,恰好是「分数比 q 高的正样本个数」——也就是和 q 配对时排对了的对数。把所有列加起来,曲线下的小格总数就是排对的总对数,面积就是排对的比例。

同分的情况:阈值降到 0.6 时,正样本 0.6 和负样本 0.6 同时翻过来,曲线从 (0.25, 0.5) 斜着走到 (0.5, 0.75)。这一列里,斜线把 (0.5 → 0.75) 那个小格对半切开,下面只算半格——正好对应「同分记 0.5」。

由此能读出的几个性质

  • AUC 与阈值无关。它把所有阈值扫了一遍,只关心正负样本的相对排序。准确率、F1 这些都要先定一个阈值才能算。
  • 分数的具体大小不重要,顺序才重要。把所有分数平方、取对数,只要顺序不变,AUC 一点不变。所以 AUC 高不代表模型给出的概率准,概率准不准要另看校准
  • 0.5 是随机水平。随机打分时,每一对排对和排错的机会一样多;AUC 低于 0.5 说明排序整体反了。
  • 负样本很多时,AUC 可能显得乐观。每一对的权重相同,而绝大多数对是「正样本 vs 很容易排开的负样本」。这时同时看 PR 曲线和 AP 更能反映误报的情况。

本站测试里,两种算法在 300 组含大量同分的随机数据上逐一核对,差值都小于 10⁻¹²,见公式与约定