准确率、ROC 与 AUC
评估分类、推荐或流量预测模型时,往往需要同时查看几个指标。一个模型的 Accuracy 很高,仍可能找不到目标用户;整体排序表现良好,前几条推荐也可能不够理想。
下面用电影点击预测的例子,说明真实标签、预测得分和分类阈值怎样影响评价指标。分类与排序部分包括 Precision、Recall、Top-K、F1、ROC 和 AUC,回归部分讨论 RMSE、MAE 和 MAPE。
1. 从分类结果建立混淆矩阵
1.1 真实标签与预测结果
假设推荐系统需要预测用户是否点击电影。把“发生点击”定义为正样本,标签为 1;把“曝光后没有点击”定义为负样本,标签为 0。每条交互记录都包含一个真实标签和一个模型输出的预测得分。
模型给出点击得分后,还可以选择阈值 t,将得分转换为预测类别:
其中,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)表示预测类别正确的样本占全部样本的比例。
对于上面的 200 条记录:
这一指标易于理解,但在类别极度不均衡时需要谨慎使用。
2.1 类别不均衡时的准确率
假设有 10,000 名用户,其中只有 100 人属于某种目标人群,其余 9,900 人均为负样本。模型将全部用户预测为负样本,那么:
准确率达到 99%,模型却没有识别出任何一个目标用户。原因是大量负样本主导了准确率的计算。此时必须进一步检查模型对正样本的识别情况。
2.2 高准确率仍可能产生大量无效推荐
同样是在 10,000 名用户中,假设 TP = 40、FP = 60、FN = 60、TN = 9,840:
模型判定的 100 名目标用户里,真正符合目标的只有 40 人。对于需要向预测正类投放广告的场景,这个结果需要进一步检查 Precision。
3. Precision 与 Recall 衡量什么?
3.1 Precision:推荐出来的有多少真正相关?
精确率(Precision)的定义:
例如,系统判定 100 人会点击,其中 40 人真的点击,那么 Precision = 40%。它回答的是:所有被选中的对象中,有多少确实符合目标?
3.2 Recall:真正相关的找到了多少?
召回率(Recall)的定义:
如果真实会点击的用户共有 100 人,模型找到了 40 人,那么 Recall = 40%。它回答的是:全部符合目标的对象中,有多少被模型找到?
3.3 什么是“相关电影”?
相关电影(Relevant Movie)表示对当前用户及当前任务而言,被标记为符合目标的电影。不同任务会使用不同的判断依据。
- 在点击预测任务中,可以把发生点击的曝光记录定义为正样本。
- 在评分推荐任务中,可以规定评分达到 4 星的电影为相关电影。
- 在搜索任务中,相关性由电影是否符合用户的搜索意图决定。
没有点击或没有评分的电影,未必意味着用户不喜欢。没有被观察到的反馈应与明确的负面反馈加以区分。
例如,评估集合中有 20 部已知相关电影,系统推荐了 10 部,其中 8 部相关:
可以看到,前者衡量已推荐电影的相关程度,后者衡量全部已知相关电影的覆盖程度。
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
假设前 5 部电影中有 4 部相关:
4.2 Recall@K
如果评估集合中共有 20 部相关电影,前 5 部包含其中 4 部:
| 指标 | 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 是精确率和召回率的调和平均数。
其中 P 表示 Precision,R 表示 Recall。在分母非零的前提下:
当 Precision 与 Recall 其中一个较小时,F1 会受到明显影响。实际使用时,还需要考虑不同错误类型造成的影响是否相同。
6. ROC 曲线的两个坐标
ROC 是 Receiver Operating Characteristic 的缩写,中文称为受试者工作特征曲线。ROC 的横轴为 FPR,纵轴为 TPR。
6.1 真阳性率 TPR
TPR 表示全部真实正样本中被正确找出的比例。例如 100 条正样本找出 80 条,TPR = 0.8。
6.2 假阳性率 FPR
FPR 表示全部真实负样本中被误判为正类的比例。例如 200 条真实负样本中误判 40 条,FPR = 0.2。
要特别区分 Precision 和 FPR 的分母:
Precision 的分母是被预测为正类的数量;FPR 的分母是真实负样本数量。
6.3 为什么 ROC 曲线从 (0,0) 走到 (1,1)?
分类阈值高于全部模型得分时,所有记录都被预测为负类,TP = FP = 0,因而起点是 (0,0)。
随着阈值降低,更多样本被判定为正类:遇到真实正样本,TPR 增加;遇到真实负样本,FPR 增加。当全部样本都被判定为正类,TPR = FPR = 1,得到终点 (1,1)。
对于 P 个正样本、N 个负样本:
因此可以把 ROC 曲线看成一条从左下角开始、不断向上或向右移动的路径。如果多个样本得分相同,应作为同一组进入预测正类。
7. AUC:曲线下面积与排序概率
AUC(Area Under the Curve)在这里指 ROC 曲线下面积,即 ROC-AUC。
7.1 面积定义
把 ROC 曲线表示为 TPR 关于 FPR 的函数时:
AUC 的取值范围为 0~1。AUC = 1 表示正负样本完全正确排序;AUC = 0.5 对应随机排序的期望水平;AUC 小于 0.5 表示存在较多反向排序。
7.2 为什么 AUC 可以解释为正负样本排序概率?
从正样本中随机抽取一个,得分记为 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 组。因此:
同样,按得分排序为 A、C、B、D。ROC 路径依次经过:
曲线下面可以看出两个矩形,面积分别为 0.25 和 0.50:
交互演示:正负样本配对与 ROC 面积同步变化
建议把 B 和 C 调整到相同得分。此时可以看到,得分相同的一对按照 0.5 计算。再观察 ROC 曲线的变化,验证两种算法给出相同的 AUC。
7.4 从 ROC 的水平移动推导配对公式
现在考虑 P 个正样本和 N 个负样本。将全部样本按照得分从高到低排序。
假设遇到某个负样本之前,已经经过了 k 个正样本。此时:
当前这个负样本让 FPR 增加 1/N,于是对应的矩形面积为:
这里 k 表示有 k 个正样本得分高于当前负样本,因此这 k 组正负样本的排序正确。
对全部负样本累加:
这便建立了两个计算方法之间的联系:每一次 ROC 水平移动对应的面积,等于当前负样本带来的正确配对数量除以全部正负样本配对数量。 有相同得分时,按半次正确处理,并在 ROC 上按相同得分组计算梯形面积。
7.5 一般 ROC 曲线如何计算面积?
用一系列 ROC 坐标 ((FPR_i,TPR_i)) 近似计算面积时,可以使用梯形公式:
只要坐标依照阈值降低的顺序排列,且包括两端点,便可计算对应折线下的面积。
7.6 对 20 个样本计算 AUC
考虑 20 条得分互不相同的点击预测记录,其中正样本 10 条、负样本 10 条。按得分从高到低,10 个正样本得分依次为:
负样本得分依次为:
对每个正样本,统计得分低于它的负样本数量,依次得到:
排序正确的总配对数为 68,全部正负配对数为 100:
也可以把 10 个负样本进入预测正类时的 TPR 依次记录为:
因为每次 FPR 增加 0.1:
两种方法给出了相同的数值。
7.7 AUC 和 Accuracy 代表什么?
Accuracy 依赖某个指定分类阈值,而 AUC 综合了所有阈值下的 ROC 表现。
AUC = 0.68 的含义是正负样本排序正确的配对比例为 68%,并不表示 68% 的样本被正确分类。
另外,严格单调递增的得分变换会保持全部正负样本的先后顺序。例如:
这种变换不会改变 AUC。模型得分是否能够准确表示点击概率,则还需要使用其他评估方法。
8. ROC 与 P-R 为什么受到类别比例的不同影响?
ROC 的坐标分别为:
P-R 曲线的坐标分别为:
当正负样本各自的得分分布保持一致时,改变类别占比通常不会改变总体 ROC 曲线,却会改变 Precision。
8.1 使用实际数量推导
原来有 100 个真实正样本和 100 个真实负样本,模型的 TPR = 80%,FPR = 10%。此时 TP = 80、FP = 10:
现在将真实负样本增加到 1,000 个,保持正样本数量和两类各自的识别比例不变。则 TP = 80、FP = 100:
两个情况下 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:
但精确率只有:
对这种少数正样本任务,ROC-AUC 有助于衡量整体排序能力,P-R 曲线则可以帮助理解正类检索的结果质量。具体选择还需结合误报、漏报的实际影响。
9. 回归模型的 RMSE、MAE 和 MAPE
分类任务关心类别或排序;回归任务通常预测一个连续数值,例如电视剧流量。
9.1 RMSE:均方根误差
其中 n 表示样本数量,y_i 表示真实值,(hat y_i) 表示预测值。由于误差被平方,较大的误差会产生更强的影响。
假设五个样本真实值都为 100,预测值依次为 101、99、102、98、150。误差平方分别是 1、1、4、4、2,500:
如果只计算前四个样本,RMSE 约为 1.58。可见,一个较大的误差能够明显改变 RMSE。
9.2 MAE:平均绝对误差
对于前面的五条记录:
MAE 按绝对误差线性累计;RMSE 对大误差更加敏感。两者均有明确的应用价值。
9.3 MAPE:平均绝对百分比误差
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 条是真正正样本。
根据定义,可以依次计算:
本次结果对应 ROC 曲线上的一个点:
单独一个阈值下的混淆矩阵还不能确定完整 ROC 曲线的 AUC。计算 AUC 需要各样本得分,或者多个阈值下的完整 ROC 关键点。
评论由 GitHub Giscus 提供。若当前网络无法加载,可 前往 GitHub Discussions 查看或参与讨论。