前言
推荐系统的评价指标在不同类型的推荐场景下,选用的不同。有些推荐的评价指标并非完全出自推荐系统,而是从搜索算法,信息检索,机器学习等相关领域沿用过来,因此网上有些对评价指标的解释并非完全以推荐系统的角度进行,这让我会在学习的时候产生困惑,特此做出一些整理,力求完全用推荐系统的角度解释,并给出计算的具体流程。
目录
如果你对本系列(未写完,持续更新中)感兴趣,可接以下传送门:
【推荐算法】从零开始做推荐(一)——认识数据
【推荐算法】从零开始做推荐(二)——推荐系统的评价指标,计算原理与实现样例
【推荐算法】从零开始做推荐(三)——传统矩阵分解的TopK推荐实战
【推荐算法】从零开始做推荐(四)——python Keras框架 利用Embedding实现矩阵分解TopK推荐
【推荐算法】从零开始做推荐(五)——贝叶斯个性化排序矩阵分解 (BPRMF) 推荐实战
【推荐算法】从零开始做推荐(六)——贝叶斯性化排序矩阵分解 (BPRMF) 的Tensorflow版
TopK 推荐评价指标
TopK推荐
定义:TopK推荐顾名思义,首先推荐给用户的项目数是K个,其次,这些推荐依据用户对项目的“评分”进行从高到低排序展示给用户。
举例:打开淘宝后给你推荐的TopK个商品;
特点:将推荐视为分类问题,如给定一个用户,其将要访问的项目作为其分类的标签,而对该用户的TopK推荐即为模型对该用户的多分类结果。
因此TopK推荐的评价指标也大多为分类问题指标沿用演化而来。
Precision 精确度,Recall 召回率
我最初了解它们,是出自机器学习分类问题里经典的混淆矩阵。网上有部分解释也是沿用混淆矩阵,但这会让我对于 T o p K TopK TopK推荐直观理解会造成困难,因此直接以推荐算法角度给出计算公式:
P r e c i s i o n @ K = ∑ i = 1 N ∣ R ( i ) ∩ T ( i ) ∣ ∑ i = 1 N ∣ R ( i ) ∣ … . … ( 1 ) R e c a l l @ K = ∑ i = 1 N ∣ R ( i ) ∩ T ( i ) ∣ ∑ i = 1 N ∣ T ( i ) ∣ … . … ( 2 ) \begin {aligned} Precision@K = \frac { \sum_{i=1}^N|R(i)∩T(i)|}{\sum_{i=1}^N|R(i)|} ….…(1)\\ Recall@K = \frac {\sum_{i=1}^N|R(i)∩T(i)|}{\sum_{i=1}^N|T(i)|}….…(2) \end{aligned} Precision@K=∑i=1N∣R(i)∣∑i=1N∣R(i)∩T(i)∣….…(1)Recall@K=∑i=1N∣T(i)∣∑i=1N∣R(i)∩T(i)∣….…(2)
下面对公式(1)(2)中的变量进行解释.
i i i:第 i i i次推荐。
R ( i ) R(i) R(i):第 i i i次推荐中,推荐的项目列表。
T ( i ) T(i) T(i):第 i i i次推荐中,用户真实访问的项目列表。
K K K: T o p K TopK TopK推荐中推荐列表的长度。
N N N:总推荐次数。
大多数场景下,对每一个用户进行一次 T o p K TopK TopK推荐,因此 n n n常为测试集中的用户, N N N常为测试集中的用户数量。
实际上, P r e c i s i o n @ K Precision@K Precision@K和 R e c a l l @ K Recall@K Recall@K的分子都是单次推荐时命中数量的累加,区别在分母, R e c a l l @ K Recall@K Recall@K的分母要按实际情况进行累加,但 P r e c i s i o n @ K Precision@K Precision@K的分母是推荐列表长度的累加,可以很轻松的得出: ∑ i = 1 N ∣ R ( i ) ∣ = N × K \sum_{i=1}^N|R(i)|=N×K ∑i=1N∣R(i)∣=N×K。
注意: P r e c i s i o n @ K Precision@K Precision@K和 R e c a l l @ K Recall@K Recall@K的计算都是先累加再相除,不能写成先相除再累加。
思考: P r e c i s i o n @ K Precision@K Precision@K和 R e c a l l @ K Recall@K Recall@K的值域在每次推荐都命中的情况下一定为1吗?这受 R ( i ) R(i) R(i)和 T ( i ) T(i) T(i)的长度影响。对每次推荐而言, ∣ R ( i ) ∣ = K |R(i)|=K ∣R(i)∣=K是定长的,而 ∣ T ( i ) ∣ |T(i)| ∣T(i)∣是变长的。
当任意的 ∣ T ( i ) ∣ |T(i)| ∣T(i)∣都小于 ∣ R ( i ) ∣ = K |R(i)|=K ∣R(i)∣=K时,有 m a x ( ∣ R ( i ) ∩ T ( i ) ∣ ) = ∣ T ( i ) ∣ , ∑ i = 1 N ∣ T ( i ) ∣ < ∑ i = 1 N ∣ R ( i ) ∣ max(|R(i)∩T(i)|)=|T(i)|, \sum_{i=1}^N|T(i)|<\sum_{i=1}^N|R(i)| max(∣R(i)∩T(i)∣)=∣T(i)∣,∑i=1N∣T(i)∣<∑i=1N∣R(i)∣,在每次都命中的前提下,:
P r e c i s i o n @ K = ∑ i = 1 N ∣ R ( i ) ∩ T ( i ) ∣ ∑ i = 1 N ∣ R ( i ) ∣ = ∑ i = 1 N ∣ T ( i ) ∣ ∑ i = 1 N ∣ R ( i ) ∣ < 1 R e c a l l @ K = ∑ i = 1 N ∣ R ( i ) ∩ T ( i ) ∣ ∑ i = 1 N ∣ T ( i ) ∣ = ∑ i = 1 N ∣ T ( i ) ∣ ∑ i = 1 N ∣ T ( i ) ∣ = 1 Precision@K = \frac { \sum_{i=1}^N|R(i)∩T(i)|}{\sum_{i=1}^N|R(i)|}= \frac { \sum_{i=1}^N|T(i)|}{\sum_{i=1}^N|R(i)|}<1\\Recall@K = \frac {\sum_{i=1}^N|R(i)∩T(i)|}{\sum_{i=1}^N|T(i)|}=\frac { \sum_{i=1}^N|T(i)|}{\sum_{i=1}^N|T(i)|}=1 Precision@K=∑i=1N∣R(i)∣∑i=1N∣R(i)∩T(i)∣=∑i=1N∣R(i)∣∑i=1N∣T(i)∣<1Recall@K=∑i=1N∣T(i)∣∑i=1N∣R(i)∩T(i)∣=