我目前正在评估基于隐式反馈的推荐系统。在评估排名任务的指标方面,我有些困惑。具体来说,我希望通过精确度和召回率来进行评估。
精确度@k的优势在于不需要估计相关文档集的大小,但缺点是它在常用评估指标中稳定性最差,且平均效果不佳,因为查询的相关文档总数对k处的精确度有很大影响
我自己也注意到它往往波动较大,因此我想平均多个评估日志的结果。
我在想,如果我运行一个评估函数,返回以下数组:
包含每个用户精确度@k得分的Numpy数组。
现在我有了一组数据集中所有精确度@3的得分。
如果我取这个数组的平均值,并在比如说20个不同的得分上进行平均:这是否相当于均值平均精确度@K或MAP@K,还是我对这个理解得有点太字面了?
我在写一篇包含评估部分的论文,所以定义的准确性对我来说非常重要。
回答:
涉及到两个平均值,这使得这些概念有些模糊,但它们在推荐系统的上下文中还是相当直白的,让我来澄清一下:
P@K
系统的top-k推荐中包含了多少相关项目
例如,要计算P@3:对于给定用户,取前3个推荐,并检查其中有多少是好的。将这个数字除以3,就得到了P@3
AP@K
P@i的平均值,其中i=1, …, K。
例如,要计算AP@3:将P@1、P@2和P@3相加,然后将这个值除以3
AP@K通常是为单个用户计算的。
MAP@K
所有用户的AP@K的平均值。
例如,要计算MAP@3:将所有用户的AP@3相加,然后将这个值除以用户数量
如果你是程序员,你可以查看这个代码,这是Kaggle的CTO维护的ml_metrics
库中apk
和mapk
函数的实现。
希望这对你有帮助!