准确率、ROC 与 AUC

准确率、ROC 与 AUC

Jackknifer
Jackknifer 博主

评估分类、推荐或流量预测模型时,往往需要同时查看几个指标。一个模型的 Accuracy 很高,仍可能找不到目标用户;整体排序表现良好,前几条推荐也可能不够理想。

下面用电影点击预测的例子,说明真实标签、预测得分和分类阈值怎样影响评价指标。分类与排序部分包括 Precision、Recall、Top-K、F1、ROC 和 AUC,回归部分讨论 RMSE、MAE 和 MAPE。

1. 从分类结果建立混淆矩阵

1.1 真实标签与预测结果

假设推荐系统需要预测用户是否点击电影。把“发生点击”定义为正样本,标签为 1;把“曝光后没有点击”定义为负样本,标签为 0。每条交互记录都包含一个真实标签和一个模型输出的预测得分。

模型给出点击得分后,还可以选择阈值 t,将得分转换为预测类别:

y^={1,s(x)≥t,0,s(x)<t.\hat y = \begin{cases} 1,&s(x)\ge t,\\ 0,&s(x)<t. \end{cases}

其中,s(x) 表示模型对样本 x 给出的正类得分。如果分数已完成概率校准,也可以将它解释为预测概率。

1.2 TP、FP、FN、TN

真实情况 预测为正类 预测为负类
真实正样本 TP:真正例,正确找出 FN:假负例,遗漏
真实负样本 FP:假正例,错误纳入 TN:真负例,正确排除

例如,200 条电影点击记录中,TP = 40、FP = 10、FN = 20、TN = 130。正样本总数为 60,负样本总数为 140,全部记录共 200 条。后续分类指标都可以由这四个数量计算。

2. Accuracy 为什么会产生误导?

准确率(Accuracy)表示预测类别正确的样本占全部样本的比例。

Accuracy=TP+TNTP+FP+FN+TN.\mathrm{Accuracy}=\frac{TP+TN}{TP+FP+FN+TN}.

对于上面的 200 条记录:

Accuracy=40+130200=85%.\mathrm{Accuracy}=\frac{40+130}{200}=85\%.

这一指标易于理解,但在类别极度不均衡时需要谨慎使用。

2.1 类别不均衡时的准确率

假设有 10,000 名用户,其中只有 100 人属于某种目标人群,其余 9,900 人均为负样本。模型将全部用户预测为负样本,那么:

TP=0,FN=100,FP=0,TN=9900.TP=0,\quad FN=100,\quad FP=0,\quad TN=9900. Accuracy=990010000=99%.\mathrm{Accuracy}=\frac{9900}{10000}=99\%.

准确率达到 99%,模型却没有识别出任何一个目标用户。原因是大量负样本主导了准确率的计算。此时必须进一步检查模型对正样本的识别情况。

2.2 高准确率仍可能产生大量无效推荐

同样是在 10,000 名用户中,假设 TP = 40、FP = 60、FN = 60、TN = 9,840:

Accuracy=40+984010000=98.8%.\mathrm{Accuracy}=\frac{40+9840}{10000}=98.8\%.

模型判定的 100 名目标用户里,真正符合目标的只有 40 人。对于需要向预测正类投放广告的场景,这个结果需要进一步检查 Precision。

3. Precision 与 Recall 衡量什么?

3.1 Precision:推荐出来的有多少真正相关?

精确率(Precision)的定义:

Precision=TPTP+FP.\mathrm{Precision}=\frac{TP}{TP+FP}.

例如,系统判定 100 人会点击,其中 40 人真的点击,那么 Precision = 40%。它回答的是:所有被选中的对象中,有多少确实符合目标?

3.2 Recall:真正相关的找到了多少?

召回率(Recall)的定义:

Recall=TPTP+FN.\mathrm{Recall}=\frac{TP}{TP+FN}.

如果真实会点击的用户共有 100 人,模型找到了 40 人,那么 Recall = 40%。它回答的是:全部符合目标的对象中,有多少被模型找到?

3.3 什么是“相关电影”?

相关电影(Relevant Movie)表示对当前用户及当前任务而言,被标记为符合目标的电影。不同任务会使用不同的判断依据。

  • 在点击预测任务中,可以把发生点击的曝光记录定义为正样本。
  • 在评分推荐任务中,可以规定评分达到 4 星的电影为相关电影。
  • 在搜索任务中,相关性由电影是否符合用户的搜索意图决定。

没有点击或没有评分的电影,未必意味着用户不喜欢。没有被观察到的反馈应与明确的负面反馈加以区分。

例如,评估集合中有 20 部已知相关电影,系统推荐了 10 部,其中 8 部相关:

Precision=810=80%,Recall=820=40%.\mathrm{Precision}=\frac{8}{10}=80\%,\qquad \mathrm{Recall}=\frac{8}{20}=40\%.

可以看到,前者衡量已推荐电影的相关程度,后者衡量全部已知相关电影的覆盖程度。

3.4 为什么调整阈值会改变这两个指标?

若模型只有在得分很高时才判定正类,通常可以获得较高的 Precision,但可能遗漏较多正样本。降低阈值能纳入更多记录,Recall 不会下降,但也可能纳入更多负样本,影响 Precision。

随着阈值降低,Recall 不会下降;Precision 可以上升,也可以下降。 Precision 的变化取决于新纳入样本的真实标签。

交互演示:改变分类阈值,实时计算指标与曲线

单独打开调整 20 个真实标签与预测得分的分类截断位置,观察 Accuracy、Precision、Recall、TPR、FPR 和 ROC、P-R 曲线。

在演示中,绿色方块代表真实正样本,红色方块代表真实负样本。调整滑块后,当前分类阈值、混淆矩阵和两个曲线上的位置将同步更新。博客页面提供“单独打开”入口。

4. Top-K 指标如何用于电影推荐?

推荐系统通常会显示一个有序列表,例如排名前 5 或前 10 的电影。因此,还需要关心最前面 K 个位置的质量。

4.1 Precision@K

Precision@K=前 K 个位置中的相关电影数K.\mathrm{Precision@K}= \frac{\text{前 K 个位置中的相关电影数}}{K}.

假设前 5 部电影中有 4 部相关:

Precision@5=45=80%.\mathrm{Precision@5}=\frac45=80\%.

4.2 Recall@K

Recall@K=前 K 个位置中的相关电影数评估集合中全部相关电影数.\mathrm{Recall@K}= \frac{\text{前 K 个位置中的相关电影数}}{\text{评估集合中全部相关电影数}}.

如果评估集合中共有 20 部相关电影,前 5 部包含其中 4 部:

Recall@5=420=20%.\mathrm{Recall@5}=\frac4{20}=20\%.
指标 Top 5 Top 10
Precision@K 80% 70%
Recall@K 20% 35%

表格对应的示例中,前 10 部电影有 7 部相关,评估集合仍有 20 部相关电影。

4.3 前五个结果与全部相关结果

假设数据库中有 100 部符合搜索要求的电影,系统前 5 个结果全部相关。那么 Precision@5 = 100%,Recall@5 只有 5%。

相关结果可能还在列表后方,也可能根本没有进入候选集合。排查时,需要分别检查候选召回阶段和后续排序阶段:只有进入候选集合的电影,才有机会被排序模型展示。

5. P-R 曲线与 F1

5.1 P-R 曲线

P-R 曲线(Precision-Recall Curve,精确率-召回率曲线)的横轴为 Recall,纵轴为 Precision。通过不断改变分类阈值,计算每个阈值下的 Precision 与 Recall,就可以连接得到整条曲线。

曲线上每个点都是一组精确率和召回率,因此单独观察一个点只能了解某一阈值下的表现。分析整条曲线,可以了解模型在不同召回要求下的结果质量。

5.2 F1:兼顾 Precision 与 Recall

F1 Score 是精确率和召回率的调和平均数。

F1=2PRP+R=2TP2TP+FP+FN,F_1=\frac{2PR}{P+R}=\frac{2TP}{2TP+FP+FN},

其中 P 表示 Precision,R 表示 Recall。在分母非零的前提下:

P=0.8,R=0.4⟹F1=2×0.8×0.40.8+0.4≈0.5333.P=0.8,\quad R=0.4 \quad\Longrightarrow\quad F_1=\frac{2\times0.8\times0.4}{0.8+0.4} \approx0.5333.

当 Precision 与 Recall 其中一个较小时,F1 会受到明显影响。实际使用时,还需要考虑不同错误类型造成的影响是否相同。

6. ROC 曲线的两个坐标

ROC 是 Receiver Operating Characteristic 的缩写,中文称为受试者工作特征曲线。ROC 的横轴为 FPR,纵轴为 TPR。

6.1 真阳性率 TPR

TPR=TPTP+FN=Recall.\mathrm{TPR}=\frac{TP}{TP+FN}=\mathrm{Recall}.

TPR 表示全部真实正样本中被正确找出的比例。例如 100 条正样本找出 80 条,TPR = 0.8。

6.2 假阳性率 FPR

FPR=FPFP+TN.\mathrm{FPR}=\frac{FP}{FP+TN}.

FPR 表示全部真实负样本中被误判为正类的比例。例如 200 条真实负样本中误判 40 条,FPR = 0.2。

要特别区分 Precision 和 FPR 的分母:

Precision=TPTP+FP,FPR=FPFP+TN.\mathrm{Precision}=\frac{TP}{TP+FP}, \qquad \mathrm{FPR}=\frac{FP}{FP+TN}.

Precision 的分母是被预测为正类的数量;FPR 的分母是真实负样本数量。

6.3 为什么 ROC 曲线从 (0,0) 走到 (1,1)?

分类阈值高于全部模型得分时,所有记录都被预测为负类,TP = FP = 0,因而起点是 (0,0)。

随着阈值降低,更多样本被判定为正类:遇到真实正样本,TPR 增加;遇到真实负样本,FPR 增加。当全部样本都被判定为正类,TPR = FPR = 1,得到终点 (1,1)。

对于 P 个正样本、N 个负样本:

ΔTPR=1P(每纳入一个正样本),\Delta \mathrm{TPR}=\frac1P\quad(\text{每纳入一个正样本}), ΔFPR=1N(每纳入一个负样本).\Delta \mathrm{FPR}=\frac1N\quad(\text{每纳入一个负样本}).

因此可以把 ROC 曲线看成一条从左下角开始、不断向上或向右移动的路径。如果多个样本得分相同,应作为同一组进入预测正类。

7. AUC:曲线下面积与排序概率

AUC(Area Under the Curve)在这里指 ROC 曲线下面积,即 ROC-AUC。

7.1 面积定义

把 ROC 曲线表示为 TPR 关于 FPR 的函数时:

AUC=∫01TPR(u) du.\mathrm{AUC}=\int_0^1 \mathrm{TPR}(u)\,du.

AUC 的取值范围为 0~1。AUC = 1 表示正负样本完全正确排序;AUC = 0.5 对应随机排序的期望水平;AUC 小于 0.5 表示存在较多反向排序。

7.2 为什么 AUC 可以解释为正负样本排序概率?

从正样本中随机抽取一个,得分记为 s⁺;从负样本中随机抽取一个,得分记为 s⁻。模型希望正样本得分更高。

AUC=P(s+>s−)+12P(s+=s−).\mathrm{AUC} =P(s^+>s^-)+\frac12P(s^+=s^-).

当两者得分没有相同值时:

AUC=P(s+>s−).\mathrm{AUC}=P(s^+>s^-).

例如 AUC = 0.8,表示随机选择一个正样本与一个负样本,正样本得分更高的概率为 80%(相同得分按半次计)。

7.3 四个样本的计算例子

样本 真实类别 模型得分
A 正 0.9
B 正 0.4
C 负 0.8
D 负 0.3

正样本共 2 个,负样本共 2 个,一共构成 4 组正负配对:A-C、A-D、B-C 和 B-D。

其中 A-C、A-D、B-D 的正样本得分更高,共计 3 组。因此:

AUC=32×2=0.75.\mathrm{AUC}=\frac3{2\times2}=0.75.

同样,按得分排序为 A、C、B、D。ROC 路径依次经过:

(0,0)→(0,0.5)→(0.5,0.5)→(0.5,1)→(1,1).(0,0)\rightarrow(0,0.5)\rightarrow(0.5,0.5) \rightarrow(0.5,1)\rightarrow(1,1).

曲线下面可以看出两个矩形,面积分别为 0.25 和 0.50:

AUC=0.5×0.5+0.5×1=0.75.\mathrm{AUC}=0.5\times0.5+0.5\times1=0.75.

交互演示:正负样本配对与 ROC 面积同步变化

单独打开调整正样本 B 与负样本 C 的得分,查看四组配对的正确情况、得分相同的处理,以及曲线下面积的实时变化。

建议把 B 和 C 调整到相同得分。此时可以看到,得分相同的一对按照 0.5 计算。再观察 ROC 曲线的变化,验证两种算法给出相同的 AUC。

7.4 从 ROC 的水平移动推导配对公式

现在考虑 P 个正样本和 N 个负样本。将全部样本按照得分从高到低排序。

假设遇到某个负样本之前,已经经过了 k 个正样本。此时:

TPR=kP.\mathrm{TPR}=\frac{k}{P}.

当前这个负样本让 FPR 增加 1/N,于是对应的矩形面积为:

ΔS=TPR×ΔFPR=kP×1N=kPN.\Delta S=\mathrm{TPR}\times\Delta\mathrm{FPR} =\frac{k}{P}\times\frac1N =\frac{k}{PN}.

这里 k 表示有 k 个正样本得分高于当前负样本,因此这 k 组正负样本的排序正确。

对全部负样本累加:

AUC=∑j=1NkjPN.\boxed{\mathrm{AUC}=\frac{\sum_{j=1}^{N}k_j}{PN}}.

这便建立了两个计算方法之间的联系:每一次 ROC 水平移动对应的面积,等于当前负样本带来的正确配对数量除以全部正负样本配对数量。 有相同得分时,按半次正确处理,并在 ROC 上按相同得分组计算梯形面积。

7.5 一般 ROC 曲线如何计算面积?

用一系列 ROC 坐标 ((FPR_i,TPR_i)) 近似计算面积时,可以使用梯形公式:

AUC=∑i=1m−1(FPRi+1−FPRi)TPRi+1+TPRi2.\mathrm{AUC} =\sum_{i=1}^{m-1} (FPR_{i+1}-FPR_i)\frac{TPR_{i+1}+TPR_i}{2}.

只要坐标依照阈值降低的顺序排列,且包括两端点,便可计算对应折线下的面积。

7.6 对 20 个样本计算 AUC

考虑 20 条得分互不相同的点击预测记录,其中正样本 10 条、负样本 10 条。按得分从高到低,10 个正样本得分依次为:

0.90, 0.80, 0.60, 0.55, 0.54, 0.51, 0.40, 0.38, 0.34, 0.30.0.90,\ 0.80,\ 0.60,\ 0.55,\ 0.54,\ 0.51,\ 0.40,\ 0.38,\ 0.34,\ 0.30.

负样本得分依次为:

0.70, 0.53, 0.52, 0.505, 0.39, 0.37, 0.36, 0.35, 0.33, 0.10.0.70,\ 0.53,\ 0.52,\ 0.505,\ 0.39,\ 0.37,\ 0.36,\ 0.35,\ 0.33,\ 0.10.

对每个正样本,统计得分低于它的负样本数量,依次得到:

10, 10, 9, 9, 9, 7, 6, 5, 2, 1.10,\ 10,\ 9,\ 9,\ 9,\ 7,\ 6,\ 5,\ 2,\ 1.

排序正确的总配对数为 68,全部正负配对数为 100:

AUC=68100=0.68.\boxed{\mathrm{AUC}=\frac{68}{100}=0.68}.

也可以把 10 个负样本进入预测正类时的 TPR 依次记录为:

0.2, 0.5, 0.5, 0.6, 0.7, 0.8, 0.8, 0.8, 0.9, 1.0.0.2,\ 0.5,\ 0.5,\ 0.6,\ 0.7,\ 0.8,\ 0.8,\ 0.8,\ 0.9,\ 1.0.

因为每次 FPR 增加 0.1:

AUC=0.1(0.2+0.5+0.5+0.6+0.7+0.8+0.8+0.8+0.9+1)=0.68.\mathrm{AUC}=0.1(0.2+0.5+0.5+0.6+0.7+0.8+0.8+0.8+0.9+1)=0.68.

两种方法给出了相同的数值。

7.7 AUC 和 Accuracy 代表什么?

Accuracy 依赖某个指定分类阈值,而 AUC 综合了所有阈值下的 ROC 表现。

AUC = 0.68 的含义是正负样本排序正确的配对比例为 68%,并不表示 68% 的样本被正确分类。

另外,严格单调递增的得分变换会保持全部正负样本的先后顺序。例如:

s′(x)=2s(x)+3.s'(x)=2s(x)+3.

这种变换不会改变 AUC。模型得分是否能够准确表示点击概率,则还需要使用其他评估方法。

8. ROC 与 P-R 为什么受到类别比例的不同影响?

ROC 的坐标分别为:

FPR=FPFP+TN,TPR=TPTP+FN.\mathrm{FPR}=\frac{FP}{FP+TN},\qquad \mathrm{TPR}=\frac{TP}{TP+FN}.

P-R 曲线的坐标分别为:

Recall=TPTP+FN,Precision=TPTP+FP.\mathrm{Recall}=\frac{TP}{TP+FN},\qquad \mathrm{Precision}=\frac{TP}{TP+FP}.

当正负样本各自的得分分布保持一致时,改变类别占比通常不会改变总体 ROC 曲线,却会改变 Precision。

8.1 使用实际数量推导

原来有 100 个真实正样本和 100 个真实负样本,模型的 TPR = 80%,FPR = 10%。此时 TP = 80、FP = 10:

Precision=8080+10≈88.9%.\mathrm{Precision}=\frac{80}{80+10}\approx88.9\%.

现在将真实负样本增加到 1,000 个,保持正样本数量和两类各自的识别比例不变。则 TP = 80、FP = 100:

Precision=8080+100≈44.4%.\mathrm{Precision}=\frac{80}{80+100}\approx44.4\%.

两个情况下 ROC 坐标都为 (0.1, 0.8),但 P-R 坐标分别为 (0.8, 0.889) 与 (0.8, 0.444)。

交互演示:增加负样本,观察精确率变化

单独打开将负样本数量从 100 调整到 2,000,实时比较 TPR、FPR、Precision 和两个曲线上的对应坐标。

8.2 类别不均衡场景下如何选择指标?

如果 10,000 次广告曝光中只有 100 次点击,模型 TP = 80、FN = 20、FP = 495、TN = 9,405:

TPR=80%,FPR=5%.\mathrm{TPR}=80\%,\qquad \mathrm{FPR}=5\%.

但精确率只有:

Precision=8080+495≈13.9%.\mathrm{Precision}=\frac{80}{80+495}\approx13.9\%.

对这种少数正样本任务,ROC-AUC 有助于衡量整体排序能力,P-R 曲线则可以帮助理解正类检索的结果质量。具体选择还需结合误报、漏报的实际影响。

9. 回归模型的 RMSE、MAE 和 MAPE

分类任务关心类别或排序;回归任务通常预测一个连续数值,例如电视剧流量。

9.1 RMSE:均方根误差

RMSE=1n∑i=1n(yi−y^i)2.\mathrm{RMSE}=\sqrt{\frac1n\sum_{i=1}^{n}(y_i-\hat y_i)^2}.

其中 n 表示样本数量,y_i 表示真实值,(hat y_i) 表示预测值。由于误差被平方,较大的误差会产生更强的影响。

假设五个样本真实值都为 100,预测值依次为 101、99、102、98、150。误差平方分别是 1、1、4、4、2,500:

RMSE=1+1+4+4+25005=502≈22.41.\mathrm{RMSE}=\sqrt{\frac{1+1+4+4+2500}{5}} =\sqrt{502}\approx22.41.

如果只计算前四个样本,RMSE 约为 1.58。可见,一个较大的误差能够明显改变 RMSE。

9.2 MAE:平均绝对误差

MAE=1n∑i=1n∣yi−y^i∣.\mathrm{MAE}=\frac1n\sum_{i=1}^{n}|y_i-\hat y_i|.

对于前面的五条记录:

MAE=1+1+2+2+505=11.2.\mathrm{MAE}=\frac{1+1+2+2+50}{5}=11.2.

MAE 按绝对误差线性累计;RMSE 对大误差更加敏感。两者均有明确的应用价值。

9.3 MAPE:平均绝对百分比误差

MAPE=100%n∑i=1n∣yi−y^iyi∣.\mathrm{MAPE}=\frac{100\%}{n} \sum_{i=1}^{n}\left|\frac{y_i-\hat y_i}{y_i}\right|.

MAPE 衡量平均相对误差。如果真实流量为 10,000,预测为 9,500,则单条样本的绝对百分比误差为 5%。

需要注意:当真实值为 0 时,上式中的分母为 0;当真实值接近 0 时,MAPE 可能很大。因此,MAPE 的使用要检查真实数据的取值范围。

交互演示:调整异常样本,比较 RMSE、MAE 和 MAPE

单独打开固定四个预测误差,调整第五个样本的误差,查看三种回归指标的计算与图形变化。

10. 模型评估指标如何组合使用?

任务与目标 主要指标 关注的问题
二分类整体预测 Accuracy、Precision、Recall、F1 预测是否正确、误报与遗漏情况
正负样本整体排序 ROC、AUC 正样本是否更容易排在负样本之前
少数正样本检索 P-R 曲线、Precision、Recall 真正目标的覆盖程度与检索质量
推荐列表前 K 个结果 Precision@K、Recall@K 用户最先看到的结果是否相关
连续数值预测 RMSE、MAE、MAPE 误差的绝对大小、较大误差及相对误差

在一个电影推荐系统中,可以使用 AUC 理解点击预测模型的整体排序能力,结合 Precision@K 和 Recall@K 检查推荐列表,并根据任务特点加入概率误差指标。评估指标需要与实际预测目标、已知标签和最终使用方式相匹配。

一个计算例子

某模型评估了 1,000 条记录,其中真实正样本 100 条、真实负样本 900 条。模型预测正样本 120 条,其中有 80 条是真正正样本。

根据定义,可以依次计算:

TP=80,FP=40,FN=20,TN=860.TP=80,\quad FP=40,\quad FN=20,\quad TN=860. Accuracy=94%,Precision=80120≈66.67%.\mathrm{Accuracy}=94\%,\qquad \mathrm{Precision}=\frac{80}{120}\approx66.67\%. Recall=TPR=80100=80%.\mathrm{Recall}=\mathrm{TPR}=\frac{80}{100}=80\%. F1=160160+40+20≈72.73%,FPR=40900≈4.44%.F_1=\frac{160}{160+40+20}\approx72.73\%, \qquad \mathrm{FPR}=\frac{40}{900}\approx4.44\%.

本次结果对应 ROC 曲线上的一个点:

(FPR,TPR)≈(0.0444,0.8).(\mathrm{FPR},\mathrm{TPR})\approx(0.0444,0.8).

单独一个阈值下的混淆矩阵还不能确定完整 ROC 曲线的 AUC。计算 AUC 需要各样本得分,或者多个阈值下的完整 ROC 关键点。

评论

评论由 GitHub Giscus 提供。若当前网络无法加载,可 前往 GitHub Discussions 查看或参与讨论。

目录
准确率、ROC 与 AUC