推荐系统实践

编著 项亮 参与创建Resys China推荐系统社区


第一章 好的推荐系统

什么是好的推荐系统?什么样的特征?有哪些评价指标?

1.1 好的推荐系统

信息过载 (Information overload)

需要筛选

有明确需求

没有明确需求

解决信息过载

  1. 分类目录 -- 雅虎
  2. 搜索引擎 -- 谷歌

推荐系统也是一种帮助用户快速发现有用信息的工具。 和搜索引擎不同的是,推荐系统不需要用户提供明确的需求,而是通过分析用户的历史行为给用 户的兴趣建模,从而主动给用户推荐能够满足他们兴趣和需求的信息。

因此,从某种意义上说, 推荐系统和搜索引擎对于用户来说是两个互补的工具。

搜索引擎满足了用户有明确目的时的主动 查找需求,而推荐系统能够在用户没有明确目的的时候帮助他们发现感兴趣的新内容。

推荐系统通过发掘用户的行为,找到用户的个性化需求,从而将长尾商品准确地推荐给需要它的用户,帮助用户发现那些他们感兴趣但很难发现的商品。

  1. 社会化推荐(social recommendation),即让好友给自己推荐物品。

  2. 基于内容的推荐 (content-basedfiltering)。

  3. 基于协同过滤(collaborative filtering)的推荐。

从上面3种方法可以看出,推荐算法的本质是通过一定的方式将用户和物品联系起来,而不同的推荐系统利用了不同的方式。

通过这一节的讨论,我们可以发现推荐系统就是自动联系用户和物品的一种工具,它能够在 信息过载的环境中帮助用户发现令他们感兴趣的信息,也能将信息推送给对它们感兴趣的用户。


1.2 个性化推荐系统的应用

个性化推荐系统需要依赖用户的行为数据,主要作用是通过分析大量用户行为日志,给不同用户提供不同的个性化页面展示,来提高网站的点击率和转化率。

几乎所有的推荐系统应用都是由前台的展示页面、后台的日志系统以及推荐算法系统3部分构成的。

1.2.1 电子商务

亚马逊

1.2.2 电影和视频网站

Netflix

1.2.3 个性化音乐网络电台

1.2.5 个性化阅读

1.2.6 基于位置的服务

1.2.7 个性化邮件

1.2.8 个性化广告


1.3 推荐系统评测

什么才是好的推荐系统?这是推荐系统评测需要解决的首要问题。一个完整的推荐系统一般存在3个参与方(如图1-22所示):用户、物品提供者和提供推荐系统的网站。

因此在评测一个推荐算法时,需要同时考虑三方的利益, 一个好的推荐系统是能够令三方共赢的系统。

在推荐系统的早期研究中,很多人将好的推荐系统定义为能够作出准确预测的推荐系统。

预测准确度是推荐系统领域的重要指标(没有之一)。

这个指标的好处是,它可以比较容易地通过离线方式计算出来,从而方便研究人员快速评价和选择不同的推荐算法。

但是,很多研究表明,准确的预测并不代表好的推荐。比如准确但没有意义的推荐。

所以,好的推荐系统不仅仅能够准确预测用户的行为,而且能够扩展用户的视野,帮助用户发现那些他们可能会感兴趣,但却不那么容易发现的东西。

同时,推荐系统还要能够帮助商家将 那些被埋没在长尾中的好商品介绍给可能会对它们感兴趣的用户。这也正是《长尾理论》的作者在书中不遗余力介绍推荐系统的原因。

1.3.1 推荐系统实验方法

在推荐系统中,主要有3种评测推荐效果的实验方法,即

  1. 离线实验(offline experiment)

  2. 用户调查(user study)

  3. 在线实验(online experiment)

1. 离线实验

离线实验的方法一般由如下几个步骤构成:

(1) 通过日志系统获得用户行为数据,并按照一定格式生成一个标准的数据集;

(2) 将数据集按照一定的规则分成训练集和测试集;

(3) 在训练集上训练用户兴趣模型,在测试集上进行预测;

(4) 通过事先定义的离线指标评测算法在测试集上的预测结果。

