在推荐系统中测量召回是否有意义?

机器算法验证 精确召回 推荐系统
2022-03-03 18:13:06

假设我已经建立了一个推荐系统(假设电影排名或许多用户中的任何一个)将为每个用户生成一个包含 10 部推荐电影的列表以供观看。想象一下,我还有一些大型电影项目,以及用户评分日志以及他们实际决定观看的电影。所以我想用这个数据集来评估我的系统。

我在文献中看到,这些“建议一些好的项目”任务通常使用精度、召回率和 F1 分数进行评估(例如,参见[1])。我想我应该特别对“精度为 10”感兴趣。但是,我不太确定在我上面描述的场景中应该如何计算这些度量(或者它们是否有意义)。

显然,首选的做法是将样本随机分成“训练”和“测试”部分。然后将训练数据输入我的算法,这样它就可以得出一个包含 10 个预测的列表。

现在精度有点意思,我可以从 10 个预测中检查在测试数据中用户观看的电影中实际找到了多少。

但是回想一下,如果用户在测试数据中观看了很多电影,比如 50 部左右;没有办法获得“好的”召回分数,仅仅是因为我的系统被限制为只能制作 10 部电影,而我最多只能获得 1/5 = 0.2 的召回率。

或者,如果我将测试限制为仅猜测用户的“接下来观看的 10 部电影”(以便有机会获得“完美召回”),那么准确率和召回率将始终是完全相同的数字(如果推荐的数量和与用户相关的数量相同,精度和召回率也始终相同)。

难道我做错了什么?或者这些指标在考虑的场景中根本没有多大意义?

3个回答

在“top-N”推荐系统的情况下,构建一个“无偏”测试数据集是有帮助的(例如,通过从给定用户的保留数据集中将一千个随机未观看/未分级的电影添加到已观看电影列表中),然后使用模型对生成的测试数据集进行评分。一旦为一群用户完成了它,就可以计算出“precision vs recall”曲线和“recall-at-N vs N”曲线(以及灵敏度/特异性和提升曲线),可用于判断质量给定的模型。这篇论文, Cremonesi 等人在 Top-N 推荐任务上的推荐算法的性能,有更多细节。

如果给定的模型包括时间动态,那么训练和测试之间的分割应该沿着时间维度进行(不是完全随机的)

大多数情况下,召回不会产生可以绝对评估的结果。您应该使用召回值来评估一种算法相对于另一种算法。

如果算法 A 的召回值为 0.2(如您的示例),则很难解释该值的含义。但是,如果另一个算法 B 的召回值为 0.15(给定相同的实验设置),那么您可以得出结论,算法 A 在召回方面比算法 B 具有更好的性能。

平均绝对误差(MAE)不是这样的,它可以自己解释。

处理这种情况的另一种方法是不使用所有地面实况数据。为了评估模型的性能,您还可以计算最有可能的电影的概率,例如任意 6。然后,如果用户观看了 50 部电影,您将选择前 6 部电影作为您的基本事实。请记住,您正在查看的是结果的可解释性,并且基于概率设置阈值可能是获得更有意义的召回和精度值的一种方法。