搜索推荐评价指标Precision@k、Recall@k、F1@k、NDCG@k

信息检索评估指标解析
本文介绍了信息检索领域常用的评估指标,包括Precision@k、Recall@k、F1@k和NDCG@k等,并通过实例展示了这些指标的具体计算过程。

假设对于一个查询,真实相关的结果是{A,C,E, Q},搜索模型得到5个结果{A, B, C, D, E},则其中只有A,C,E是相关的,标记为{1, 0, 1, 0, 1},1表示相关,0表示不相关。

Precision@k

即预测正确的相关结果占返回的所有结果的比例:
P r e c i s i o n @ k = T P @ k T P @ k + F P @ k Precision@k = \frac{TP@k}{TP@k+FP@k} Precision@k=TP@k+FP@kTP@k
取值范围[0,1],越大越好。

例子:
Precision@3 = 2/3 = 0.67
Precision@4 = 2/4 = 0.50
Precision@5 = 3/5 = 0.60

Recall@k

即预测正确的相关结果占所有相关结果的比例:
R e c a l l @ k = T P @ k T P @ k + F N @ k Recall@k = \frac{TP@k}{TP@k+FN@k} Recall@k=TP@k+FN@kTP@k
取值范围[0,1],越大越好。

例子:
Recall@3 = 2/4 = 0.50
Recall@4 = 2/4 = 0.50
Recall@5 = 3/4 = 0.75

F1@k

即Precision@k和Recall@k的调和平均数:
F 1 @ k = 2 × P r e c i s i o n @ k × R e c a l l @ k P r e c i s i o n @ k + R e c a l l @ k F1@k = \frac{2 \times Precision@k \times Recall@k}{Precision@k+Recall@k} F1@k=Precision@k+Recall@k2×Precision@k×Recall@k
取值范围[0,1],越大越好。

例子:
F1@3 = (2 * 0.67 * 0.50)/(0.67 + 0.50) = 0.57
F1@4 = (2 * 0.50 * 0.50)/(0.50 + 0.50) = 0.50
F1@5 = (2 * 0.60 * 0.75)/(0.60 + 0.75) = 0.67

注意:Precision@k、Recall@k、F1@k评价指标都是与返回顺序无关的。

NDCG@k

归一化折损累计增益(Normalized Discounted Cumulative Gain,NDCG),是一种考虑了返回顺序的评价指标。取值范围[0,1],越大效果越好。

N D C G @ k = D C G @ k I D C G @ k NDCG@k = \frac{DCG@k}{IDCG@k} NDCG@k=IDCG@kDCG@k
其中,
D C G @ k = ∑ i = 1 k r e l i l o g 2 ( i + 1 ) DCG@k=\sum_{i=1}^{k}\frac{rel_{i}}{log_{2}(i+1) } DCG@k=i=1klog2(i+1)reli
r e l i rel_i reli指第 i i i个结果的真实相关性分数。
I D C G @ k = ∑ i = 1 ∣ R E L ∣ r e l i l o g 2 ( i + 1 ) IDCG@k=\sum_{i=1}^{|REL|}\frac{rel_{i}}{log_{2}(i+1) } IDCG@k=i=1RELlog2(i+1)reli
IDCG也就是理想的DCG(Ideal DCG)。|REL| 表示,结果按照真实相关性从大到小排序,取前k个结果组成的集合的个数。

举个例子:

假设对于一个查询,搜索模型得到8个结果{A, B, C, D, E, F, G, H},分数是{0.94, 0.93, 0.92, 0.91, 0.8, 0.7, 0.6, 0.5},其真实相关性分数是{3, 2, 3, 0, 1, 2, 3, 0},求NDCG@6。

首先求DCG@6:

Item r e l i rel_i reli r e l i l o g 2 ( i + 1 ) \frac{rel_{i}}{log_{2}(i+1)} log2(i+1)reli
A33
B21.26185950
C31.5
D00
E10.38685280
F20.71241437

