推荐系统入门

版权声明: https://blog.csdn.net/JENREY/article/details/83028767

1. 推荐系统是什么?

推荐系统又叫个性化推荐系统,它会基于用户行为数据或物品数据,通过一定的算法,为用户推荐符合他需求的物品。

试想一下这样的场景,我们有一个电商网站,有数千万种商品。有一天,进来了三个客人,A是电子产品发烧友,B是化妆品爱好者,C超级爱买书。他们想买一些符合自己喜好的商品,但是看到密密麻麻的分类列表,大脑有点转不过来。我们呢,想最快的把商品推到他们眼前,最好能让他们第一眼就看到自己最喜欢的商品,但是我们不知道他们喜欢什么,全都推给他们显得太热情了,只挑一部分又有可能选不到他们喜 欢的东西。

唉,怎么办。

还好我们有推荐系统。

推荐系统是一种工具,它可以基于用户的历史行为数据或物品数据,通过一定的算法,为用户推荐符合需求的物品。

它主要解决两个问题,一个是信息过载,一个是用户需求的多样性(一般来说,只有同时满足这两个条件时,才会使用推荐系统,不然可能适得其反。)

2. 如何评价一个推荐系统好不好?

一个完整的推荐系统一般包含三个参与方:用户、内容提供方、网站。例如用户希望看到自己喜欢的内容,内容提供方希望将内容全面的推送到用户侧
,网站则需要平衡两者关系,达到利益最大化。一个好的推荐系统应该能够平衡三方的需求。

2.1 实验

在介绍推荐系统的指标之前,先说一下可以获得这些指标的方法。主要有三种:离线实验,用户调查,在线实验。

2.1.1 离线实验

离线实验是本次介绍推荐系统中用到最多的验证方式,简单方便,绿色无污染。

步骤:

  1. 通过日志系统获得用户行为数据,按照一定的格式生成一个标准的数据集
  2. 将数据集按照一定的规则分成训练集的和测试集
  3. 在训练集上训练用户兴趣模型,在测试集上进行预测
  4. 通过事先定义的离线指标评测算法在测试集上的预测结果

优点:

  • 不需要真实用户的参与
  • 速度快,可以测试大量算法

缺点:

  • 无法计算商业关心的指标,例如点击率、转化率等

2.1.2 用户调查

由于离线试验的指标与商业指标存在差异,高准确率不等于高用户满意度。所以,想要准确的评测一个算法,需要相对比较真实的环境。最好的方法就是直接上线测试,而由于无法确定算法的影响,上线测试会有比较大的风险,这时,我们的用户调查就派上用场了。

用户调查是推荐系统评测的一个重要工具,很多离线试验无法获得的主观感受指标都可以通过用户调查获得。

这个相信大家都不陌生,大致和产品的用户调查差不多,尽量保证双盲实验,尽量使用多样用户群,并保证用户属性的平衡。

2.1.3 在线实验

在线实验就是大杀器了,它可以统计到最真实的用户反馈和商业指标。在完成必要的离线试验和用户调查后,可以采用AB测试的方式比较新旧算法。

AB测试相信大家也不陌生,它是一种比较常用的在线评测方法,通过一定的规则将用户分成几组,对不同组的用户采用不同的算法。详细信息网上有大量介绍,这里先不提咯。

2.2 评测指标

接下来就是由这些验证方法得出的评测指标:

2.2.1 用户满意度

用户满意度当然是推荐系统最重要的指标,用户中心不用多说。但是,用户满意度无法离线计算,只能通过用户调查或在线实验得到。

2.2.2 预测准确度

这个是度量推荐系统预测用户行为的能力,是最重要的离线评测方法。由于离线的推荐算法有不同的研究方向,因此他们的预测准确度指标也不尽相同。

2.2.2.1 评分预测

评分预测是指用户会对一个物品产生怎样的评分。例如在豆瓣电影中,用户会给点击打几分。

2.2.2.2 TopN 推荐

TopN 推荐是指,用户会不会对物品感兴趣。例如在豆瓣电影中,用户对电影标记了「想看」。

TopN 推荐有两个重要指标:准确率和召回率。

  • 准确率(Precision)
    准确率是指,为用户推荐且用户感兴趣的物品,在推荐结果列表中所占的比例。
  • 召回率(Recall)
    召回率是指,为用户推荐且用户感兴趣的物品,在用户感兴趣的所有物品列表中所占得比例。

这两个参数很重要,以后我们还会在看到的:D

**2.2.3 **覆盖率(****coverage****)