从上面的步骤可以看到,推荐系统的离线实验都是在数据集上完成的,也就是说它不需要一个实际的系统来供它实验,而只要有一个从实际系统日志中提取的数据集即可。这种实验方法的好处是:

  1. 不需要真实用户参与,可以直接快速地计算出来。
  2. 方便、快速地测试大量不同的算法。

它的主要缺点是无法获得很多商业上关注的指标,如点击率、转化率等,而找到和商业指标非常相关的离线指标也是很困难的事情。

注意,离线实验的指标和实际的商业指标存在差距,比如预测准确率和用户满意度之间就存在很大差别,高预测准确率不等于高用户满意度。

表1-2简单总结了离线实验的优缺点。

2. 用户调查

如果要准确评测一个算法,需要相对比 较真实的环境。最好的方法就是将算法直接上线测试,但在对算法会不会降低用户满意度不太 有把握的情况下,上线测试具有较高的风险,所以在上线测试前一般需要做一次称为用户调查的测试。

用户调查需要有一些真实用户,让他们在需要测试的推荐系统上完成一些任务。在他们完成任务时,我们需要观察和记录他们的行为,并让他们回答一些问题。最后,我们需要通过分析他们的行为和答案了解测试系统的性能。

用户调查的优缺点也很明显。它的优点是:

可以获得很多体现用户主观感受的指标,相对在线实验风险很低,出现错误后很容易弥补。

缺点是:

招募测试用户代价较大,很难组织大规模的测试 用户,因此会使测试结果的统计意义不足。

此外,在很多时候设计双盲实验非常困难,而且用户在测试环境下的行为和真实环境下的行为可能有所不同,因而在测试环境下收集的测试指标可能在真实环境下无法重现。

3. 在线实验

在完成离线实验和必要的用户调查后,可以将推荐系统上线做AB测试,将它和旧的算法进行比较。

AB测试是一种很常用的在线评测算法的实验方法。它通过一定的规则将用户随机分成几组,并对不同组的用户采用不同的算法,然后通过统计不同组用户的各种不同的评测指标比较不同算法,比如可以统计不同组用户的点击率,通过点击率比较不同算法的性能。

AB测试的优点是:

可以公平获得不同算法实际在线时的性能指标,包括商业上关注的指标。

AB测试的缺点主要是:

周期比较长,必须进行长期的实验才能得到可靠的结果。

因此一般不会用 AB测试测试所有的算法,而只是用它测试那些在离线实验和用户调查中表现很好的算法。

图1-23是一个简单的AB测试系统。

用户进入网站后,流量分配系统决定用户是否需要被进行AB测试,如果需要的话,流量分配系统会给用户打上在测试中属于什么分组的标签。然后用 户浏览网页,而用户在浏览网页时的行为都会被通过日志系统发回后台的日志数据库。此时,如果用户有测试分组的标签,那么该标签也会被发回后台数据库。在后台,实验人员的工作首先是 配置流量分配系统,决定满足什么条件的用户参加什么样的测试。其次,实验人员需要统计日志数据库中的数据,通过评测系统生成不同分组用户的实验报告,并比较和评测实验结果。

一般来说,一个新的推荐算法最终上线,需要完成上面所说的3个实验。

  1. 首先,需要通过离线实验证明它在很多离线指标上优于现有的算法。
  2. 然后,需要通过用户调查确定它的用户满意度不低于现有的算法。
  3. 最后,通过在线的AB测试确定它在我们关心的指标上优于现有的算法。

1.3.2 评测指标

本节将介绍各种推荐系统的评测指标。这些评测指标可用于评价推荐系统各方面的性能。

1. 用户满意度

用户作为推荐系统的重要参与者,其满意度是评测推荐系统的最重要指标。

但是,用户满意度没有办法离线计算,只能通过用户调查或者在线实验获得。

用户调查获得用户满意度主要是通过调查问卷的形式。用户对推荐系统的满意度分为不同的层次。调查问卷不是简单地询问用户对结果是否满意,而是从不同的侧面询问用户对结果的不同感受。

在在线系统中,用户满意度主要通过一些对用户行为的统计得到。比如在电子商务网站中, 用户如果购买了推荐的商品,就表示他们在一定程度上满意。

