假设我已经建立了一个推荐系统(假设电影排名或许多用户中的任何一个)将为每个用户生成一个包含 10 部推荐电影的列表以供观看。想象一下,我还有一些大型电影项目,以及用户评分日志以及他们实际决定观看的电影。所以我想用这个数据集来评估我的系统。
我在文献中看到,这些“建议一些好的项目”任务通常使用精度、召回率和 F1 分数进行评估(例如,参见[1])。我想我应该特别对“精度为 10”感兴趣。但是,我不太确定在我上面描述的场景中应该如何计算这些度量(或者它们是否有意义)。
显然,首选的做法是将样本随机分成“训练”和“测试”部分。然后将训练数据输入我的算法,这样它就可以得出一个包含 10 个预测的列表。
现在精度有点意思,我可以从 10 个预测中检查在测试数据中用户观看的电影中实际找到了多少。
但是回想一下,如果用户在测试数据中观看了很多电影,比如 50 部左右;没有办法获得“好的”召回分数,仅仅是因为我的系统被限制为只能制作 10 部电影,而我最多只能获得 1/5 = 0.2 的召回率。
或者,如果我将测试限制为仅猜测用户的“接下来观看的 10 部电影”(以便有机会获得“完美召回”),那么准确率和召回率将始终是完全相同的数字(如果推荐的数量和与用户相关的数量相同,精度和召回率也始终相同)。
难道我做错了什么?或者这些指标在考虑的场景中根本没有多大意义?