推荐系统评价:什么是好的推荐系统?
推荐系统评价:什么是好的推荐系统?
1.1 什么是推荐系统
推荐系统的定义:
我们已经进入了一个信息过载
的时代:
- 信息消费者从大量信息中找到自己感兴趣的信息很困难
- 信息生产者让自己生产的信息从大量信息中脱颖而出也很困难
推荐系统就是解决这一矛盾的重要工具。
信息过载的解决:
- 推荐系统
- 在用户没有明确目的时帮助用户发现他们感兴趣的新内容
- 从item角度出发,推荐系统可以更好的发掘item的长尾
- 搜索引擎
- 满足用户有明确目的时的主动查找需求
搜索引擎和推荐系统有着互补的关系。
推荐系统的基本任务:
联系用户和item,解决信息过载的问题。
推荐算法的本质:
通过一定的方式将用户和item联系起来
- 好友关系
- 用户历史兴趣记录
- 用户注册信息
- …
1.2 个性化推荐系统的应用
主要的应用场景有:
- 电商网站
- 流媒体电影/视频网站
- 流媒体音乐
- 社交网络
- 个性化阅读
- 基于位置的服务
- 个性化邮件
- 个性化广告
- …
音乐推荐的特点
- item空间大
- item种类丰富
- item重用率高
- 消费每首歌的经济代价小
- 消费每首歌的时间代价小
- 一个用户可以对应很多歌item
- 存在很多播放列表资源
- 高度社会化
- 上下文相关
- 推荐次序对效果有影响
- 不需要用户全神贯注听
两种推荐方式对比 :
- item-based 推荐
- 给用户推荐和用户喜欢的item相似的item
- 基于好友的推荐
- 给用户推荐他们的好友喜欢的item
1.3 推荐系统评测
推荐系统的参与者
- 用户
- item提供方
- item展示方
一个好的推荐系统应该是对推荐系统的三个参与者都有益的。
从用户角度,好的推荐系统不仅能够准确预测用户的行为,而且能够拓展用户的视野,帮助用户发现那些用户感兴趣却不太容易发现的东西。
1.3.1 推荐系统实验方法
- 通过
离线实验
证明新方法在离线指标上优于在线算法 - 通过
用户调查
确定新方法用户满意度不低于在线算法 - 通过
在线ABtest
确定新方法在线上指标优于在线算法
1.3.2 评价指标
1.3.2.1 用户满意度
- 点击率
- 停留时长
- 转化率
1.3.2.2 预测精准度
评分预测
对于测试集中的一个用户u和物品i, 令 r u i r_{ui} rui是用户u对物品i的实际评分,而 r ^ u i \hat{r}_{ui} r^ui是推荐算法给出的预测评分,则有:
- RMSE 均方根误差: $ RMSE = \sqrt{{\frac {\sum_{u,i\in T} (r_{ui} - \hat{r}_{ui})^2} {|T|} }} $
- RMSE加大了对预测不准的用户物品评分的惩罚(平方项的惩罚),因而对系统的评测更加苛刻。
- MAE 平均绝对误差: $ MAE = {\frac {\sum_{u,i\in T} |r_{ui} - \hat{r}_{ui}| } {|T|} } $
- 如果评分系统是基于整数建立的,那么对预测结果取整会降低MAE的误差。
RMSE和MAE的实现:
令records[i] = [u, i, rui, pui]
, 其中,rui
是用户u
对物品i
的实际评分,pui
是算法预测出来的用户u
对物品i
的评分,则python实现如下:
def RMSE(records):
return math.sqrt(sum([(rui - pui) ** 2 for _, _, rui, pui in records]) / (len(records)))
def MAE(records):
return sum([abs(rui - pui) for _, _, rui, pui in records]) / len(records)
TopN推荐
- 准确率 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) \cap T(u)|} {\sum_{u\in U} |R(u)|} Precision=∑u∈U∣R(u)∣∑u∈U∣R(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) \cap T(u)|} {\sum_{u\in U} |T(u)|} Recall=∑u∈U∣T(u)∣∑u∈U∣R(u)∩T(u)∣
为了全面评测TopN推荐的准确率和召回率,一般会选取不同的推荐列表长度N,计算出一组准确率/召回率,然后画出准确率高/召回率曲线(p/r curve)。
推荐系统的目的是找到用户最有可能感兴趣的item,而不是预测用户给item什么样的评分。因此,TopN推荐更符合实际应用需求。
1.3.2.3 覆盖率
覆盖率(coverage)描述一个推荐系统对item长尾的发掘能力。
从定义角度来说覆盖率是一个item提供商会关心的指标。
假设系统的用户集合为U,物品集合为I,推荐系统给每个用户推荐一个长度为N的物品列表R(u),那么覆盖率的定义为:$ Coverage = \frac {|U_{u\in U} R(u)|} {|I|}$
按照上述定义,当覆盖率接近100%时,系统可以有无数不同的流行度分布,为了更细致的描述推荐系统发掘长尾的能力,需要将流行度分布加入覆盖度指标。
在信息论和经济学中有两个著名的指标: 信息熵
和基尼系数
。
信息熵
令p(i)为物品i的流行度除以所有物品的流行度之和,则有信息熵的定义如下:
H
=
−
∑
i
=
1
n
p
(
i
)
l
o
g
p
(
i
)
H = - \sum_{i=1}^n {p(i)log\ p(i)}
H=−i=1∑np(i)log p(i)
基尼系数(Gini Index)
令
p
(
i
j
)
p(i_j)
p(ij)为物品i按流行度升序排列后的低j个物品的流行度,则有基尼系数的定义:
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)
推荐系统中的马太效应
社会学领域有一个著名的马太效应,即所谓强者更强、弱者更弱的效应。
一般来说,热门排行榜系统具有马太效应,搜索引擎的PageRank也具有马太效应。
如果一个推荐系统会增大热门物品和非热门物品之间的流行度差距,则这个系统具有马太效应。而推荐系统的初衷是消除马太效应,使得各种物品都能展示给对他们感兴趣的某一类人群。但是,很多研究表明,现在主流的推荐算法(比如协同过滤)是具有马太效应的。
评测一个推荐系统是否具有马太效应最简单的方法是使用基尼系数:
- 记G1为从初始用户行为中统计出的物品流行度基尼系数
- 记G2为从推荐列表中计算出的物品流行度的基尼系数
若 G 2 > G 1 G2>G1 G2>G1 则说明推荐算法具有马太效应。
1.3.2.4 多样性
用户的兴趣是广泛的,为了满足用户广泛的兴趣,推荐列表需要能够覆盖用户不同的兴趣领域。
多样性描述了推荐列表中物品两两之间的不相似性。因此,多样性和相似性有对应关系。假设
s
(
i
,
j
)
∈
[
0
,
1
]
s(i,j) \in [0,1]
s(i,j)∈[0,1] 定义了物品i和j之间的相似度,那么用户u的推荐列表R(u)的多样性定义如下:
D
i
v
e
r
s
i
t
y
(
R
(
u
)
)
=
1
−
∑
i
,
j
∈
R
(
u
)
,
i
≠
j
s
(
i
,
j
)
1
2
∣
R
(
u
)
∣
(
∣
R
(
u
)
∣
−
1
)
Diversity(R(u)) = 1 - \frac {\sum_{i, j\in R(u),i\not =j}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),i=js(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∣1u∈U∑Diversity(R(u))
1.3.2.5 新颖性(novelty)
新颖性的推荐是指给用户推荐那些他们不曾听说过的物品。
- 在一个系统中实现新颖性的最简单的方法就是,将用户对其有过行为的物品从推荐列表中过滤掉。
- 评测新颖度最简单的放啊是利用推荐结果的平均流行度,流行度越低可能就越新颖。
但是上述两个方法都比较粗糙,比如针对第一个,用户可能在其他平台和系统推荐的物品有过行为;第二个则未考虑不同用户的了解范围不同,物品对A用户是新颖的,但对B用户可能就是非新颖的。
1.3.2.6 惊喜度(serendipity)
不同于新颖性,惊喜度是指:
推荐的结果和用户历史上喜欢的物品不相似,单用户却觉得满意的推荐。
要想定义惊喜度,就得先定义相似性,其次需要定义用户的满意度。
提高惊喜度需要实现两点:
- 提高推荐结果的用户满意度
- 降低推荐结果和用户历史兴趣的相似度
1.3.2.7 信任度
如果用户信任推荐系统,则可能会和推荐系统有更多的交互。特别是在电商等系统中,信任非常重要。
提高推荐系统信任度的主要有两种方法:
- 增加推荐系统的透明度,增加更多推荐解释
- 利用用户的社交网络,利用用户好友的信息来做推荐和推荐解释
1.3.2.8 实时性
在很多网站中,物品具有时效性,比如新闻、微博,所以需要在物品还在有意义的时效内时将其推荐给用户。
推荐系统的实时性包含两个方面:
- 实时地更新推荐列表来满足用户的行为变化
- 能够将新加入系统的物品推荐给用户
第一个方面举例,用户新买了一个iPhone,此时推荐系统应该更新信息,将iPhone配件推荐给用户。而第二个方面主要考验了推荐系统的冷启动能力。
1.3.2.9 健壮性
任何一个能带来利益的算法系统都会被人攻击,推荐系统会面临刷热门等注入式攻击。
我们应该这样提高系统的健壮性:
- 选择健壮性高的算法
- 使用代价比较高的用户行为来训练模型
- 在使用数据前,进行攻击检测,清除垃圾数据
1.3.2.10 商业目标
很多时候,公司评价一个推荐系统更加注重商业目标是否达成,推荐系统的业务每家公司都会有,但是每家的目标都不同。
因此,评测一个推荐系统时除了要考虑上述技术指标外,还要考虑产品提出的商业目标。
1.3.3 评测维度
如果能够在推荐系统评测报告中加入细分的不同维度下系统评测指标,就能帮我们更全面的了解推荐系统的性能。
- 用户维度
- 人口统计学信息、活跃度、是否新用户
- 物品维度
- 物品的属性信息、流行度、平均分、是否新物品
- 时间维度
- 季节、工作日或周末或节假日、白天或夜晚