更一般的情况下,我们可以用点击率、用户停留时间和转化率等指标度量用户的满意度。

2. 预测准确度

预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力。这主要是因为该指标可以通过离线实验计算,方便了很多学术界的研究人员研究推荐算法。

在计算该指标时需要有一个离线的数据集,该数据集包含用户的历史行为记录。然后,将该数据集通过时间分成训练集和测试集。最后,通过在训练集上建立用户的行为和兴趣模型预测用户在测试集上的行为,并计算预测行为和测试集上实际行为的重合度作为预测准确度。

由于离线的推荐算法有不同的研究方向,因此下面将针对不同的研究方向介绍它们的预测准确度指标。

  • 评分预测 -- 预测用户对物品评分的行为称为评分预测

评分预测的预测准确度一般通过均方根误差(RMSE)和平均绝对误差(MAE)计算。对于测试集中的一个用户u和物品i,令rui是用户

对物品i的实际评分,而rˆui 是推荐算法给出的预测评分,那么RMSE的定义为:

MAE采用绝对值计算预测误差,它的定义为:

关于RMSE和MAE这两个指标的优缺点, Netflix认为RMSE加大了对预测不准的用户物品评分的惩罚(平方项的惩罚),因而对系统的评测更加苛刻。研究表明,如果评分系统是基于整数建立的(即用户给的评分都是整数),那么对预测结果取整会降低MAE的误差。

  • TopN推荐 -- 网站在提供推荐服务时,一般是给用户一个个性化的推荐列表,这种推荐叫做TopN推荐。

TopN推荐的预测准确率一般通过准确率(precision)/召回率(recall)度量。

令R(u)是根据用户在训练集上的行为给用户作出的推荐列表,而T(u)是用户在测试集上的行为列表。那么,推荐结果的召回率定义为:

 

推荐结果的准确率定义为:

有的时候,为了全面评测TopN推荐的准确率和召回率,一般会选取不同的推荐列表长度N, 计算出一组准确率/召回率,然后画出准确率/召回率曲线(precision/recall curve)。

3. 覆盖率

覆盖率(coverage)描述一个推荐系统对物品长尾的发掘能力。定义为推荐系统能够推荐出来的物品占总物品集合的比例。假设系统的用户集合为 U,推荐系统给每个用户推荐一个长度为N的物品列表R(u)。那么推荐系统的覆盖率可以通过下面的公式计算:

从上面的定义可以看到,覆盖率是一个内容提供商会关心的指标。一个好的推荐系统不仅需要有比较高的用户满意度,也要有较高的覆盖率。

为了更细致地描述推荐系统发掘长尾的能力,需要统计推荐列表中不同物品出现次数的分布。如果所有的物品都出现在推荐列表中,且出现的次数差不多,那么推荐系统发掘长尾的能力就很好。如果这个分布比较平,那么说明推荐系统的覆盖率较高,而如果这个分布较陡峭,说明推荐系统的覆盖率较低。

在信息论和经济学中有两个著名的指标可以用来定义覆盖率。第一个是信息熵:

这里p(i)是物品i的流行度除以所有物品流行度之和。

第二个指标是基尼系数(Gini Index):

这里,ij是按照物品流行度p()从小到大排序的物品列表中第j个物品。

社会学领域有一个著名的马太效应,即所谓强者更强,弱者更弱的效应。如果一个系统会增大热门物品和非热门物品的流行度差距,让热门的物品更加热门,不热门的物品更加不热门,那 么这个系统就有马太效应。

4. 多样性

为了满足用户广泛的兴趣,推荐列表需要能够覆盖用户不同的兴 趣领域,即推荐结果需要具有多样性。多样性推荐列表的好处用一句俗话表述就是“不在一棵树上吊死”。

如果推荐列表比较多样,覆盖了用户绝大多数的兴趣点,那么就会增加用户找到感兴趣物品的概率。因此给用户的推荐列表也需要满足用户广泛的兴趣,即具有多样性。

多样性描述了推荐列表中物品两两之间的不相似性。因此,多样性和相似性是对应的。假设s(i, j)属于 [0,1] 定义了物品i和j之间的相似度,那么用户u的推荐列表R(u)的多样性定义如下:

