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。
| 阈值 | 新翻为正的样本 | TP | FP | TPR = TP/4 | FPR = FP/4 |
|---|---|---|---|---|---|
| (起点) | — | 0 | 0 | 0 | 0 |
| 0.9 | 正 0.9 | 1 | 0 | 0.25 | 0 |
| 0.8 | 负 0.8 | 1 | 1 | 0.25 | 0.25 |
| 0.7 | 正 0.7 | 2 | 1 | 0.5 | 0.25 |
| 0.6 | 正 0.6、负 0.6 | 3 | 2 | 0.75 | 0.5 |
| 0.4 | 正 0.4 | 4 | 2 | 1 | 0.5 |
| 0.3 | 负 0.3 | 4 | 3 | 1 | 0.75 |
| 0.2 | 负 0.2 | 4 | 4 | 1 | 1 |
把这些点依次连起来就是 ROC 曲线:
曲线下面积按梯形法分段算:相邻两点之间的面积 = 横向宽度 × 两端高度的平均。竖直的段宽度为 0,没有面积,只剩四段:
| 从 → 到(FPR, TPR) | 宽 | 平均高 | 面积 |
|---|---|---|---|
| (0, 0.25) → (0.25, 0.25) | 0.25 | 0.25 | 0.0625 |
| (0.25, 0.5) → (0.5, 0.75) | 0.25 | 0.625 | 0.15625 |
| (0.5, 1) → (0.75, 1) | 0.25 | 1 | 0.25 |
| (0.75, 1) → (1, 1) | 0.25 | 1 | 0.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.8 | 0.6 | 0.3 | 0.2 | 小计 |
|---|---|---|---|---|---|
| 0.9 | 1 | 1 | 1 | 1 | 4 |
| 0.7 | 0 | 1 | 1 | 1 | 3 |
| 0.6 | 0 | 0.5 | 1 | 1 | 2.5 |
| 0.4 | 0 | 0 | 1 | 1 | 2 |
排对的比例 = (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⁻¹²,见公式与约定。