ML 学习站
跳到正文

推荐系统评估

NDCG / MAP / Recall@k + 在线 A/B 测试, 避免指标陷阱。

40 分钟4 / 42,444
加载中...

推荐系统评估是确保模型实际效果的关键环节。本章重点介绍了**离线评估**和**在线A/B测试**两大评估方法。核心概念包括:1)**排序问题的独特性**,即关注前N个结果的准确性,并需考虑位置偏置和长期/短期指标冲突;2)**离线评估指标**,如准确度类指标(RMSE、MAE)、排序类指标(Precision@K、Recall@K、F1@K、MAP、NDCG@K、MRR)以及多样性、覆盖率、新颖度等;3)**在线A/B测试的必要性**,因为离线指标提升不代表在线效果提升,且需规避新奇效应、幸存者偏差、SRM和辛普森悖论等陷阱。掌握这些内容后,读者能够设计合理的评估方案,选择合适的指标,并有效实施A/B测试,从而全面评估推荐系统的性能,避免过度关注短期指标而忽视长期用户体验和系统公平性。

推荐系统评估:从离线指标到在线 A/B

训好了推荐模型, 怎么知道它真的好用?这一章拆解离线评估 + 在线 A/B 测试

一、为什么评估这么难

推荐是个排序问题, 不是分类问题, 也不是回归问题:

  • 关心的是"前 N 个结果排得对不对"
  • 用户行为有位置偏置 (第一位置天然 CTR 高)
  • 长期 vs 短期指标可能冲突 (推爆款短期 CTR 高, 长期用户疲劳)

二、离线评估:三大类指标

1. 准确度类 (Rating-based)

把推荐看成"预测评分", 用回归指标:

  • RMSE: √(1/n × Σ(预测 - 真实)²)
  • MAE: 1/n × Σ|预测 - 真实|

缺点: 实际推荐不关心"评分误差多大", 只关心"排得对不对"。

2. 排序类 (Ranking-based) ⭐ 重点

Top-K 推荐的指标, 工业界最常用:

Precision@K (前 K 个里命中比例)

Precision@K = \frac{推荐前 K 个中相关的数量}{K}

Recall@K (相关物品被召回的比例)

Recall@K = \frac{推荐前 K 个中相关的数量}{全部相关物品数}

F1@K (Precision + Recall 调和)

F1@K = \frac{2 \times P@K \times R@K}{P@K + R@K}

MAP (Mean Average Precision)

对每个用户计算 Average Precision (AP), 再求平均:

AP@K = \frac{1}{m} \sum_{k=1}^{K} Precision@k \times rel(k)

rel(k) = 1 如果第 k 个位置是相关物品, 否则 0。

NDCG@K (Normalized Discounted Cumulative Gain) ⭐ 工业界标配

核心思想: 排得越靠前的相关物品, 权重越大:

DCG@K = \sum_{k=1}^{K} \frac{rel(k)}{\log_2(k+1)}

NDCG@K = \frac{DCG@K}{IDCG@K}

IDCG 是理想排序的 DCG (用所有相关物品都排在最前面)。

优势: 考虑位置, 多档相关度 (评分 5 > 评分 3), 业界最常用。

MRR (Mean Reciprocal Rank)

第 1 个相关物品出现的位置的倒数:

MRR = \frac{1}{|U|} \sum_{u \in U} \frac{1}{rank_u}

适合场景: 找 1 个正确答案 (如搜索) 不太适合多结果推荐。

3. 多样性 / 覆盖率 / 新颖度

光看"准不准"不够, 还要看:

  • 覆盖率 (Coverage): 推荐过的物品数 / 全量物品数
  • 多样性 (Diversity): 推荐列表内物品两两不相似度
  • 新颖度 (Novelty): 推用户没见过的物品的比例
  • 基尼系数 (Gini): 衡量推荐是否过度集中头部

反例: 100% 准的推荐 = 反复推已知的爆款 → 信息茧房。

三、离线评估方法

Holdout 验证

按时间划分: 用 1-7 号数据训, 8 号数据测。

关键: 不能随机打乱! 未来不能预测过去。

时间交叉验证 (Time-based CV)

滚动窗口: 1-7 训 → 8 测, 2-8 训 → 9 测, 3-9 训 → 10 测。

from surprise.model_selection import KFold
kf = KFold(n_splits=5, random_state=42, shuffle=False)  # 注意 shuffle=False

反事实评估 (Counterfactual)

Inverse Propensity Scoring (IPS):

实际只看到"曝光"的物品, 怎么估计未曝光的? 用倾向分数加权:

\hat{R} = \frac{1}{|U|} \sum_{u, i \in O} \frac{r_{ui}}{P(\text{exposure}|u, i)}

O 是曝光集, P 是曝光概率。

四、在线评估:A/B 测试

离线指标涨 ≠ 在线涨! 必须做 A/B。

标准流程

流量分桶:    1% 实验组 + 1% 对照组 + 98% 保留
                ↓
实验周期:    至少 7 天 (覆盖工作日 + 周末)
                ↓
核心指标:    CTR / 留存 / 时长 / GMV
                ↓
显著性检验:  p-value < 0.05
                ↓
全量发布:    通过 → 100% 流量

关键陷阱

  1. 新奇效应 (Novelty Effect): 用户因为"新"而点, 1 周后回归
  2. 幸存者偏差: 实验结束看数据, 流失用户没算
  3. SRM (Sample Ratio Mismatch): 流量分桶不均, 实验不可信
  4. 辛普森悖论: 分层看是 A 优, 整体看是 B 优

工业级 A/B 平台

  • Google Optimize / Firebase: 小流量实验
  • 自建分流: 一致性 hash, 用户 ID 路由
  • Interleaving: 快速对比, A/B 结果的"小型版"

五、完整评估 checklist

  • 离线 NDCG@10 / MAP@10 ≥ 基线 5%
  • 覆盖率 / 多样性不退化
  • 长尾物品能露出来
  • A/B 实验 ≥ 7 天
  • 核心业务指标正向
  • 无 SRM / 新奇效应
  • 反事实 (IPS) 验证

总结

推荐评估是多维的: 准 + 多样 + 公平 + 长期, 缺一不可。

光看 NDCG, 容易把推荐系统调成"只推爆款", 短期数据好, 长期用户走光。

章末小测验

检验你对《推荐系统评估》的掌握程度。

1

为什么 NDCG@K 比 Precision@K 更受推荐系统青睐?

2

推荐 A/B 测试关键陷阱中, '新奇效应'是指?

讨论区(0)

加载评论中...