主要使用的推荐系统实验的方法
- 离线实验
优点:
- 不需要有对实际系统的控制权
- 不需要用户参与实验
- 速度快,可以测试大量算法
缺点:
- 无法计算商业上关系的指标
- 离线实验的指标和商业指标存在差距
- 用户调查
由于离线实验不能对真实的环境进行准确的测评,最好的方法是将算法直接上线,但是在对算法会不会降低用户满意度不太有把握的情况下,上线测试具有较高的风险,所以在上线测试前一般需要做一次称为用户调查的测试。
优点:
- 可以获得很多体验用户主观感受的指标
- 相对于在线测试风险低
- 出现错误容易弥补
缺点- 招募测试用户代价大
- 测试范围有限制,双盲环境太过困难
- 在线实验
在线实验通常会采用AB测试,将旧算法与新算法进行比较,对用户进行随机分组,来提高用户满意度。
主要的缺点:周期长,只有进行长期实验才能得到可靠的结果
对于一个新的推荐算法上线,通常要完成以上三个实验
一、预测准确度
<1>、评分预测
1.均方根误差(RMSE)
(1)均方根(RMS)也称为效值,公式:
X
r
m
s
=
∑
i
=
1
N
X
i
2
N
X_{rms}=\frac{\sqrt{\sum_{i=1}^NX_i^2}}{N}
Xrms=N∑i=1NXi2
(2)均方根误差(RMSE)是衡量“平均误差”的一种较方便的方法。是参数估计值与参数真值之差的平方的期望值。在实际使用中通常真值只能用最可信赖的值。
公式:
R
M
S
E
=
∑
u
,
i
∈
N
(
X
u
i
−
Y
u
i
)
N
RMSE = \sqrt{\frac{\sum_{u,i\in{N}}(X_{ui}-Y_{ui})}{N}}
RMSE=N∑u,i∈N(Xui−Yui)
其中X表示实际值,Y表示预测值
2.平均绝对误差(MAE)
所有单个观测值与算术平均值的偏差的绝对值的平均。
公式: M A E = ∑ u , i ∈ N ∣ X u i − Y u i ∣ N MAE = \frac{\sum_{u,i\in{N}}|X_{ui}-Y_{ui}|}{N} MAE=N∑u,i∈N∣Xui−Yui∣
<2>、TopN推荐
网站提供推荐服务时给用户的个性化推荐列表,这个列表被称为TopN推荐。
TopN推荐的准确率一般通过**准确率(Precision)或召回率(Recall)**进行度量。
令R(u)是训练集上给用户做出的推荐列表,T(u)是用户在测试集上的行为列表。
-
正确率 = 提取出的正确信息条数 / 提取出的信息条数
-
召回率 = 提取出的正确信息条数 / 样本中的信息条数
两者取值在0和1之间,数值越接近1,查准率或查全率就越高。
准确率定义:
P
r
e
c
i
s
i
o
n
=
∑
u
∈
U
R
(
u
)
⋂
T
(
u
)
∑
u
∈
U
∣
R
(
u
)
∣
Precision = \frac{\sum_{u\in{U}}R(u)\bigcap T(u)}{\sum_{u\in{U}}|R(u)|}
Precision=∑u∈U∣R(u)∣∑u∈UR(u)⋂T(u)
召回率定义:
R
e
c
a
l
l
=
∑
u
∈
U
R
(
u
)
⋂
T
(
u
)
∑
u
∈
U
∣
T
(
u
)
∣
Recall= \frac{\sum_{u\in{U}}R(u)\bigcap T(u)}{\sum_{u\in{U}}|T(u)|}
Recall=∑u∈U∣T(u)∣∑u∈UR(u)⋂T(u)
二、覆盖率
作用:用于描述推荐系统对物品长尾的发掘能力。最简单的定义为推荐出来的物品占总物品集合的比例。 C o v e r a g e = ∣ ⋃ u ∈ U R ( u ) ∣ ∣ I ∣ Coverage = \frac{|\bigcup_{u\in U}R(u)|}{|I|} Coverage=∣I∣∣⋃u∈UR(u)∣
实际上为了更详细的描述系统的发掘长尾的能力,需要统计推荐列表中不同物品出现次数的分布。如果所有物品都出现在推荐列表中,并且出现的次数差不多,那么推荐系统长尾发掘能力就较好。
在信息论和经济学中有两个著名的指标信息熵和基尼系数可以用来定义覆盖率。
第一个指标——信息熵
信息熵是消除不确定性所需信息量的度量,也即未知事件可能含有的信息量。
H
=
−
∑
i
=
1
n
p
(
i
)
log
p
(
i
)
H = -\sum_{i=1}^np(i)\log p(i)
H=−i=1∑np(i)logp(i)
其中p(i)是物品i的流行度除以所有物品流行度之和。
第二个指标——基尼系数
马太效应:如果一个系统会增大热门物品和非热门物品的流行度差距,让热门的物品更加热门,不热门的物品更加不热门,那这个系统就存在马太效应。
推荐系统的初衷就是消除马太效应,基尼系数就是评测推荐系统是否具有马太效应的简单办法。
G
=
1
n
−
1
∑
j
=
1
n
(
2
j
−
n
−
1
)
p
(
i
j
)
G = \frac{1}{n-1}\sum_{j=1}^n(2j-n-1)p(i_j)
G=n−11j=1∑n(2j−n−1)p(ij)
其中
i
j
i_j
ij是按照物品流行度p从小到大排序的物品列表中第j个物品。
def GiniIndex(p):
j = 1
n = len(p)
G = 0
for item, weight in sorted(p.items(), key=itemgetter(1)):
G += (2 * j - n - 1) * weight
return G/float(n - 1)
三、多样性
用户的兴趣是广泛的,比如有的用户即喜欢看动漫又喜欢看喜剧,往往用户的兴趣点会随着时间变化,如果推荐列表只能够覆盖用户的一个兴趣点,而这个兴趣点不是用户时刻的兴趣点,用户就不会对推荐列表满意。因此推荐列表需要尽量满足用户广泛的兴趣,即多样性。
假设
s
(
i
,
j
)
∈
[
0
,
1
]
s(i, j)\in [0, 1]
s(i,j)∈[0,1]定义了物品
i
和
j
的
相
似
度
,
那
么
用
户
u
的
推
荐
列
表
R
(
u
)
的
多
样
性
定
义
如
下
:
i和j的相似度,那么用户u的推荐列表R(u)的多样性定义如下:
i和j的相似度,那么用户u的推荐列表R(u)的多样性定义如下:
D
i
v
e
r
s
i
t
y
(
R
(
u
)
)
=
1
−
∑
i
,
j
∈
R
(
u
)
s
(
i
,
j
)
1
2
∣
R
(
u
)
∣
(
∣
R
(
u
)
−
1
∣
)
Diversity(R(u))=1-\frac{\sum_{i,j \in R(u)}s(i,j)}{\frac{1}{2}|R(u)|(|R(u)-1|)}
Diversity(R(u))=1−21∣R(u)∣(∣R(u)−1∣)∑i,j∈R(u)s(i,j)
系统整体多样性定义为所有用户推荐列表多样性的平均值:
D
i
v
e
r
s
i
t
y
=
1
∣
U
∣
∑
u
∈
U
D
i
v
e
r
s
i
t
y
(
R
(
u
)
)
Diversity = \frac{1}{|U|\sum_{u\in U}Diversity(R(u))}
Diversity=∣U∣∑u∈UDiversity(R(u))1
四、新颖性
给用户推荐那些他们以前没有听说过的物品。最简单的办法是,把用户之前在网站中对其有过行为的物品从推荐列表中过滤掉。但是这些信息也有可能用户从其他渠道已经得知,并不能完全实现新颖性。
对于这个指标最重要的是如何可以不损失精度的来提高多样性和新颖性。