推荐系统的任务就是联系用户和信息,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而实现信息消费者和信息生产者的双赢(如图1-1所示)。(本书后面将信息统称为“物品”,即可以供用户消费的东西。)
图1-1 推荐系统的基本任务是联系用户和物品,解决信息过载的问题
推荐系统通过发掘用户的行为,找到用户的个性化需求,从而将长尾商品准确地推荐给需要它的用户,帮助用户发现那些他们感兴趣但很难发现的商品。
现推荐系统就是自动联系用户和物品的一种工具,它能够在信息过载的环境中帮助用户发现令他们感兴趣的信息,也能将信息推送给对它们感兴趣的用户。
在互联网的各类网站中都可以看到推荐系统的应用,而个性化推荐系统在这些网站中的主要作用是通过分析大量用户行为日志,给不同用户提供不同的个性化页面展示,来提高网站的点击率和转化率。
尽管不同的网站使用不同的推荐系统技术,但总地来说,几乎所有的推荐系统应用都是由前台的展示页面、后台的日志系统以及推荐算法系统3部分构成的。
电子商务
以Amazon为例,亚马逊的推荐系统深入到了其各类产品中,其中最主要的应用有个性化商品推荐列表和相关商品的推荐列表。
其中个性化商品推荐列表采用了一种基于物品的推荐算法(item-based method)以及基于好友的个性化推荐算法。
电影和视频网站
以Netflix和YouTube为例,两者主要采用基于物品的推荐算法(2012年数据)
个性化音乐网络电台
Pandora采用基于内容的推荐算法,对歌曲进行特征标注,依据特征推荐相似歌曲;
Last.fm采用基于用户的推荐算法,给用户推荐和她有相似听歌爱好的其他用户喜欢的歌曲。
社交网络
个性化阅读
基于位置的服务
个性化邮件
个性化广告
个性化广告投放目前已经成为了一门独立的学科——计算广告学——但该学科和推荐系统在很多基础理论和方法上是相通的,比如它们的目的都是联系用户和物品,只是在个性化广告中,物品就是广告。
个性化广告投放和狭义个性化推荐的区别是,个性化推荐着重于帮助用户找到可能令他们感兴趣的物品,而广告推荐着重于帮助广告找到可能对它们感兴趣的用户,即一个是以用户为核心,而另一个以广告为核心。目前的个性化广告投放技术主要分为3种。
个性化推荐成功应用必备条件
第一是存在信息过载,因为如果用户可以很容易地从所有物品中找到喜欢的物品,就不需要个性化推荐了。
第二是用户大部分时候没有特别明确的需求,因为用户如果有明确的需求,可以直接通过搜索引擎找到感兴趣的物品。
一个完整的推荐系统一般存在3个参与方(如图1-22所示):用户、物品提供者和提供推荐系统的网站。
预测准确度是推荐系统领域的重要指标(没有之一)。
这个指标的好处是,它可以比较容易地通过离线方式计算出来,从而方便研究人员快速评价和选择不同的推荐算法。但是,很多研究表明,准确的预测并不代表好的推荐。
好的推荐系统不仅仅能够准确预测用户的行为,而且能够扩展用户的视野,帮助用户发现那些他们可能会感兴趣,但却不那么容易发现的东西。同时,推荐系统还要能够帮助商家将那些被埋没在长尾中的好商品介绍给可能会对它们感兴趣的用户。
为了全面评测推荐系统对三方利益的影响,本章将从不同角度出发,提出不同的指标。这些指标包括准确度、覆盖度、新颖度、惊喜度、信任度、透明度等。这些指标中,有些可以离线计算,有些只有在线才能计算,有些只能通过用户问卷获得。
在推荐系统中,主要有3种评测推荐效果的实验方法,即离线实验(offline experiment)、用户调查(user study)和在线实验(online experiment)。下面将分别介绍这3种实验方法的优缺点。
优点 | 缺点 |
---|---|
不需要有对实际系统的控制权 | 无法计算商业上关心的指标 |
不需要用户参与实验 | 离线实验的指标和商业指标存在差距 |
速度快,可以测试大量算法 |
用户调查
用户调查原因:
注意,离线实验的指标和实际的商业指标存在差距,比如预测准确率和用户满意度之间就存在很大差别,高预测准确率不等于高用户满意度。因此,如果要准确评测一个算法,需要相对比较真实的环境。最好的方法就是将算法直接上线测试,但在对算法会不会降低用户满意度不太有把握的情况下,上线测试具有较高的风险,所以在上线测试前一般需要做一次称为用户调查的测试。
用户调查方法:
用户调查需要有一些真实用户,让他们在需要测试的推荐系统上完成一些任务。在他们完成任务时,我们需要观察和记录他们的行为,并让他们回答一些问题。最后,我们需要通过分析他们的行为和答案了解测试系统的性能。
用户调查优缺点:
优点:可以获得很多体现用户主观感受的指标,相对在线实验风险很低,出现错误后很容易弥补;
缺点:招募测试用户代价较大,很难组织大规模的测试用户,因此会使测试结果的统计意义不足;在很多时候设计双盲实验非常困难,而且用户在测试环境下的行为和真实环境下的行为可能有所不同,因而在测试环境下收集的测试指标可能在真实环境下无法重现。
在线实验
在完成离线实验和必要的用户调查后,可以将推荐系统上线做AB测试,将它和旧的算法进行比较。
AB测试方法:
AB测试是一种很常用的在线评测算法的实验方法。 它通过一定的规则将用户随机分成几组,并对不同组的用户采用不同的算法,然后通过统计不同组用户的各种不同的评测指标比较不同算法,比如可以统计不同组用户的点击率,通过点击率比较不同算法的性能。
AB测试优缺点:
AB测试的优点是可以公平获得不同算法实际在线时的性能指标,包括商业上关注的指标。
AB测试的缺点主要是周期比较长,必须进行长期的实验才能得到可靠的结果。因此一般不会用AB测试测试所有的算法,而只是用它测试那些在离线实验和用户调查中表现很好的算法。
其次,一个大型网站的AB测试系统的设计也是一项复杂的工程。 一个大型网站的架构分前端和后端,从前端展示给用户的界面到最后端的算法,中间往往经过了很多层,这些层往往由不同的团队控制,而且都有可能做AB测试。如果为不同的层分别设计AB测试系统,那么不同的AB测试之间往往会互相干扰。比如,当我们进行一个后台推荐算法的AB测试,同时网页团队在做推荐页面的界面AB测试,最终的结果就是你不知道测试结果是自己算法的改变,还是推荐界面的改变造成的。
因此,切分流量是AB测试中的关键,不同的层以及控制这些层的团队需要从一个统一的地方获得自己AB测试的流量,而不同层之间的流量应该是正交的。
AB测试系统流程:
图1-23是一个简单的AB测试系统。
一般来说,一个新的推荐算法最终上线,需要完成上面所说的3个实验。
用户满意度没有办法离线计算,只能通过用户调查或者在线实验获得。
在在线系统中,用户满意度主要通过一些对用户行为的统计得到。比如在电子商务网站中,用户如果购买了推荐的商品,就表示他们在一定程度上满意。因此,我们可以利用购买率度量用户的满意度。此外,有些网站会通过设计一些用户反馈界面收集用户满意度。更一般的情况下,我们可以用点击率、用户停留时间和转化率等指标度量用户的满意度。
预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力。这个指标是最重要的推荐系统离线评测指标。
预测准确率流程:
在计算该指标时需要有一个离线的数据集,该数据集包含用户的历史行为记录。然后,将该数据集通过时间分成训练集和测试集。最后,通过在训练集上建立用户的行为和兴趣模型预测用户在测试集上的行为,并计算预测行为和测试集上实际行为的重合度作为预测准确度。
评分预测:
很多提供推荐服务的网站都有一个让用户给物品打分的功能。那么,如果知道了用户对物品的历史评分,就可以从中习得用户的兴趣模型,并预测该用户在将来看到一个他没有评过分的物品时,会给这个物品评多少分。预测用户对物品评分的行为称为评分预测。
评分预测的预测准确度一般通过均方根误差(RMSE)和平均绝对误差(MAE)计算。对于测试集中的一个用户u和物品i,令 r u i r_{ui} rui 是用户 u 对物品 i 的实际评分,而 r ^ u i \hat{r}_{ui} r^ui 是推荐算法给出的预测评分,那么RMSE的定义为:
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−r^ui)2
MAE采用绝对值计算预测误差,它的定义为:
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−r^ui∣
关于RMSE和MAE这两个指标的优缺点, Netflix认为RMSE加大了对预测不准的用户物品评分的惩罚(平方项的惩罚),因而对系统的评测更加苛刻。研究表明,如果评分系统是基于整数建立的(即用户给的评分都是整数),那么对预测结果取整会降低MAE的误差。
TopN推荐:
网站在提供推荐服务时,一般是给用户一个个性化的推荐列表,这种推荐叫做TopN推荐。TopN推荐的预测准确率一般通过准确率(precision)/召回率(recall)度量。
令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) \cup T(u)|}{\sum_{u \in U} |T(u)|} Recall=∑u∈U∣T(u)∣∑u∈U∣R(u)∪T(u)∣
推荐结果的准确率定义为:
R e c a l l = ∑ u ∈ U ∣ R ( u ) ∪ T ( u ) ∣ ∑ u ∈ U ∣ R ( u ) ∣ Recall = \frac{\sum_{u\in U}|R(u) \cup T(u)|}{\sum_{u \in U} |R(u)|} Recall=∑u∈U∣R(u)∣∑u∈U∣R(u)∪T(u)∣
有的时候,为了全面评测TopN推荐的准确率和召回率,一般会选取不同的推荐列表长度N,计算出一组准确率/召回率,然后画出准确率/召回率曲线(precision/recall curve)。
关于评语预测和TopN推荐的讨论:
对此,亚马逊前科学家Greg Linden指出电影推荐的目的是找到用户最有可能感兴趣的电影,而不是预测用户看了电影后会给电影什么样的评分。因此,TopN推荐更符合实际的应用需求。也许有一部电影用户看了之后会给很高的分数,但用户看的可能性非常小。因此,预测用户是否会看一部电影,应该比预测用户看了电影后会给它什么评分更加重要。因此,本书主要也是讨论TopN推荐。
覆盖率(coverage)描述一个推荐系统对物品长尾的发掘能力。 覆盖率有不同的定义方法,最简单的定义为推荐系统能够推荐出来的物品占总物品集合的比例。假设系统的用户集合为U,推荐系统给每个用户推荐一个长度为N的物品列表R(u)。那么推荐系统的覆盖率可以通过下面的公式计算:
C o n v e r a g e = ∣ U u ∈ U R ( u ) ∣ I Converage = \frac{|U_{u \in U} R(u)|}{I} Converage=I∣Uu∈UR(u)∣
从上面的定义可以看到,覆盖率是一个内容提供商会关心的指标。以图书推荐为例,出版社可能会很关心他们的书有没有被推荐给用户。覆盖率为100%的推荐系统可以将每个物品都推荐给至少一个用户。此外,从上面的定义也可以看到,热门排行榜的推荐覆盖率是很低的,它只会推荐那些热门的物品,这些物品在总物品中占的比例很小。一个好的推荐系统不仅需要有比较高的用户满意度,也要有较高的覆盖率。
但是上面的定义过于粗略。覆盖率为100%的系统可以有无数的物品流行度分布。为了更细致地描述推荐系统发掘长尾的能力,需要统计推荐列表中不同物品出现次数的分布。如果所有的物品都出现在推荐列表中,且出现的次数差不多,那么推荐系统发掘长尾的能力就很好。因此,可以通过研究物品在推荐列表中出现次数的分布描述推荐系统挖掘长尾的能力。如果这个分布比较平,那么说明推荐系统的覆盖率较高,而如果这个分布较陡峭,说明推荐系统的覆盖率较低。在信息论和经济学中有两个著名的指标可以用来定义覆盖率。第一个是信息熵:
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)
这里p(i)是物品i的流行度除以所有物品流行度之和。
第二个指标是基尼系数(Gini Index):
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个物品。
社会学领域有一个著名的马太效应,即所谓强者更强,弱者更弱的效应。如果一个系统会增大热门物品和非热门物品的流行度差距,让热门的物品更加热门,不热门的物品更加不热门,那么这个系统就有马太效应。
那么,推荐系统是否有马太效应呢?推荐系统的初衷是希望消除马太效应,使得各种物品都能被展示给对它们感兴趣的某一类人群。但是,很多研究表明现在主流的推荐算法(比如协同过滤算法)是具有马太效应的。**评测推荐系统是否具有马太效应的简单办法就是使用基尼系数。**如果G1是从初始用户行为中计算出的物品流行度的基尼系数,G2是从推荐列表中计算出的物品流行度的基尼系数,那么如果G2 > G1,就说明推荐算法具有马太效应。
为了满足用户广泛的兴趣,推荐列表需要能够覆盖用户不同的兴趣领域,即推荐结果需要具有多样性。
多样性描述了推荐列表中物品两两之间的不相似性。因此,多样性和相似性是对应的。假设 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 \neq 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))
从上面的定义可以看到,不同的物品相似度度量函数 s ( i , j ) s(i, j) s(i,j) 可以定义不同的多样性。如果用内容相似度描述物品间的相似度,我们就可以得到内容多样性函数,如果用协同过滤的相似度函数描述物品间的相似度,就可以得到协同过滤的多样性函数。
新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。在一个网站中实现新颖性的最简单办法是,把那些用户之前在网站中对其有过行为的物品从推荐列表中过滤掉。
O’scar Celma在博士论文“Music Recommendation and Discovery in the Long Tail”中研究了新颖度的评测。评测新颖度的最简单方法是利用推荐结果的平均流行度,因为越不热门的物品越可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有比较高的新颖性。
用推荐结果的平均流行度度量新颖性比较粗略,因为不同用户不知道的东西是不同的。因此,要准确地统计新颖性需要做用户调查。
惊喜度(serendipity)是最近这几年推荐系统领域最热门的话题。
惊喜度 VS 新颖性
如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。
对于基于机器学习的自动推荐系统,存在信任度(trust)的问题,如果用户信任推荐系统,那就会增加用户和推荐系统的交互。特别是在电子商务推荐系统中,让用户对推荐结果产生信任是非常重要的。同样的推荐结果,以让用户信任的方式推荐给用户就更能让用户产生购买欲,而以类似广告形式的方法推荐给用户就可能很难让用户产生购买的意愿。
度量推荐系统的信任度:
度量推荐系统的信任度只能通过问卷调查的方式,询问用户是否信任推荐系统的推荐结果。
提高推荐系统的信任度方法:
首先需要增加推荐系统的透明度(transparency),而增加推荐系统透明度的主要办法是提供推荐解释。只有让用户了解推荐系统的运行机制,让用户认同推荐系统的运行机制,才会提高用户对推荐系统的信任度。
其次是考虑用户的社交网络信息,利用用户的好友信息给用户做推荐,并且用好友进行推荐解释。这是因为用户对他们的好友一般都比较信任,因此如果推荐的商品是好友购买过的,那么他们对推荐结果就会相对比较信任。
推荐系统的实时性包括两个方面:
首先,推荐系统需要实时地更新推荐列表来满足用户新的行为变化。 很多推荐系统都会在离线状态每天计算一次用户推荐列表,然后于在线期间将推荐列表展示给用户。这种设计显然是无法满足实时性的。与用户行为相应的实时性,可以通过推荐列表的变化速率来评测。如果推荐列表在用户有行为后变化不大,或者没有变化,说明推荐系统的实时性不高。
实时性的第二个方面是推荐系统需要能够将新加入系统的物品推荐给用户。 这主要考验了推荐系统处理物品冷启动的能力。
任何一个能带来利益的算法系统都会被人攻击,这方面最典型的例子就是搜索引擎。搜索引擎的作弊和反作弊斗争异常激烈,这是因为如果能让自己的商品成为热门搜索词的第一个搜索果,会带来极大的商业利益。推荐系统目前也遇到了同样的作弊问题,而健壮性(即robust, 鲁棒性)指标衡量了一个推荐系统抗击作弊的能力。
算法健壮性的评测:
算法健壮性的评测主要利用模拟攻击。首先,给定一个数据集和一个算法,可以用这个算法给这个数据集中的用户生成推荐列表。然后,用常用的攻击方法向数据集中注入噪声数据,然后利用算法在注入噪声后的数据集上再次给用户生成推荐列表。最后,通过比较攻击前后推荐列表的相似度评测算法的健壮性。如果攻击后的推荐列表相对于攻击前没有发生大的变化,就说明算法比较健壮。
在实际系统中,提高系统的健壮性,除了选择健壮性高的算法,还有以下方法。
很多时候,网站评测推荐系统更加注重网站的商业目标是否达成,而商业目标和网站的盈利模式是息息相关的。**一般来说,最本质的商业目标就是平均一个用户给公司带来的盈利。**不过这种指标不是很难计算,只是计算一次需要比较大的代价。因此,很多公司会根据自己的盈利模式设计不同的商业目标。
不同的网站具有不同的商业目标。比如电子商务网站的目标可能是销售额,基于展示广告盈利的网站其商业目标可能是广告展示总数,基于点击广告盈利的网站其商业目标可能是广告点击总数。因此,设计推荐系统时需要考虑最终的商业目标,而网站使用推荐系统的目的除了满足用户发现内容的需求,也需要利用推荐系统加快实现商业上的指标。
本节提到了很多指标,其中有些指标可以离线计算,有些只能在线获得。但是,离线指标很多,在线指标也很多,那么如何优化离线指标来提高在线指标是推荐系统研究的重要问题。关于这个问题,目前仍然没有什么定论,只是不同系统的研究人员有不同的感性认识。
表1-3对前面提到的指标进行了总结。
离散实验 | 问卷调查 | 在线实验 | |
---|---|---|---|
用户满意度 | × | √ | ○ |
预测准确度 | √ | √ | × |
覆盖率 | √ | √ | √ |
多样性 | ○ | √ | ○ |
新颖性 | ○ | √ | ○ |
惊喜度 | × | √ | × |
对于可以离线优化的指标,我个人的看法是应该在给定覆盖率、多样性、新颖性等限制条件下,尽量优化预测准确度。用一个数学公式表达,离线实验的优化目标是:
最大化预测准确度
使得 覆盖率 > A
多样性 > B
新颖性 > C
其中,A、B、C的取值应该视不同的应用而定。
此处的离线实验的优化目标与Andrew Ng在DeepLearning.ai里介绍的相同,即在满足一定约束条件下,最大可能地优化主指标。