Hitrate介绍
Hitrate(命中率)是一个用于评估召回阶段效果的指标。它的核心逻辑是看系统在召回阶段能不能”猜中”用户最终真正感兴趣的那些物品。
指标定义
Hit Rate 关注的是有没有,而不是排第几。
- 场景:给定一个用户 $u$,模型生成一个长度为 $K$ 的推荐列表(Top-K List)。
- 正样本:用户在测试集中实际产生过交互(如点击、购买)的物品集合 $G_u$ (Ground Truth)。
- 命中 (Hit):如果推荐列表中的任意一个物品出现在 $G_u$ 中,则记为一次 Hit(值为 1),否则为 0。
- 计算方式:对所有测试用户取平均值。
其中:
- $N$:用户总数。
- $\text{RecList}_i$:给第 $i$ 个用户推荐的 Top-K 个物品。
- $G_i$:第 $i$ 个用户实际喜欢的物品集合。
- $\mathbb{I}(\cdot)$:指示函数,条件满足为 1,否则为 0。
示例
假设我们要评估 Top-5 (K=5) 的推荐效果:
用户 A:
- 实际喜欢:
[商品X, 商品Y] - 模型推荐:
[商品A, 商品B, **商品X**, 商品C, 商品D] - 结果:Hit (因为推荐列表里包含了商品X)。Hit Rate 贡献 = 1。
- 注意:虽然商品X排在第3位,但在 Hit Rate 看来,它和排在第1位是一样的。
- 实际喜欢:
用户 B:
- 实际喜欢:
[商品Z] - 模型推荐:
[商品A, 商品B, 商品C, 商品D, 商品E] - 结果:Miss (没包含商品Z)。Hit Rate 贡献 = 0。
- 实际喜欢:
用户 C:
- 实际喜欢:
[商品M, 商品N] - 模型推荐:
[**商品M**, **商品N**, 商品A, 商品B, 商品C] - 结果:Hit。Hit Rate 贡献 = 1。
- 注意:即使用户C的两个喜好都命中了,Hit Rate 依然只记为 1,不会记为 2。
- 实际喜欢:
如果有 100 个用户,其中 60 个用户的推荐列表里至少有一个他们喜欢的物品,那么 Hit Rate@5 = 60%。
优缺点
优点:
- 直观易懂:业务方很容易理解,“每 100 次请求中,有 60 次我们成功猜中了用户想要的东西”。
- 对冷启动友好:只要推荐列表里有一个对的就算成功,不要求非常精准地排在第一位,适合评估召回层(从万级池子捞出千级候选)的效果。
- 计算简单:不需要复杂的折扣因子。
缺点:
- 忽略排序位置:这是最大的缺陷。把正确物品排在第 1 位和第 5 位,对 Hit Rate 的贡献是一样的。但在实际业务中,第 1 位的价值远大于第 5 位。
- 对比指标:NDCG (Normalized Discounted Cumulative Gain) 或 MRR (Mean Reciprocal Rank) 会考虑位置权重。
- 忽略命中数量:用户喜欢 5 个物品,你命中 1 个和命中 5 个,Hit Rate 都是 1。这无法反映推荐的丰富度或覆盖率。
- 对比指标:Recall@K (召回率) 会计算命中的比例(命中数/总正样本数)。
- 对长尾不敏感:如果正样本很多,只要命中一个容易的热门物品就能得分,可能掩盖模型对长尾物品挖掘能力的不足。