覆盖率描述推荐系统对长尾的发掘能力。覆盖率没有唯一的定义方法,一个简单的定义是,推荐列表中的物品占总物品数的比例。

** 2.2.4 **多样性

** 2.2.5 **新颖性

** 2.2.6 **惊喜度

** 2.2.7 **实时性

** 2.2.8 **健壮性

唉好晚了……这几个指标稍后补充

3. 推荐系统的类别及原理

3.1 协同过滤推荐(collaborative filtering recommendation)

协同过滤可以说是推荐系统的鼻祖,是推荐系统中最成功的策略,它于20世纪90年代开始研究并促进了整个推荐系统研究的繁荣。

协同过滤算法分为两大类,分别为基于用户的协同过滤(UserCF)和基于物品的协同过滤(ItemCF)。

** 3.1.1 基于用户的协同过滤(UserCF)**

初入职场,很多新人都会问前辈相似的问题,例如“我应该看一些什么资料”、“我应该朝那个方向发展”等。这个时候,前辈会给他们做一些推荐。这就是个性化推荐的一个栗子。在这个栗子中,新人之所以问前辈,是因为他们有社会关系,并信任彼此,但更重要的是,前辈有着相似的经验,他们的发展是相似的。在个性化推荐系统中,当为用户 A 进行推荐时,可以找到和用户 A 兴趣相似的用户,把这些用户喜欢的东西推荐给 A。这种方法就叫做 UserCF 。

UserCF 的主要有两个步骤:

  1. 找出距离用户最近的邻居用户
  2. 对邻居用户相似度和邻居用户感兴趣的项目进行评价,输出推荐列表

具体过程类似于这样:

本地挺好的咋传上来就这样了呢

自己看还好好的……导到这里咋这样了

其中的核心工作是定义用户的相似度。主要有两种方法:基于关联的方法(correlation-based)和基于余弦距离的方法(cosine-based)。他们通过用户对物品的历史行为,例如评分、访问、下单、收藏等等行为,判断用户之间的相似情况。具体的公式这里暂不展开,需要的同学应该也不会看这篇文章……网上有很多介绍。

结果

本地挺好的咋传上来就这样了呢

在书中对 MovieLens 数据集的试验中,相比于完全随机推荐和完全热门排行,UserCF 在准确率与召回率上的提升都非常显著。在覆盖率上,UserCF 高于热门排行,符合预期。但在流行度上,由于 UserCF 是在参考临近用户群中被喜欢的物品,而且物品越热门,就会被更多人喜欢,从而更利于被算法推荐。

** 优化**

上文提到,越热门的物品会越容易得到推荐,如果这种情况一直发生,会导致更多的连锁反应,使热门内容越来越热门,持续优先出现在推荐结果中。同时,相对于热门内容,用户对冷门内容的喜好更容易反映他们的兴趣相似性。所以,我们可以降低热门内容的权重,或过滤热门内容,提高推荐系统的性能。

** 3.1.2 基于物品的协同过滤(ItemCF)**

ItemCF 可能是目前业界应用最多的算法,无论是亚马逊,还是 Netflix、Hulu、YouTube,其算法基础都是 ItemCF。(书里说的)

ItemCF 的原理是,为用户推荐那些和他之前喜欢的物品相似的物品。例如,算法可能会因为用户买过《推荐系统实践》而为用户推荐《推荐系统》。需要注意的是,ItemCF 不是根据物品本身的内容来进行相似度匹配,而是通过用户对物品的行为数据计算物品之间的相似度。算法认为,物品 A 与物品 B 相似的原因是喜欢物品 A 的用户大多也喜欢物品 B。

ItemCF 主要也是两个步骤:

  1. 找到距离物品最近的邻居物品
  2. 对邻居物品的相似度和用户兴趣进行评价,输出推荐列表

图和上面一样:

ItemCF 和 UserCF 的方法很相似,其核心工作是定义物品的相似度,也是有两种方法……(也是和上面一样)

** 结果**

在书中对 MovieLens 数据集的实验中,可以看出,尽管计算过程中没有利用任何内容数据,具有同种属性(例如同系列、同主角、同导演等)的电影仍然表现出较大的相似度。