而推荐系统的整体多样性可以定义为所有用户推荐列表多样性的平均值:

如果用内容相似度描述物品间的相似度,我们就可以得到内容多样性函数,如果用协同过滤的相似度函数描述物品间的相似度,就可以得到协同过滤的多样性函数。

5. 新颖性

新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。

评测新颖度的最简单方法是利用推荐结果的平均流行度,因为越不热门的物品越 可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有比较高的新颖性。

但是,用推荐结果的平均流行度度量新颖性比较粗略,因为不同用户不知道的东西是不同的。因此,要准确地统计新颖性需要做用户调查。

通 过牺牲精度来提高多样性和新颖性是很容易的,而困难的是如何在不牺牲精度的情况下提高多样性和新颖性。

6. 惊喜度

如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。

7. 信任度

提高推荐系统的信任度主要有两种方法。

首先需要增加推荐系统的透明度(transparency)。

其次是考虑用户的社交网络 信息,利用用户的好友信息给用户做推荐,并且用好友进行推荐解释。

8. 实时性

在很多网站中,因为物品(新闻、微博等)具有很强的时效性,所以需要在物品还具有时效 性时就将它们推荐给用户。

推荐系统的实时性包括两个方面。

首先,推荐系统需要实时地更新推荐列表来满足用户新的 行为变化。

实时性的第二个方面是推荐系统需要能够将新加入系统的物品推荐给用户。

9. 健壮性

健壮性(即robust,鲁棒 性)指标衡量了一个推荐系统抗击作弊的能力。

算法健壮性的评测主要利用模拟攻击。

在实际系统中,提高系统的健壮性,除了选择健壮性高的算法,还有以下方法:

  1. 设计推荐系统时尽量使用代价比较高的用户行为。

  2. 在使用数据前,进行攻击检测,从而对数据进行清理。

10. 商业目标

很多时候,网站评测推荐系统更加注重网站的商业目标是否达成,而商业目标和网站的盈利模式是息息相关的。不同的网站具有不同的商业目标。

11. 总结

对于可以离线优化的指标,我个人的看法是应该在给定覆盖率、多样性、新颖性等限制条件 下,尽量优化预测准确度。用一个数学公式表达,离线实验的优化目标是:

最大化预测准确度 使得 覆盖率>A 多样性 > B 新颖性 > C

其中,A、B、C的取值应该视不同的应用而定。

1.3.3 评测维度

上一节介绍了很多评测指标,但是在评测系统中还需要考虑评测维度,比如一个推荐算法, 虽然整体性能不好,但可能在某种情况下性能比较好,而增加评测维度的目的就是知道一个算法 在什么情况下性能最好。

一般来说,评测维度分为如下3种。

  1. 用户维度 -- 主要包括用户的人口统计学信息、活跃度以及是不是新用户等。

  2. 物品维度 -- 包括物品的属性信息、流行度、平均分以及是不是新加入的物品等。

  3. 时间维度 -- 包括季节,是工作日还是周末,是白天还是晚上等。

如果能够在推荐系统评测报告中包含不同维度下的系统评测指标,就能帮我们全面地了解推 荐系统性能,找到一个看上去比较弱的算法的优势,发现一个看上去比较强的算法的缺点。

