本文按照书中的目录进行内容组织,对于个人认为比较重要的点,进行提炼梳理,方便自己加深印象。同时,也想借助的文章的形式分享出来,可供小伙伴们一同学习进步,也欢迎大佬拍砖指正。
关联用户和信息。一方面帮助用户发现对自己有价值的信息,一方面让信息展现在他感兴趣的用户面前。从而解决信息过载的问题。
分类目录:类似国内hao123这样的网站,首页有各类热门网站站点。可以方便用户根据自己的喜好选择站点。但是,这种做法也只能涵盖少量热门网站,随着互联网的快速发展,已经不能满足大部分用户的需求。
搜索引擎:搜索引擎解决了分类目录不能处理海量网页的情形,让用户通过搜索关键词,来找到自己感兴趣的内容。但是,搜索引擎需要用户主动提供关键词,当用户无法提供准确的搜索词时,便无能为力。比如,周六在家你想找一部自己喜欢的电影,便无法直接在搜索引擎上进行搜索,可能需要通过间接的方式(检索过去一年票房最高的电影或者其他方式),来找到自己想看的电影。
推荐系统:和搜索引擎类似,推荐系统也是一种帮助用户快速发现有用信息的工具。和搜索引擎的不同是,推荐系统不需要用户主动提供检索词,而是根据用户的历史信息,对用户的兴趣模型进行建模,从而主动的给用户推荐他们感兴趣的内容。
一个好的推荐系统,通常需要3个参与方。用户、信息提供者,提供推荐系统的网站。以图书推荐为例,首先,推荐系统需要满足用户的需求,推荐给用户感兴趣的书籍。其次,推荐系统需要让各类书籍都能被推荐给对其感兴趣的用户。最后,好的推荐系统设计,可以让推荐系统本身收到高质量的反馈。不断完善推荐的质量。增加用户和网站的交互,提供网站的收入。因此,一个好的推荐系统,一定是需要同时考虑三方的利益。
1.离线实验
一般的实验步骤如下:
(1) 通过日志系统获得用户行为数据,并按照一定格式生成一个标准的数据集;
(2) 将数据集按照一定的规则分成训练集和测试集;
(3) 在训练集上训练用户兴趣模型,在测试集上进行预测;
(4) 通过事先定义的离线指标评测算法在测试集上的预测结果。
优点:不需要一个实际的系统来供它实验,也不需要真实的用户参与,可以方便、快速的测试大量不同的方法。
缺点:无法获得商业上关注的指标,如点击率,转化率等。
2.用户调查
考虑到离线实验的缺点,一个更好的方式就是直接进行线上实验。但是,如果直接进行线上实验,会有较大的风险(比如,上线的推荐算法可能真实效果并不好,会导致商业指标下降,从而带来损失),所以,可以进行用户调查的测试。
用户调查需要有一些真实用户,让他们在需要测试的推荐系统上完成一些任务。在他们完成任务时,我们需要观察和记录他们的行为,并让他们回答一些问题。最后,我们需要通过分析他们的行为和答案了解测试系统的性能。
优点:可以获得很多体现用户主观感受的指标,相对在线实验风险很低,出现错误后很容易弥补。
缺点:招募测试用户代价较大,很难组织大规模的测试用户,因此会使测试结果的统计意义不足。
3.在线实验
在完成以上2种实验之后,可以进行在线实验。常用的做法是在推荐系统上进行线上A/BTest.
优点:可以公平的获得,不同算法在真实环境当中的表现,并且也可以关注到商业上的指标。
缺点:AB测试的缺点主要是周期比较长,必须进行长期的实验才能得到可靠的结果。因此一般不会用AB测试测试所有的算法,而只是用它测试那些在离线实验和用户调查中表现很好的算法。其次,一个大型网站的AB测试系统的设计也是一项复杂的工程。
所以,一个新的推荐算法上线,需要3个步骤:
第一,通过离线实验证明它在很多离线指标上优于现有的算法;
第二,通过用户调查确定它的用户满意度不低于现有的算法;
第三,通过在线的AB测试确定它在我们关心的指标上优于现有的算法;
###评测指标
1.用户满意度
在在线系统中,用户满意度主要通过一些对用户行为的统计得到。比如在电子商务网站中,用户如果购买了推荐的商品,就表示他们在一定程度上满意。因此,我们可以利用购买率度量用户的满意度。
2.预测准确度
评分预测
评分预测的基本思路是,通过用户对物品的历史评分,推荐算法就可以从中学到用户的兴趣模型,并对用户没有看到过的物品进行预测。评分预测常用的有以下2个指标。
R M S E = ∑ u , i ∈ T ( r u i − r u i ^ ) 2 ∣ T ∣ RMSE=\frac{\sqrt{\sum_{u,i\in{T}}^{}(r_{ui} - \hat{r_{ui}})^{2}}}{|T|} RMSE=∣T∣∑u,i∈T(rui−rui^)2
M A E = ∣ ∑ u , i ∈ T ( r u i − r u i ^ ) ∣ ∣ T ∣ MAE=\frac{|\sum_{u,i\in{T}}^{}(r_{ui} - \hat{r_{ui}})|}{|T|} MAE=∣T∣∣∑u,i∈T(rui−rui^)∣
其中, r u i r_{ui} rui表示用户 u u u对物品{i}的实际评分, r u i ^ \hat{r_{ui}} rui^则是推荐系统给出的评分。
TopN推荐
网站在提供推荐服务时,一般是给用户一个个性化的推荐列表,这种推荐叫做TopN推荐。TopN推荐的预测准确率一般通过准确率(precision)/召回率(recall)度量。
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)∣
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 ( u ) R(u) R(u)是根据用户在训练集上的行为作出的推荐列表,而 T ( u ) 是 用 户 在 测 试 集 上 行 为 列 表 T(u)是用户在测试集上行为列表 T(u)是用户在测试集上行为列表
关于评分预测和TopN推荐的讨论
评分预测一直是推荐系统研究的热点,绝大多数推荐系统的研究都是基于用户评分数据的评分预测。但是,亚马逊前科学家Greg Linden有不同的看法。他认为,出电影推荐的目的是找到用户最有可能感兴趣的电影,而不是预测用户看了电影后会给电影什么样的评分。因此,TopN推荐更符合实际的应用需求。也许有一部电影用户看了之后会给很高的分数,但用户看的可能性非常小。
3.覆盖率
覆盖率也是一类非常重要的指标,他描述了一个推荐系统对物品长尾的挖掘能力。试想,一个覆盖率不好的推荐系统,可能只能只能推荐出比较热门的物品。但是,对于一部分小众用户而言,他们所关心的小众物品就不能被很好的推荐。但是,对于一个覆盖率好的推荐系统,他的图像就是长尾的。即,有大量的物品还是被推荐系统进行推荐。推荐系统的覆盖率可以通过如下公式进行计算:
C o v e r g e = ∣ ⋃ u ∈ U R ( u ) ∣ ∣ I ∣ Coverge=\frac{|\bigcup_{u\in{U}}R(u)|}{|I|} Coverge=∣I∣∣⋃u∈UR(u)∣
除了上面的公式,信息熵和基尼系数,也可以被用来度量覆盖率。
4.多样性
用户的兴趣是广泛的,因此为了满足用户尽可能多的兴趣,需要推荐列表可以覆盖尽可能多的用户兴趣列表。多样性描述了推荐列表当中物品两两之间的不相似性,因此,对于多样性的定义,可以通过相似性来定义。假设 s ( i , j ) ∈ [ 0 , 1 ] s(i,j)\in{[0,1]} s(i,j)∈[0,1]定义了物品之间的相似性,那么用户 u u u的推荐列表 R ( u ) R(u) R(u)的多样性定义如下:
D i v e r s i t y = 1 − ∑ i ≠ j , i , j ∈ R ( u ) s ( i , j ) 1 2 ∣ R ( u ) ∣ ( R ( u ) − 1 ) Diversity=1 - \frac{\sum_{ i \ne j, i,j \in R(u) }s(i,j) }{ \frac{1}{2} |R(u)| (R(u)-1) } Diversity=1−21∣R(u)∣(R(u)−1)∑i̸=j,i,j∈R(u)s(i,j)
5.新颖性
新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。比如在一个视频网站中,新颖的推荐不应该给用户推荐那些他们已经看过、打过分或者浏览过的视频。评测新颖度的最简单方法是利用推荐结果的平均流行度,因为越不热门的物品越可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有比较高的新颖性。
6.惊喜度
惊喜度的概念可能和新颖性的概念非常相近,比如通常一个比较新颖的推荐是会给用户带来惊喜的。所以,在推荐系统当中要区别这两个概念,需要转化上下文的语义环境。在推荐系统当中,新颖通常是指之前没有推荐给用户的物品,比如,推荐给用户一个他没有看过的电影。但是,这部电影可能用户并不喜欢,所以他并不觉得有惊喜。所以,在推荐系统当中,惊喜度是指,如果一个推荐和用户的历史兴趣不相似,但是却又让用户觉得满意的推荐。目前,对于惊喜度,并没有什么公认的指标定义方式,所以只给出定性的方式进行描述。
7.信任度
首先说下这个指标为什么重要,同样的结果,如果能以让用户更信任的方式推荐给用户,那么就可能让用户产生购买欲。比如,你感冒了,一个朋友说让你吃xx药,你可能不会吃。但是,如果是医生跟你说让你吃同样的药,你就会吃了。说的就是信任度对人行为的影响。那么,对于一个推荐系统而言,他的信任度是什么呢?通常度量推荐系统信任度的方式只能通过调查问卷的方式。那么对于推荐系统而言,通常提高信任度的方式有如下两种:
8.实时性
对于具备很强时效性的推荐,需要在物品还具有时效性的时候,就把物品推荐给用户。比如,对于新闻推荐来说,推荐昨天的新闻肯定不如推荐今天的新闻。具体的做法有:
9.健壮性
常见的推荐作弊行为可以通过注入攻击,来模拟虚拟的用户行为数据,但是系统并没有察觉。这样的数据会导致恶意攻击者的物品被推荐出来。在实际当中,可以通过如下两种方法避免。
10.商业目标
不同的网站有各自不同的商业目标,这个需要结合自身业务而定。常见的比如有,广告展示总数,广告点击总数。
**小结:对于如何优化离线指标来提高在线指标,是推荐系统研究的重要问题。**关于这个问题,目前任然没有什么定论。在书中,作者给出了他认为的一种合理的做法:
最大化预测准确度
使得 覆盖率 > A
多样性 > B
新颖性 > C
其中,A,B,C的取值,应该视不同的情况而定。
上一小节介绍了很多评价指标,但是在生产环境当中,还需要考虑评测的维度。比如一个推荐算法,虽说整体性能不好,但可能在某种情况下性能比较好。这时,增加评测维度的目的就是知道一个算法在什么情况下, 性能最好。这样融合不同推荐算法,取得整体的最好性能。常见的评测维度如下:
《推荐系统实践》
https://zhpmatrix.github.io/2018/06/25/recsys-rethinking/