N D C G @ 6 = 3 + 1.26185950 + 1.5 + 0 + 0.38685280 + 0.71241437 = 6.86112667 NDCG@6=3+1.26185950+1.5+0+0.38685280+0.71241437=6.86112667 NDCG@6=3+1.26185950+1.5+0+0.38685280+0.71241437=6.86112667

再求IDCG@6:

对真实相关性分数排序,得到{3, 3, 3, 2, 2, 1, 0, 0}

r e l i rel_i reli r e l i l o g 2 ( i + 1 ) \frac{rel_{i}}{log_{2}(i+1)} log2(i+1)reli
33
31.89278926
31.5
20.86135311
20.77370561
10.35620718

I D C G @ 6 = 3 + 1.89278926 + 1.5 + 0.86135311 + 0.77370561 + 0.35620718 = 8.38405516 IDCG@6=3+1.89278926+1.5+0.86135311+0.77370561+0.35620718=8.38405516 IDCG@6=3+1.89278926+1.5+0.86135311+0.77370561+0.35620718=8.38405516

最终, N D C G @ 6 = 6.86112667 / 8.38405516 = 0.81835419 NDCG@6=6.86112667/8.38405516=0.81835419 NDCG@6=6.86112667/8.38405516=0.81835419,约82%。

注意点:
1、分母 l o g 2 ( i + 1 ) log_2{(i+1)} log2(i+1)相当于对返回位置进行了惩罚,越往后惩罚越大。分母 I D C G @ k IDCG@k IDCG@k是为了将分数归一化到[0,1]之间。
2、模型分数{0.94, 0.93, 0.92, 0.91, 0.8, 0.7, 0.6, 0.5}的大小不会影响最终NDCG的值,比如改为{100, 90, 80, 70, 60, 50, 40, 30},最终NDCG分数是一样的,只要保证是从大到小排序就行,因为在实际中,一般也是按照模型分数从大到小的顺序返回结果。

代码:

import numpy as np
from sklearn import metrics

# NDCG
true_relevance = np.array([[3, 2, 3, 0, 1, 2, 3, 0]])
scores = np.array([[0.94, 0.93, 0.92, 0.91, 0.8, 0.7, 0.6, 0.5]])

print(metrics.ndcg_score(true_relevance, scores, k=6)) # 0.8183541904922857

参考文章:
[1] 搜索评价指标——NDCG
[2] 信息检索中的度量指标全解析

1 准确率(Precision@KPrecision@K 是衡量推荐系统在前 K个推荐中,推荐成功的相关物品占推荐物品总数的比例。 (式3.4) 准确率(Precision@K)的基本原理 Precision@K=在前K个推荐中正确推荐的物品数量K#式3.4 其中,正确推荐的物品数量是指用户实际喜欢的物品(相关物品)出现在推荐列表中的数量。K指推荐给用户的物品数量,通常取较小的值。 这个式子它反映了推荐的 “精确性”,但忽略了未被推荐的相关物品。 5.1.2 召回率(RECALL@K) (式3.5) 召回率(RECALL@K)基本原理 RECALL@K=在前K个推荐中正确推荐的物品数量用户感兴趣的总物品数量#式3.5 其中,用户感兴趣的总物品数量:指用户实际喜欢的所有物品的数量(无论是否在推荐列表中),K:指推荐给用户的物品数量。 Recall@K 是用来衡量推荐系统从所有用户感兴趣的物品中,成功推荐出来的物品占用户感兴趣物品的总数的比例。它专注于推荐的覆盖率 计算所有相关物品中,被推荐到 Top-K 列表中的比例。它反映了推荐的 “全面性”。 5.1.3 综合指标F1@K) (式3.6) 综合指标F1@K)基本原理 F1@K=前K个中先关视频数用户所有相关视频数#式3.6 综合指标是指平衡准确性(Precision)和覆盖率(Recall)的调和平均数,用于平衡模型的精确性和全面性。 仿照上面几个帮我生成下一个评估指标关于损失的评估
07-03
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手撕机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值