第6章 推荐系统评测 --- 通俗讲解
对应教材:刘宏志《推荐系统》第6章(PDF:
推荐算法-带书签版0403.pdf,目录见toc.json)前置章节:第2--5章各类推荐算法;评测是检验算法「好不好」的标尺
延伸阅读:Jannach 等第7章 Evaluating recommender systems;Herlocker et al. (2004) 指标综述
章节目录速览
| 节 | 标题 | PDF 页 |
|---|---|---|
| 6.1 | 评测视角 | 103 |
| 6.2 | 实验方法 | 104 |
| 6.2.1 | 在线实验 | 104 |
| 6.2.2 | 用户调查 | 105 |
| 6.2.3 | 离线实验 | 106 |
| 6.3 | 评分预测评价指标 | 107 |
| 6.3.1 | MAE 和 MSE | 107 |
| 6.3.2 | RMSE、NMAE 和 NRMSE | 108 |
| 6.4 | Top-N 推荐评价指标 | 109 |
| 6.4.1 | 分类准确度指标 | 109 |
| 6.4.2 | ROC 曲线和 AUC 值 | 110 |
| 6.4.3 | 基于排序的评价指标 | 113 |
| 6.4.4 | 其他常用评价指标 | 115 |
| 6.5 | 公开实验数据集 | 116 |
一、先搞懂:为什么要专门讲「评测」?
前面几章学了协同过滤、矩阵分解、内容/知识推荐、混合推荐------算法很多,但怎么判断 A 比 B 更好?
推荐系统评测 = 用统一规则衡量:预测准不准、列表有没有用、用户买不买、系统扛不扛得住流量。
生活类比:
- 算法 = 厨师的菜
- 评测 = 品鉴标准(咸淡、摆盘、上菜速度、顾客复购)
- 不能只看「评委打分」,还要看 真实顾客在店里会不会点(在线实验)
评测要回答的问题
算法准吗?
用户满意吗?
业务赚钱吗?
系统能上线吗?
离线指标 MAE / P@N
调查 / 在线 A/B
CTR / 转化率 / GMV
延迟 / 覆盖率
二、6.1 评测视角 ------ 从谁的眼睛看「好」?
同一套推荐,不同角色关心的东西不同:
| 视角 | 关心什么 | 典型指标 |
|---|---|---|
| 研究者 / 算法 | 预测误差、排序质量 | MAE、RMSE、NDCG、F1 |
| 产品 / 用户 | 列表是否有用、是否多样 | 点击率、停留时长、满意度问卷 |
| 业务 / 平台 | 收入、留存、长尾曝光 | 转化率、GMV、复购率 |
| 工程 | 能否实时算出来 | QPS、延迟、覆盖率 |
关键认识(Netflix 赛后的教训):
- RMSE 降 10% ≠ 用户一定更爱看
- 离线指标高,在线 A/B 可能没提升甚至下降(只推安全热门片)
- 好系统要在 准确度、多样性、新颖性、可解释性 之间权衡
两类推荐任务 → 两类指标(全章主线):
| 任务 | 系统输出什么 | 主要用第几节指标 |
|---|---|---|
| 评分预测 | 「你会给这部电影打 4.2 分」 | 6.3 MAE / RMSE |
| Top-N 推荐 | 「为你推荐这 10 部」排序列表 | 6.4 Precision / NDCG 等 |
第2章邻域 CF 两种用法、第3章矩阵分解、第5章加权混合,都要先明确评的是 哪一种任务。
三、6.2 实验方法 ------ 数据从哪来、实验怎么做
三种方式 由易到难、由便宜到贵 ,工业界通常 离线筛算法 → 在线验业务。
候选方案
补充主观感受
6.2.3 离线实验
6.2.1 在线实验
6.2.2 用户调查
3.1 6.2.3 离线实验(最常用)
做法 :用历史数据(用户--物品评分/点击表),划分训练集和测试集,算法在训练集上学,在测试集上算指标。
优点:
- 可重复、成本低、可快速对比几十种算法
- Netflix Prize、论文复现都靠这个
缺点(必须知道):
- 未评分 ≠ 不喜欢 :矩阵里空白可能是「没看过」,离线常当负样本 → 假阳性惩罚推荐系统。
- 分布漂移:历史数据是旧的,用户口味会变。
- 无法测多样性、惊喜感等体验指标。
稀疏度(教材 Formula 7.1 思想):
sparsity = 1 − ∣ R ∣ ∣ U ∣ × ∣ I ∣ \text{sparsity} = 1 - \frac{|R|}{|U| \times |I|} sparsity=1−∣U∣×∣I∣∣R∣
MovieLens 1M 稀疏度约 0.96,即 96% 格子是空的------CF 难的原因之一。
划分方式:
| 方法 | 说明 |
|---|---|
| Hold-out | 随机切一部分用户/评分做测试 |
| K 折交叉验证 | 分 K 份,轮流当测试集,取平均 |
| Leave-one-out | 每个用户留 1 条评分测试,其余训练(最费算力、小数据常用) |
| 按用户划分 | 每个用户内部划训练/测试(All-but-N / Given-N) |
按用户的两种切法:
- All-but-N :每人留 N 条做测试,其余训练 → 适合比 分类指标(每人测试集一样大)。
- Given-N :每人训练集固定 N 条 → 适合比 预测准确度(每人训练信息一样多)。
流程口诀:划分数据 → 训练模型 → 对测试集预测 → 算 MAE 或 Top-N 指标 → 多折取平均。
3.2 6.2.1 在线实验(最可信的业务验证)
做法 :在真实产品 上对流量做 A/B 测试------用户随机进 A 版或 B 版推荐,看业务指标。
| 指标 | 含义 |
|---|---|
| CTR | 推荐位点击率 |
| 转化率 | 点击后购买/播放比例 |
| 人均时长 / GMV | 停留、成交额 |
| 留存 | 次日是否还来 |
优点 :反映真实行为,最接近「好不好用」。
缺点:周期长、有业务风险;需足够流量才有统计显著性。
注意 :曾用推荐的用户 vs 没用过的用户,直接比购买率属于 准实验,可能有自选择偏差(爱买的人更爱点推荐)。
3.3 6.2.2 用户调查(补「体验」)
做法:实验室或问卷------满意度、信任度、是否觉得「惊喜」、任务完成时间等。
适合评:
- 可解释性有没有帮助
- 知识推荐里的对话是否好用
- 音乐推荐的新颖感(Celma 等用户研究)
缺点:样本小、主观、和真实付费行为可能不一致。
3.4 三种方法怎么选?
| 阶段 | 建议 |
|---|---|
| 算法研发 | 离线 + 公开数据集 |
| 上线前 | 小流量在线 A/B |
| 体验/交互设计 | 用户调查 + 在线结合 |
四、6.3 评分预测评价指标
适用:协同过滤评分预测 、矩阵分解 、Netflix Prize(比 RMSE)。
4.1 6.3.1 MAE 和 MSE
设测试集上预测分为 (\hat{r}{u,i}),真实分为 (r{u,i})。
MAE(平均绝对误差) ------ 最常用、最好解释:
MAE = 1 ∣ T ∣ ∑ ( u , i ) ∈ T ∣ r ^ u , i − r u , i ∣ \text{MAE} = \frac{1}{|T|} \sum_{(u,i) \in T} | \hat{r}{u,i} - r{u,i} | MAE=∣T∣1(u,i)∈T∑∣r^u,i−ru,i∣
例子 :真实评分 [5, 3, 4],预测 [4.5, 3.5, 2]
误差 |0.5| + |0.5| + |2| = 3 → MAE = 3/3 = 1.0
MSE(均方误差):
MSE = 1 ∣ T ∣ ∑ ( u , i ) ∈ T ( r ^ u , i − r u , i ) 2 \text{MSE} = \frac{1}{|T|} \sum_{(u,i) \in T} (\hat{r}{u,i} - r{u,i})^2 MSE=∣T∣1(u,i)∈T∑(r^u,i−ru,i)2
对大误差 惩罚更重(差 2 分比差 1 分「罚得更狠」)。
4.2 6.3.2 RMSE、NMAE、NRMSE
RMSE(均方根误差):
RMSE = MSE \text{RMSE} = \sqrt{\text{MSE}} RMSE=MSE
- Netflix 大赛官方指标就是 RMSE
- 同样强调大误差,且与评分量纲一致(还是「分」)
MAE vs RMSE 怎么选?
| MAE | RMSE | |
|---|---|---|
| 对大误差 | 一视同仁 | 更敏感 |
| 典型场景 | 一般论文、稳健比较 | Netflix、竞赛 |
| 直观 | 「平均差几分」 | 「惩罚离谱预测」 |
NMAE / NRMSE(归一化):
NMAE = MAE r max − r min \text{NMAE} = \frac{\text{MAE}}{r_{\max} - r_{\min}} NMAE=rmax−rminMAE
把 1--5 分制和 1--10 分制压到 0--1 附近,跨数据集可比。
4.3 评分预测的局限
用户实际看到的是 Top-N 列表 ,不是「某部电影 4.2 分」。
可能出现:MAE 很好,但 Top-3 里一个用户真正喜欢的都没有 (教材 Table 7.4 例子)。
所以 Top-N 任务必须另用 6.4 指标。
五、6.4 Top-N 推荐评价指标
流程通常:
- 把评分 ≥ 4(阈值可调)的测试物品标为 相关(正样本)
- 算法输出 Top-N 推荐列表
- 看列表里「相关」命中多少
混淆矩阵(教材 Figure 7.1):
text
用户实际喜欢?
是(相关) 否(不相关)
推荐列表里有 TP 命中 FP 误推
推荐列表里没有 FN 漏推 TN
离线评测时:没评过分的物品常当「不相关」 → 推荐了新片可能被算 FP,这是离线指标的系统性偏差。
5.1 6.4.1 分类准确度指标
Precision@N(准确率):推荐列表里有多少是用户真喜欢的?
P @ N = 命中的相关物品数 N P@N = \frac{\text{命中的相关物品数}}{N} P@N=N命中的相关物品数
Recall@N(召回率):用户喜欢的测试物品里,被推荐到了多少?
R @ N = 命中的相关物品数 测试集中相关物品总数 R@N = \frac{\text{命中的相关物品数}}{\text{测试集中相关物品总数}} R@N=测试集中相关物品总数命中的相关物品数
例子 :测试集里用户喜欢 4 部(相关),推荐 Top-5 命中 2 部
→ P@5 = 2/5 = 0.4 ,R@5 = 2/4 = 0.5
矛盾:N 越大,Recall 往往↑、Precision 往往↓(推荐得越多,越容易捞到喜欢的,但也混进更多无关的)。
F1:Precision 和 Recall 的调和平均:
F 1 = 2 ⋅ P ⋅ R P + R F_1 = \frac{2 \cdot P \cdot R}{P + R} F1=P+R2⋅P⋅R
Hit Rate(命中率):至少命中 1 个相关物品的用户比例------「有没有推中过」。
hitrate u = { 1 hits u > 0 0 else \text{hitrate}_u = \begin{cases} 1 & \text{hits}_u > 0 \\ 0 & \text{else} \end{cases} hitrateu={10hitsu>0else
适合看 冷启动/稀疏用户 能否推得动。
5.2 6.4.2 ROC 曲线和 AUC 值
把推荐看成 二分类 :相关=正类,不相关=负类。对每个候选物品有一个 预测相关概率或得分,从高到低扫阈值,得到多组 (FPR, TPR)。
| 符号 | 含义 |
|---|---|
| TPR(真正率) | 相关物品中被判为相关的比例 ≈ Recall |
| FPR(假正率) | 不相关却被判为相关的比例 |
ROC 曲线 :横轴 FPR,纵轴 TPR;曲线越往 左上角 凸越好。
AUC(曲线下面积):
- AUC = 1:完美
- AUC = 0.5:相当于随机猜
- 适合比较 不同算法整体排序能力,不绑死某一个 N
通俗理解:随机抽一个「用户喜欢的」和一个「不喜欢的」,模型给喜欢的打分更高的概率 ≈ AUC。
Top-N 场景也可用,但更常见于 隐式反馈 (点击/购买=1)或 二分类推荐。
5.3 6.4.3 基于排序的评价指标
分类指标只问「在不在 Top-N」,不问 排第几。工业界排序/搜索更常用:
AP(Average Precision):对每个相关物品,看排在它前面的精度,再平均。
MAP@N(Mean AP):所有用户 AP 的平均------搜索/推荐论文常见。
NDCG@N(归一化折损累积增益) ------ 最常用排序指标之一:
- 相关物品打 增益 gain(如 相关=1,不相关=0 或多级)
- 排在越靠前,权重越大(折扣 (\log_2))
- 用 理想最优排序 归一化到 0--1
D C G @ N = ∑ i = 1 N 2 r e l i − 1 log 2 ( i + 1 ) , N D C G = D C G I D C G DCG@N = \sum_{i=1}^{N} \frac{2^{rel_i} - 1}{\log_2(i+1)}, \quad NDCG = \frac{DCG}{IDCG} DCG@N=i=1∑Nlog2(i+1)2reli−1,NDCG=IDCGDCG
直觉:相关片放第 1 位 ≫ 放第 10 位;NDCG 奖励「把喜欢的顶上去」。
MRR(平均倒数排名):第一个相关物品排名的倒数的平均------「第一个对的出现在第几位」。
| 指标 | 关注点 |
|---|---|
| Precision@N | 列表干净程度 |
| Recall@N | 漏没漏掉喜欢的 |
| NDCG@N | 排序位置质量 |
| MRR | 第一个命中要多靠前 |
Rank score / Lift index(教材 7.4.2):按位置指数衰减给命中加权,思想与 NDCG 类似。
5.4 6.4.4 其他常用评价指标
不能只追准确度,否则推荐全是爆款。
| 指标 | 含义 | 越高/越低越好 |
|---|---|---|
| 用户覆盖率 | 能给出非空推荐的用户比例 | 高(但要配合准确度) |
| 物品/catalog 覆盖率 | 被推荐过的物品占全库比例 | 长尾场景希望 ↑ |
| 多样性 ILS | 列表内物品两两相似度均值 | 越低越多样 |
| 新颖性 Novelty | 推的是否用户没见过的小众物 | 视产品而定 |
| 惊喜度 Serendipity | 既相关又出乎意料 | 难量化,常用户研究 |
例子 :只推热榜 Top-10 → Precision 可能还行,但 覆盖率极低、ILS 极高(列表同质),业务长期受伤。
六、6.5 公开实验数据集
做离线实验的「标准考场」:
| 数据集 | 领域 | 规模(约) | 稀疏度 | 说明 |
|---|---|---|---|---|
| MovieLens 100K | 电影 | 943 用户, 1.6K 电影, 10万评分 | ~0.98 | 教学入门首选 |
| MovieLens 1M | 电影 | 6K 用户, 3.9K 电影, 100万评分 | ~0.96 | 论文最常见 |
| MovieLens 10M | 电影 | 7万用户, 1万电影 | ~0.99 | 更大规模 |
| Netflix Prize | 电影 | 48万用户, 1.7万电影, 1亿评分 | ~0.999 | 竞赛数据;极稀疏 |
| Amazon / BX | 图书等 | 百万级 | 极稀疏 | 跨域、评论文本 |
| Last.fm | 音乐 | 隐式播放 | --- | 隐式反馈 |
| Jester | 笑话 | 较稠密 | ~0.45 | 小物品数 |
使用建议:
- 学第2--3章:MovieLens 100K/1M
- 对标 Netflix:RMSE + Netflix 子集
- 内容/混合:MovieLens + IMDB 侧信息(类型、演员)
- 知识推荐:Entree 餐厅(会话/约束)
GitHub 教材实现:LiuHongzhi-PKU/RSBook 各章 data 目录。
七、离线实验完整示例(串起 6.2 + 6.3 + 6.4)
场景:矩阵分解预测评分 + Top-10 推荐列表。
text
1. 读入 MovieLens 1M
2. 按用户 80% 训练 / 20% 测试(或 5-fold)
3. 训练 MF 模型
4. 评分预测任务:对测试集 (u,i) 预测 → 算 MAE、RMSE
5. Top-N 任务:对每个用户隐藏测试集物品,预测未见过物品得分 → 取 Top-10
→ 相关定义:测试集中 rating≥4
→ 算 Precision@10、Recall@10、NDCG@10
6. 换协同过滤 / 混合模型重复 → 对比表格
7. (可选)t 检验看差异是否显著
八、指标选型速查表
| 你的算法主要做... | 优先指标 |
|---|---|
| 评分预测(第2.2.2、第3章) | MAE、RMSE |
| Top-N 列表(第2.2.1、第3.3) | Precision@N、Recall@N、NDCG@N |
| 隐式反馈(点击/购买) | AUC、Hit Rate、NDCG |
| 是否覆盖长尾 | Catalog Coverage、多样性 |
| 上线决策 | 在线 CTR/转化率 + 离线 NDCG 参考 |
不要 :只报一个 MAE 就说「系统很好」;要:任务 + 指标 + 数据集 + 划分方式一起写清楚。
九、与前几章的衔接
| 章节 | 评测时常见做法 |
|---|---|
| 第2章 CF | MovieLens;比 MAE 或 P@N;用户/物品 CF 对比 |
| 第3章 MF | Netflix/MovieLens;RMSE 竞赛传统 |
| 第4章 内容 | 无评分场景用 P@N、内容相似度召回评测 |
| 第5章 混合 | 混合前后 MAE/NDCG 是否提升;在线 A/B 更关键 |
| 第6章 | 统一评测语言 |
| 第7章 排序学习 | 直接优化 NDCG 等排序目标(下一章) |
十、本章小结(背诵版)
- 评测视角:算法 / 用户 / 业务 / 工程,目标不同指标不同。
- 实验方法:离线(快)→ 在线 A/B(真)→ 调查(体验)。
- 评分预测:MAE 稳健,RMSE 惩罚大误差(Netflix)。
- Top-N :Precision、Recall、F1、Hit Rate;排序用 NDCG/MAP/MRR。
- ROC/AUC:二分类整体判别能力。
- 其他:覆盖率、多样性,防「只会推爆款」。
- 数据集:MovieLens 入门,Netflix 大规模稀疏。
- 陷阱:未评分当负样本、只优化 RMSE、离线好在线差。
十一、常见误区
| 误区 | 正解 |
|---|---|
| MAE 低 = 推荐好 | Top-N 还要看 P@N、NDCG |
| 离线高就一定上线 | 必须 A/B |
| Recall 越高越好 | N 很大时 Recall 虚高,要一起看 P |
| 只报一个指标 | 准确度 + 覆盖率/多样性 |
| 测试集随机打乱用户 | 常按用户或时间切,防泄漏 |
十二、面试题速记
-
离线 vs 在线评测?
离线用历史数据、可复现;在线用真实流量、看 CTR/转化。
-
MAE 和 RMSE 区别?
RMSE 对大误差更敏感;Netflix 用 RMSE。
-
Precision 和 Recall 区别?
P:推荐的里多少对的;R:喜欢的里捞到多少。
-
NDCG 解决什么问题?
考虑排序位置,前排命中权重更大。
-
AUC 含义?
随机正负样本对,正样本得分高于负样本的概率。
-
为什么需要覆盖率、多样性?
防止只推热门、列表同质化、长尾饿死。
-
Leave-one-out 适用场景?
用户少、要尽量用满数据训练。
十三、延伸阅读
- Herlocker, J. L. et al. (2004). Evaluating collaborative filtering recommender systems.
- Shani, G. & Gunawardana, A. (2011). Evaluating recommendation systems.(综述)
- 本书 第7章 :直接学 排序学习(优化 NDCG 等)
- 本书 第6章习题 :可用
p20风格手写 MAE/P@N 小例子自测
文档风格与 p21_第5章_混合推荐系统.md、p19_4_基于内容和知识的推荐.md 一致。