** 优化**

  1. 就像 UserCF 一样,过于活跃的用户也会对物品的相似度判定造成影响,例如一个用户标记了产品中80%的物品,那么由于这种行为,80%的物品就会产生两两之间的相似度,如果物品量足够大,很有可能形成一个很大的稠密矩阵。所以,我们可以通过惩罚活跃用户的方式来优化推荐结果。经验证,这种优化能提高算法的覆盖率,降低流行度。

  2. 归一化。假设物品分为两类,A 和 B,A 类的物品之间相似度为0.5,B 类物品之间的相似度为0.6,而 A 类物品和 B 类物品之间的相似度为0.2。在这种情况下,如果一个用户喜欢了5个 A 类物品和5个 B 类物品,我们用 ItemCF 为其推荐,推荐的结果就会都是 B 类物品——因为 B 类物品的相似度较大。
    但这个不合理啊。
    归一化之后,A 类物品与 B 类物品自身的相似度都变成1,那么推荐结果中 A 类物品和 B 类物品的量就会大致相等。经验证,归一化对推荐算法的准确率和覆盖率都有有效提升。

3.1.3 UserCF 和 ItemCF 的比较

** 从原理上看:**

UserCF 以用户为基础,通过邻居用户来匹配物品,是一种兴趣圈子内的推荐,注重于兴趣圈内的热点;ItemCF 以物品为基础,通过邻居物品匹配物品,注重于维系用户的历史兴趣。也就是说,UserCF 更加社会化和热门,ItemCF 更加个性化和封闭。

从技术上看:

UserCF 需要维护一个用户相似度的矩阵,ItemCF 需要维护一个物品相似度矩阵。如果用户很多,那么维护用户相似度矩阵就需要很大的空间;如果物品很多,维护物品相似度矩阵也会花费较大代价。所以 UserCF 适合用户量较少的产品,ItemCF 适合物品量较少的产品。

具体到指标时:

两种算法的准确率和召回率相差不大,不过在覆盖率上,UserCF 会明显小于 ItemCF,原因是 UserCF 会推荐小群体中的热门物品,而 ItemCF 会基于历史兴趣,推荐物品关联的结果(有可能出现冷门内容)。这样看来,虽然在整体上 ItemCF 的覆盖率较高,但是对于用户来说,物品的多样性反而可能更低。

关于冷启动:

如果新用户对某些产品产生了行为,在 UserCF中,是不能立即更新推荐列表的,因为用户相似度需要每隔一段时间离线计算;而在 ItemCF 中,用户只要对一个物品产生行为,就可以为他推荐类似的物品,例如亚马逊的「买过 XXX 的人也买」。

当物品上线一段时间后,在 UserCF 中,一旦用户对新品产生行为,就可以将新品推荐给相似用户;而在 ItemCF 中,没有办法在不离线更新物品相似度的情况下将物品推荐给用户。

也就是说:

两种算法都不完美,应该具体到每个产品去决定用哪种基础算法。在常见的产品中,个人感觉 ItemCF 的应用比较多(如果它们用的是 CF 的话),例如淘宝的物品推荐、今日头条的新闻推荐、百度的广告、亚马逊的商品推荐等;似乎豆瓣电影的豆瓣猜是用的 UserCF?不太确定。

3.2 基于内容的推荐(content-based recommendation)

基于内容的推荐是指根据用户选择的物品,推荐其他有类似属性的物品。它不同于 ItemCF,通过物品的特征属性来判定物品之间的相似度,再根据用户历史行为的特征分析,得到推荐结果。例如在进行电影的推荐时,分析用户之前选择的电影的共性,得到用户的兴趣特征,再与电影的特征作匹配。

此种推荐算法的关键工作有两项,一是物品特征的描述,二是用户模型的确定。

目前,对于物品特征描述,对文字的特征提取方法比较成熟,但对于多媒体的提取仍然不理想。幸好,我们还可以采用专家标记特征和用户标记特征的方法。据说 Spotify 成立时,就采用了专家标记特征的方式,做基于内容的推荐,同时还可以解决冷启动问题;豆瓣的物品标签是用户标记特征的一个例子,通过用户标记的标签,组织内容推荐。

3.3 基于知识的推荐(knowledge-based recommendation)

这部分还没太看懂,个人认为基于知识的推荐就像一个有限状态机,需要对每种场景定制推荐规则。以后完善。

3.4 组合推荐(hybrid recommendation)

由于每种推荐算法都存在各自的优缺点,如果能把他们的优点相融合,有可能得到优于每种单一算法的结果。其中研究最多的是内容推荐和协同过滤的融合。

融合方式大致可以分为三类:

  1. 分别使用每种算法,得出结果后对结果进行排序、挑选、融合;
  2. 使用一种主算法搭建框架,将其它算法融合进去,再进行推荐;
  3. 将几种算法整合在一个框架内,在统一的模型下进行推荐。

个人感觉组合推荐效果会更好,但是没有找到过多实例证明。待以后补充。

阅读更多
换一批

没有更多推荐了,返回首页