读书笔记--推荐系统实践 第一章相关推荐

  1. 读书笔记 -- 推荐系统实践(1)

    第一章 什么是推荐算法? 推荐算法是用于解决信息过载问题的方法,链接无明确需求的用户与物品的工具. 个性化推荐 依赖于用户行为.大多数包括:前台展示页,后台日志系统以及推荐算法系统.应用情景是:存在信 ...

  2. 【读书笔记】认知心理学 第一章

    第一章 信息加工与认知(P1~P34) 心理学:对心理过程和行为的科学研究 认知心理学:对心理过程的科学研究.研究领域:对语言的注意.记忆.生成和理解.问题解决和决策. 1.1 什么是认知 早期认知过 ...

  3. 【读书笔记】道德经第一章

    第一章 道可道,非常道 道可道,非常道:名可名,非常名.无,名天地之始:有,名万物之母.故常无,欲以以观其妙:常有,欲以观其徼.此两者,同出而异名,同谓之玄,玄之又玄,众妙之门. <老子> ...

  4. 读书笔记--推荐系统实践(2)

    第二章 利用用户行为数据 用户行为数据简介 最简单的存在形式是:日志 行为数据的反馈形式以及对比: 用户行为分析 设计算法之前的分析,更有针对性的进行算法设计. 用户活跃度和物品流行度的分布:满足Po ...

  5. 推荐系统实践-第一章

    1.什么是推荐系统? --对用户的行为信息进行分析,预测数据库中用户可能感兴趣的信息. 2.推荐系统的主要任务是什么? --解决信息过载的问题 3.如何评鉴一个推荐系统的好坏? --三种方式相结合:离 ...

  6. 读书笔记---推荐系统实践(3)

    基于邻域的算法 基于领域的算法是推荐系统中最基本的算法,包括基于用户的协同过滤算法以及基于物品的协同过滤算法. 基于用户的协同过滤算法 这是推荐系统中最古老的算法,甚至可以说这个算法标志这推荐系统的诞 ...

  7. 读书笔记--推荐系统实践(4)

    这次主要谈一下对推荐系统中的用户相似度进行的一个改进. 首先有这样的一个现象,有些热门物品是很多人都共同拥有的,并不能代表兴趣所在,如:新华字典等,然而冷门物品往往可以反应兴趣所在,比如,买了数据挖掘 ...

  8. 【Python自然语言处理】读书笔记:第五章:分类和标注词汇

    jupyter 版请见我的github:https://github.com/JackKuo666/Python_nlp_notes [Python自然语言处理]读书笔记:第五章:分类和标注词汇 本章 ...

  9. 《Android开发艺术探索》读书笔记 (3) 第3章 View的事件体系

    本节和<Android群英传>中的第五章Scroll分析有关系,建议先阅读该章的总结 第3章 View的事件体系 3.1 View基本知识 (1)view的层次结构:ViewGroup也是 ...

最新文章

  1. SSH实现论坛BBS系统
  2. 线上服务CPU100%问题快速定位实战--转
  3. 代码检查规则:Java语言案例详解
  4. mysql 字段加comments_Mysql添加注释(comment)(转)
  5. POJ 1300 Door Man(欧拉回路的判定)
  6. 关于jquery的$(document).on()事件多次执行的问题
  7. 慎用javascript:void(0) 【转】
  8. 有效数据包含额外数据_设置数据有效性的一些技巧
  9. C++ 类的隐式转换之基本数据类型
  10. uipath 验证码_UiPath邮件自动化Save Attachments的介绍和使用
  11. 黑马程序员——一些常用类的代码实践
  12. 文本特征提取之TF-IDF算法(原理+Python代码)
  13. 血氧仪方案指夹式TFT指尖心率监测脉搏
  14. 基于Springboot+MyBatisPlus+Vue前后端分离大学生毕业论文答辩系统
  15. 网口压线顺序_水晶头压线顺序
  16. 店铺流量突然下滑是怎么回事,我们应该从哪些角度来分析?
  17. Ghidra Java API报NoClassDefFoundError的解决方法
  18. Gitlab Runner
  19. 周鸿祎:江湖最后一个大佬
  20. 盘点2016最值得突击的七大海外市场:最后一年窗口期,不出海就出局!

热门文章

  1. 战争是怎样发生的(博弈论的诡计)
  2. 进阶版通讯录(动态版)
  3. 微信小程序支付功能用服务器吗,微信小程序 支付功能 服务器端(TP5.1)实现...
  4. FFT算法中的倒序法
  5. XYOJ1257: 捕杀恶龙(break+j=k)
  6. 计算机鲜艳美丽的花朵教案,《鲜艳美丽的花朵》教案
  7. websocket+php+layIm实现 单聊、群聊功能 即时通讯【可发送图片文件】
  8. V2V-PoseNet:Voxel-to-Voxel Prediction Network for Accurate 3D Hand and Human Pose Estimation from...
  9. 谷歌浏览器为什么不能自动保存账户密码?
  10. 成功职业指导:我适合往管理方向发展吗?