理解 Precision@K、AP@K、MAP@K

Ale*_*urn 10 machine-learning recommender-systems

我目前正在评估基于隐式反馈的推荐系统。我对排名任务的评估指标有点困惑。具体来说,我希望通过精度和召回率进行评估。

Precision@k 的优点是不需要对相关文档集的大小进行任何估计,但缺点是它是常用评估措施中最不稳定的,并且平均不好,因为相关文档的总数因为查询对 k 处的精度有很大影响

我自己注意到它往往非常不稳定,因此,我想平均多个评估日志的结果。

我想知道; 假设我运行一个返回以下数组的评估函数:

包含每个用户的 precision@k 分数的 Numpy 数组。

现在我有一个数组,用于存储数据集中所有的precision@3分数。

如果我取这个数组的平均值并平均说 20 个不同的分数:这相当于Mean Average Precision@KMAP@K还是我从字面上理解这一点?

我正在写一篇带有评估部分的论文,因此定义的准确性对我来说非常重要。

dat*_*sta 20

有两个平均值使这些概念有些模糊,但它们非常简单——至少在 recsys 上下文中——,让我澄清一下:

P@K

在您的系统的 top-k 推荐中存在多少相关项目


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

美联社@K

的平均2P @我I = 1,...,K


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

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

地图@K

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


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

如果你是一个程序员,你可以检查这个代码,这是该功能的实现apkmapkml_metrics,通过Kaggle的CTO编程和维持一个图书馆。

希望有帮助!

  • 值得注意的是,通常在计算 AP@K 时,仅对提出相关建议的 k 值进行平均。这就是链接代码中所做的事情,[此处](https://web.stanford.edu/class/cs276/handouts/EvaluationNew-handout-6-per.pdf)也很清楚。 (4认同)
  • @alex“好的”是那些**相关的**。有几种方法可以确定某个项目是否相关。例如,如果评分等级是1-5,则相关阈值可能可以设置为<3,因此得分<3的任何项目都被视为“不相关”,因为它们很可能是用户“不喜欢”的项目。然而,这样一个恒定的阈值是有偏差的,因为一些用户可能更倾向于一致地给出更高或更低的评分。因此,另一种方法是获取每个用户的平均值,并将其用作阈值。>= 该平均阈值的项目是“相关的”。 (2认同)