在推荐系统研究领域中,应用问题主要有评分预测和TopN推荐。
评分预测
预测用户对物品评分的行为称为评分预测(rating prediction)。
评分预测的预测准确度一般通过均方根误差(Root Mean Squared Error,简称RMSE)和平均绝对误差(Mean Absolute Error,简称MAE)计算。
对于测试集中的一个用户u和物品i,令$r_{ui}$是用户对物品i的实际评分,而$\hat{r}_{ui}$是推荐算法给出的预测评分。
RMSE
$$
RMSE = \sqrt{
\frac {
\sum_{(u,i)\in Test} (r_{ui}-\hat{r}_{ui})^2
}{
\left \vert Test \right \vert
}
} \tag{1}
$$
MAE
MAE采用绝对值计算预测误差,它的定义为:
$$
MAE = \frac {
\sum_{(u,i) \in Test}{|r_{ui}-\hat{r}_{ui}|}
}{
\left \vert Test \right \vert
} \tag{2}
$$
TopN推荐
网站在提供推荐服务时,一般是给用户一个个性化的推荐列表,这种推荐叫做TopN推荐。
在推荐系统的论文中,经常可以看到xx@N,它是xx at rank N的缩写。意为在TopN推荐中,该指标的值。
Precision/Recall
TopN推荐的预测准确率一般通过准确率(precision)/召回率(recall)度量。
令R(u)是根据用户在训练集上的行为给用户作出的推荐列表,而T(u)是用户在测试集上的行为列表。那么,推荐结果的召回率定义为:
$$
\mathrm{Recall}@N = \frac {
\sum_{u \in U}|R(u) \cap T(u)|
} {
\sum_{u \in U}|T(u)|
} \tag{3}
$$
推荐结果的准确率定义为:
$$
\mathrm{Precision}@N = \frac {
\sum_{u \in U}|R(u) \cap T(u)|
} {
\sum_{u \in U}|R(u)|
} \tag{4}
$$
F1值
$$
\mathrm{F1} = \frac{
2 \times Precision \times Recall
}{
Precision + Recall
} \tag{5}
$$
AP/MAP
精度均值(Average Precision,简称AP)
$$
AP@N = \frac{
\sum_{k=1}^N
\mathrm{Precision@k \times rel(k)}
}{
\min \{
N, \left \vert C_{\mathrm{adopted}} \right \vert
\}
} \tag{6}
$$
其中,rel(k)是指示函数,表示第k个物品是否被采纳
$$
\mathrm{rel(k)} =
\begin{cases}
1, & I_k \in C_{\mathrm{adopted}} \\
0, & \mathrm{otherwise}
\end{cases}
$$
平均精度均值(Mean Average Precision,简称MAP)
$$
\mathrm{MAP}@N = \frac{1}{
\left \vert U \right \vert
}
\sum_{u \in U} \mathrm{AP}@N \tag{7}
$$
Hit Ratio
命中率(Hit Ratio, 简称HR)
$$
\mathrm{HR}@N = \frac{
\mathrm{hits}
}{
\left \vert U \right \vert
} \tag{8}
$$
ARHR
平均命中排序倒数(Average Reciprocal Hit Rank,简称ARHR)
$$
\mathrm{ARHR}@N = \frac{1} {
\left \vert U \right \vert
}
\sum_{i=1}^{hits} \frac{1}{
pos_i
} \tag{9}
$$
其中,$pos_i$表示第i次命中时,测试物品在推荐列表中的位置。
NDCG
NDCG源自于信息检索领域,用于评估排序质量。在理解NDCG前,需要弄明白CG、DCG以及IDCG的概念。
- CG
累计收益(Cumulative Gain,简称CG)
$$
\mathrm{CG}@N = \sum_{i = 1}^N rel_i \tag{10}
$$
其中,$rel_i$是将物品i推荐给用户得到的“收益”。
- DCG
直观的想法:“收益”越高的物品,在列表中的位置应该越靠前。
折扣累计收益(Discounted Cumulative Gain,简称DCG)在CG的基础上,加入了对物品位置的考虑:
$$
\mathrm{DCG}@N = \sum_{i =1}^N
\frac{
rel_i
}{
\log_2 (i + 1)
} \tag{11}
$$
DCG的另一种形式:
$$
\mathrm{DCG}@N = \sum_{i =1}^N
\frac{
2^{rel_i} - 1
}{
\log_2 (i + 1)
} \tag{12}
$$
DCG的第二种形式更常用。当$rel_i \in$ {0,1}时,公式(11)等价于(12)。
- IDCG
理想的折扣累计收益(Ideal Discounted Cumulative Gain,简称IDCG):在理想情况下,推荐列表中的物品应按照最终收益从高到低排序。
$$
\mathrm{IDCG}@N = \sum_{i =1}^{\left \vert REL_N \right \vert}
\frac{
2^{rel_i} - 1
}{
\log_2 (i + 1)
} \tag{13}
$$
其中,$REL_N$表示按照收益从高到低排序后的N个物品;$rel_i \in$ {0,1}。
- NDCG
当采用DCG时,不同N下的结果无法直接进行比较。
为了解决该问题,可以对DCG进行归一化,得到归一化折扣累计收益(Normalized Discounted Cumulative Gain,简称NDCG):
$$
\mathrm{NDCG}@N = \frac{DCG@N} {IDCG@N} \tag{14}
$$
$NDCG \in [0,1]$,其值越大,表示排序的质量越高。
当$rel_i \in$ {0,1}且采用留一法进行评估时,待测物品的收益rel=1,其理想位置j=1
$$
\mathrm{DCG}@N = \frac{1}{\log_2 (j + 1)} \\
\mathrm{IDCG}@N = \frac{1}{\log_2 (1 + 1)} = \frac{1}{\log_2 (2)}
$$
从而:
$$
\mathrm{NDCG}@N = \frac{DCG@N} {IDCG@N} = \frac{ \log 2 }{ \log(j + 1) } \tag{15}
$$
- 示例
为了便于理解,下面举个例子(源自于维基百科):
假设系统给用户u推荐了6部电影,推荐列表为:M1、M2、M3、M4、M5、M6,
用户u对这些电影的评分依次为:3, 2, 3, 0, 1, 2。
如果将用户的评分作为推荐该电影获得的收益,那么,该推荐列表的CG值为:
$$
\mathrm{CG}@6 = \sum_{i=1}^6 rel_i = 3 + 2 + 3 + 0 + 1 + 2 = 11
$$
i | $rel_i$ | $\log_2 (i + 1)$ | $\frac{rel_i}{\log_2 (i + 1)}$ |
---|---|---|---|
1 | 3 | 1 | 3 |
2 | 2 | 1.585 | 1.262 |
3 | 3 | 2 | 1.5 |
4 | 0 | 2.322 | 0 |
5 | 1 | 2.585 | 0.387 |
6 | 2 | 2.807 | 0.712 |
根据上表,计算得到:
$$
\mathrm{DCG}@6 = \sum_{i =1}^6
\frac{
rel_i
}{
\log_2 (i + 1)
} = 6.861
$$
理想情况下,推荐列表中的电影按照评分从高到低排序:3, 3, 2, 2, 1, 0。从而:
$$
\begin{align}
\mathrm{IDCG}@6 &= \sum_{i =1}^6
\frac{
rel_i
}{
\log_2 (i + 1)
} \\
&= \frac{3}{1} + \frac{3}{1.585} + \frac{2}{2} + \frac{2}{2.322} + \frac{1}{2.585} + \frac{0}{2.807} \\
&= 7.141
\end{align}
$$
因此:
$$
\mathrm{NDCG}@6 = \frac{DCG@6} {IDCG@6} = \frac{6.861}{7.141} = 0.961
$$