Understanding Precision@K, AP@K, MAP@K

21
我正在评估基于隐式反馈的推荐系统。关于排名任务的评估指标,我感到有些困惑,特别是我想通过精确率和召回率来进行评估。
在排名任务中,精确率@k的优点是不需要对相关文档集的大小进行估计,但缺点是它是常用评估指标中最不稳定的之一,并且它不能很好地进行平均,因为查询的相关文档总数对k值的精确率有很大影响。
我已经注意到精确率@k通常会非常波动,因此我想从多个评估日志中平均结果。
我在想:如果我运行一个返回包含每个用户精确率@k分数的Numpy数组的评估函数,并且现在我有一个跨数据集的所有精确率@3分数的数组。如果我取这个数组的平均值并且对20个不同的得分平均:这相当于平均准确率@K或MAP@K吗?还是我对此理解过于字面?
我正在撰写一篇包括评估部分的论文,因此定义的准确性对我非常重要。

看看这个是否有帮助 - https://www.kaggle.com/nandeshwar/mean-average-precision-map-k-metric-explained-code - Nandesh
1个回答

42

涉及两种平均值,使概念有些模糊,但在推荐系统背景下它们很直观,让我澄清一下:

P@K

您的系统中前 k 个推荐中有多少相关项目


例如,计算 P@3:取给定用户的前 3 个推荐并检查其中有多少是好的。该数字除以 3 即可得到 P@3。

AP@K

i=1, ..., KP@i 的平均值。


例如,计算 AP@3:将 P@1、P@2 和 P@3 相加,并将该值除以 3。

通常为一个用户计算 AP@K。

MAP@K

所有用户的 AP@K 值的平均值。


例如,计算 MAP@3:将所有用户的 AP@3 值相加,然后将该值除以用户数量。

如果您是程序员,可以查看此代码,它是由 Kaggle 的 CTO 维护的库 ml_metrics 中函数 apkmapk 的实现。

希望对您有所帮助!


3
需要翻译的内容:It's worth noting that typically, when computing AP@K, one only averages over values of k at which a relevant recommendation is made. That is what is being done in the code linked, it is also made clear here。通俗易懂的翻译:值得注意的是,在计算AP@K时,通常只对推荐的相关项中的k值进行平均。这就是链接代码中正在执行的操作,这也在此处得到了解释。 - A Person
1
例如,计算P@3:取给定用户的前3个推荐,并检查其中有多少是好的。但这里存在歧义,如何确定哪些是“好的”呢? - alex
据我所知,我们可以通过执行任何/许多超参数调整方法来找到K的最佳值,例如ALS,SGD,SVD等。如果我有任何错误,请纠正我。 - Purushothaman Srikanth
2
@alex “好的”东西是那些与主题相关的。确定一项内容是否相关有几种方法。例如,如果评分范围是1-5,也许可以将相关阈值设置为<3,因此得分<3的任何项目都被视为“不相关”,因为它们可能是用户“不喜欢”的项目。然而这样的恒定阈值是有偏见的,因为有些用户可能更倾向于给出更高或更低的评分。因此,另一种选择是获取每个用户的平均值,并将其用作阈值。得分> =此平均阈值的项目是“相关”的。 - TYL
1
AP@K = mean(P@1 + P@2 + ... P@K) 这个说法是错误的。这里有一个反例 - Ben
AP@k 的定义不正确,请查看此处的解释。 - 3nomis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接
  • 相关问题