推荐系统 TOP K 评价指标

虚幻大学 xuhss 200℃ 0评论

? 优质资源分享 ?

学习路线指引(点击解锁) 知识定位 人群定位
? Python实战微信订餐小程序 ? 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
?Python量化交易实战? 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

目录* 符号说明

符号说明

top_ktop_ktop\_k: 当前用户预测分最高的k个items,预测分由高到低排序

pospospos: 当前用户实际点击过的items

NNN: 测试用户数量

示例数据

N = 4
| len(top_k & pos) | len(pos) | 预测中(四声)的item在top_k中的位置(1为预测中,长度为用户实际点击过的items长度)
| ---- | ---- | ---- |
| 1 | 2 | 1 0
| 2 | 3 | 0 1 1
| 3 | 4 | 1 0 1 1
| 0 | 3 | 0 0 0

一、Hit Rate

网上有2种定义方式,不知道哪个更为正确的,有知道的人能不能麻烦告诉我一下?

第一种

对所有用户:我们真正喜欢的物品中,你给我们推荐了多少

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

language-makefile`hit = 0
total = 0
for i in users:
top_k = 获取top_k的代码
hit += len(top_k & pos)
total += len(pos)

hit_rate = hit / total`
hit_rate=1+2+3+02+3+4+5hit_rate=1+2+3+02+3+4+5hit\_rate = \frac{1 + 2 + 3 + 0}{2 + 3 + 4 + 5}

第二种

被推荐到喜欢物品的用户占总用户的比例

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

language-makefilehit = 0 for i in users: top_k = 获取top_k的代码 if top_k中有预测到pos中的item: hit += 1 hit_rate = hit / N
hit_rate=1+1+1+04hit_rate=1+1+1+04hit\_rate = \frac{1 + 1 + 1 + 0}{4}

二、Recall

对某个用户:我真正喜欢的物品中,你给我推荐了多少

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5

language-makefilerecall = 0 for i in users: top_k = xxx(i) recall += len(top_k & pos) / len(pos) # 用户i的recall recall = mean(recall)
recall=(12+23+34+03) / 4recall=(12+23+34+03) / 4recall = (\frac{1}{2} + \frac{2}{3} + \frac{3}{4} + \frac{0}{3})\ /\ 4

三、NDCG

对某个用户:实际的折扣累计收益 DCG (Discounted Cumulative Gain) / 理想的DCG
DCG:考虑位置因素,希望用户喜欢的物品在top_k中排得越前越好
iDCG:归一化,解决【不同用户的DCG求和项数不同,不能进行比较】的问题

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

language-pythonNDCG = 0 for i in users: DCG = 0 iDCG = 0 top_k = xxx(i) for rank in range(k): if top_k[rank] in pos: DCG += 1 / log2(rank + 2) for i in range(min(k, len(pos))): iDCG += 1 / log2(i + 2) NDCG_u = DCG / iDCG NDCG += NDCG_u NDCG = mean(NDCG)

转载请注明:xuhss » 推荐系统 TOP K 评价指标

喜欢 (0)

您必须 登录 才能发表评论!