Press "Enter" to skip to content

揭示推荐系统中的Precision@N和Recall@N

优化推荐系统:深入解释精确率和召回率的使用案例

Norbert Braun在Unsplash上的照片

讨论的主要话题包括:

  1. 精确率和召回率简介
  2. 将精确率和召回率定义适用于推荐系统
  • 二元偏好转换的需求
  • 不切实际召回率的问题
  • 解决不切实际召回率的方法:Top-N项
  • 一个说明性实现
  • 代码实现

介绍

准确度指标是评估机器学习整体性能的有用指标,它表示数据集中被正确分类的实例比例。准确度与精确率和召回率等评估指标一起使用,可以更全面地了解模型的性能。

一般来说,精确率和召回率将预测类别与测试集的实际类别进行比较,并计算正确预测的比例与总预测次数的比例。

分类问题中的精确率和召回率

在监督分类问题中,目标值(y值)必须是二元的(尽管分类问题不限于多二元值)。例如,良性或恶性、好或坏、垃圾邮件或非垃圾邮件。这些二元值允许应用精确率和召回率来衡量模型对预测值的正确分类能力。

精确率衡量正确预测的正实例(真阳性)在所有被预测为正实例中的比例

揭示推荐系统中的Precision@N和Recall@N 数据科学 第2张

召回率衡量正确预测的正实例(真阳性)在数据集中所有实际正实例中的比例

揭示推荐系统中的Precision@N和Recall@N 数据科学 第3张

精确率和召回率提供了对模型性能的互补洞察。精确率侧重于正预测的准确性,而召回率侧重于模型找到所有正实例的能力。

将精确率和召回率定义适用于推荐系统

在构建推荐模型时,我们期望模型能够提供准确的物品推荐。分类准确度指标通过量化在数据集中正确预测的实例的百分比来衡量模型的性能。然而,在推荐系统的上下文中,目标值通常由评分尺度表示,例如电影的1-5星评分。

因此,为了使精确率和召回率在推荐任务中适用,需要将评分尺度转换为二元偏好。通常通过将评分尺度转化为“相关”和“不相关”项目之间的区别来实现。

二元偏好转换的需求

在这个阶段,建立一个明确的截断点是很重要的。为了做到这一点,我们假设任何高于4的评分都被认为是相关项目,任何低于4的评分被认为是不相关的(4的截断值只是我选择的一个阈值,具体的值可以根据每个使用案例的要求而变化)

此时,这个说明可以帮助我们全面了解为什么将其转换为二元偏好可以使类似精确率和召回率的准确性指标在推荐系统中更加可行。

作者插图

不切实际召回率的问题

然而,根据这篇文章[1]的说法,

在推荐系统中,衡量召回率几乎总是不切实际的。从纯粹的意义上讲,衡量召回率需要知道每个项目是否相关;对于电影推荐系统来说,这将涉及要求许多用户观看数据库中的所有5000部电影,以衡量我们成功地向每个用户推荐了多少部电影——Herlocker等人(2004)

为了简化上述陈述,例如像Netflix这样的电影平台不可能要求所有用户观看5000部电影以衡量推荐电影的准确性。由于每个用户评价的项目数量与数据集中所有项目的总数之间存在巨大差异,召回率也往往相对较低。

因此,针对上述陈述的解决方案应该侧重于向用户推荐前5/前10部电影。考虑到向每个用户建议数据库中的所有可用电影既不实际也不可行。

不切实际召回率的解决方案:Top-N 项目

这就是 Top-N 项目可以成为推荐系统中利用准确率和召回率度量的合适方式的地方。它应该预测用户给出评分的前 N 个项目。其中 N 是与 Top-N 推荐目标相对应的整数。

可以通过将数据集分成训练集和测试集来实现这一点。训练集用于训练算法,然后在下一步中,测试集将用于预测前 N 个项目。为此,使用 precision@Nrecall@N 两个度量指标。这种方法能够更加相关和准确地评估系统在向用户推荐最相关项目方面的性能。

precision@N:推荐的前 N 个项目中有多少个对用户来说是相关的。80% 的 precision@10 表示模型提供了 10 个可用的推荐电影,但实际上只有 8 个是用户的偏好

Precision = (在前 N 个推荐中相关的项目) / (推荐的项目数)

recall@K:数据集中有多少个相关项目包含在系统推荐的前 N 个项目中。60% 的 recall@10 表示有 60% 的相关项目数量出现在前 N 个结果中。

Recall = (在前 N 个推荐中相关的项目) / (相关项目数)

到此为止,希望您理解相关和推荐的定义(假设将 4 星设置为截断点)

作者插图

一个图示的实现

如上所述,以下是所需的步骤:

  • 设置截断点阈值(如果将 4 星设置为截断点,则任何高于 4 的评分都被视为相关项目,任何低于 4 的评分都被视为不相关,推荐/不推荐的标准也同样适用)
  • 将评分数据转换为二进制偏好
  • 设置 Precision@N 和 Recall@N 的 ‘N’
  • 计算各个 Precision@N 和 Recall@N
作者插图

代码实现

如果您希望从零开始构建一个推荐系统,您可以参考我之前的文章,从中了解推荐系统背后的数学概念。然而,如果您已经对推荐任务有了很好的了解,您可以跳过此部分。

矩阵分解的推荐系统

矩阵分解的概念及在Python中的实际实现

towardsdatascience.com

回到代码!!

以下是计算Precision@N和Recall@N的Python代码片段。此外,您可以在这里访问整个笔记本。

输出如下所示:

Output Snippet

由于“推荐模型推荐的相关项目”与“每个用户评级的项目数量”之间的巨大差异(尽管我们可以使用用户给出相当多评级的数据集来解决相对较低的召回率接近0的问题),因此这里的召回率值可能相对较低。

此外,我想强调一下关于推荐系统中召回率的一个重要注意事项,这也得到了Herlocker等人的研究结果的支持(2004年)[1]:

召回率@N指标只应在同一数据集上进行比较; 不应将其解释为绝对度量

总结

以上是我关于Precision@N和Recall@N的全面解释。除此之外,我在参考部分提供了一些对我的研究有重要贡献的有价值论文和文章。

参考资料

[1] J.L. Herlocker, J.A. Konstan, L.G. Terveen, J.T. Riedl, Evaluating collaborative filtering recommender systems, ACM Trans Inform Syst, 22 (1) (2004), pp. 5–53. 可在此处获取:https://grouplens.org/site-content/uploads/evaluating-TOIS-20041.pdf

使用矩阵分解的推荐系统

矩阵分解的概念及在Python中的实际实现

towardsdatascience.com

Precision-N和Recall-N推荐系统/推荐系统的Precision和Recall.ipynb…

推荐系统中的Precision@N和Recall@N。贡献至…

github.com

FAQ – Surprise 1文档

在这里您将找到常见问题以及一些其他用例示例,这些示例不属于…

surprise.readthedocs.io

推荐系统的召回率和精确率@k

详细解释与示例

小猪AI.com

Leave a Reply

Your email address will not be published. Required fields are marked *