什么是协同过滤推荐算法?

Posted little-li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是协同过滤推荐算法?相关的知识,希望对你有一定的参考价值。

剖析千人千面的大脑——推荐引擎部分,其中这篇是定位:对推荐引擎中的核心算法:协同过滤进行深挖。

首先,千人千面融合各种场景,如搜索,如feed流,如广告,如风控,如策略增长,如购物全流程等等;其次千人千面的大脑肯定是内部的推荐引擎,这里有诸多规则和算法在实现对上述各个场景进行“细分推荐排序”;最后是推荐引擎的算法又以“协同过滤”为最核心、最主流热门,也是当下众多内容型、电商型、社交工具、分发型的基础。

由于协同过滤的算法介绍,网上也蛮多但片段化。要么侧重讲“原理流程”,这个占了4成;要么讲算法公式,这个占5成;还有1成是偏向业务的理解,但这个笼统很难参考。

因此,这篇是属于推荐引擎-理论搭建体系-之二,PM可以侧重关注:

(1)了解协同过滤之前,先知道什么是:集体智慧。(没有对比就没有“感知”,这个集体智慧是更好帮助了解、对比协同过滤。因为网上很多片段化的文章,没有对比出来,不利于PM去联想和学习的)

(2)了解什么是协同过滤(这点偏向理论,网上的很多也如此。但我挑选了精简部分,就只要2点关键:1知道它有什么作用,2为什么需要是它)

(3)学习协同过滤的核心。要实现包括三大重要部分:【干货,核心】

  1. 一是收集用户偏好(知道为什么要收、收哪些哪样的、如何收集、收集过程有什么原则?);
  2. 二是找到相似的用户或者物品(这里的核心有2大方面:1是怎样定义算“相似”,属于相似度问题,用什么公式去计算、有什么特点;2是相似邻居问题,可用什么公式计算两个相似邻居);
  3. 三是计算推荐(这里核心是基于物品的方式是如何计算推荐、基于用户又是如何、两者PK又有什么差异点,如在场景,多样性)每个部分再挖出各个关键点、(学习,不是了解,是学习)

(4)举个推荐引擎中-应用协同过滤的实践案例。国外的产品案例。(包括如何使用,用什么公式,什么场景,有什么问题,怎么解决,代码层面附录。PS:为什么选国外呢? 是因为这个推荐最早是应用于国外,不管是算法还是理论层面,确实要比国内深究多一分,觉得比较客观,可以参考和适用更强,这点可以跳着看。)

以上,个人认为走推荐、画像、搜索等PM核心要掌握第(1)~(3)部分,公式可以除外。其他策略PM们也可以关注各种的原理、特点、面试关键词,以用来作为谈资、需求筹码、面试拔高、综合素质的层次跨越获取高薪。

一、集体智慧和协同过滤

1. 什么是集体智慧

(1)原理和介绍:

集体智慧 (Collective Intelligence) 并不是 移动互联网时代特有的,只是在移动互联网时代,大家在 Web 应用中利用集体智慧构建更加有趣的应用或者得到更好的用户体验。

核心原理:

集体智慧是指在大量的人群的行为和数据中收集答案,帮助你对整个人群得到统计意义上的结论,这些结论是在单个个体上无法得到的,它往往是某种趋势或者人群中共性的部分。

(PS:从上面可以知道,这里的“结论”是提取共性。这里的本质应用就可以是推荐系统的“人以群分,物以类聚”思想。)

(补充1:)

集体智慧(Collective Intelligence,CI),简称集智,它是一种共享的或群体的智能。

在互联网时代之前就存在,可以分为两面去看:

  • 在网络时代来临之前,集体智慧就一直活跃在生物学、社会学、计算机科学、大众行为学等领域 [1] [2] 。
  • 随着Web 2.0的崛起和社会性软件的普及,集体智慧这在社交网络服务、众包、分享、评论和推荐等领域也得到了广泛应用 [3] (典型案例包括:维基百科、百度百科、百度知道、猪八戒网、任务中国、Threadless、InnoCentive、digg、iStockphoto、Mechanical Turk等。)

(补充2:)

为什么会补充说明这个?有2个原因:一是有些饭友不太清楚;二是我觉得这个概念其实很多公司、业务、产品在设计、在做策略、在做发展都离不开,多多少少会掺和到,所以抛出这个概念,可以让大家注意到。

总之越来越多的传统公司和组织也开始使用各种集体智慧平台或工具,借助外部智慧以解决复杂问题。尤其现在主推的各种智能平台,智能城市、策略。

(2)从案例去看:

Wikipedia 和 Google 是两个典型的利用集体智慧的 移动互联网 应用:

【Wikipedia】(维基百科)

  • 入口:https://www.wikipedia.org/
  • Wikipedia 是一个知识管理的百科全书。(相对于传统的由领域专家编辑的百科全书)
  • Wikipedia 允许最终用户贡献知识,随着参与人数的增多,Wikipedia 变成了涵盖各个领域的一本无比全面的知识库
  • 所以在 Wikipedia 上,这种改版和修正被变为每个人都可以做的事情,任何人发现错误或者不完善都可以贡献他们的想法,即便某些信息是错误的,但它一定也会尽快的被其他人纠正过来。从一个宏观的角度看,整个系统在按照一个良性循环的轨迹不断完善,这也正是集体智慧的魅力。

(补充:或许也许有人会质疑它的权威性,但如果你从另一个侧面想这个问题,也许就可以迎刃而解。在发行一本书时,作者虽然是权威,但难免还有一些错误,然后通过一版一版的改版,书的内容越来越完善。(饭友们可以回忆思考下。常见的个性化推荐产品,如电商,如头条,网易等等,不管是推荐系统也好,搜索也罢,各种策略产品,是不是都说你越使用、越反馈,越懂你,越精准,这里的本质原理是“相通”的))

【Google】(姑姑,哈哈)

  • 入口:https://www.google.com.hk/ (PS被封杀需FQ)
  • Google:目前最流行的搜索引擎,与 Wikipedia 不同,它没有要求用户显式的贡献,但仔细想想 Google 最核心的 PageRank 的思想,它利用了 Web 页面之间的关系,将多少其他页面链接到当前页面的数目作为衡量当前页面重要与否的标准;

或许饭友们绝对这不好理解,那么你可以把它想象成一个选举的过程,每个 Web 页面都是一个投票者同时也是一个被投票者,PageRank 通过一定数目的迭代得到一个相对稳定的评分。Google 其实利用了现在 Internet 上所有 Web 页面上链接的集体智慧,找到哪些页面是重要的。

(饭友们同样可思考下:这里的页面上各种的链接,找到哪些页面,是不是和我们很多内容型产品,找到相似的内容资料,如文章,如视频等相似呢? 这里“投票者”其实可以理解是用户对内容的行为反馈)

(补充1:这里的web页面不算仅指PC端,也是包含移动端。更多是泛指产品中的每个”网络页面”。)

2. 什么是协同过滤

(1)怎么去理解呢?

协同过滤是利用集体智慧的一个典型方法。

(PS,协同过滤是推荐的核心算法,即集体智慧和推荐是关系的,个中原理参见上面所说的。)

要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题:

  • 如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?
  • 大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。

核心原理:协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。

(2)会遇到什么问题?

当然其中有一些核心的问题:

  • 如何确定一个用户是不是和你有相似的品位?(数据,动作,用户/内容画像)
  • 如何将邻居们的喜好组织成一个排序的目录?(召回,排序,推荐)

如同第一章所说,同样与集体智慧PK。可以发现:

协同过滤相对于集体智慧而言,它从一定程度上保留了个体的特征,就是你的品位偏好,所以它更多可以作为个性化推荐的算法思想。

(补充2:所以可以想象,这种推荐策略在 移动互联网 的长尾中是很重要的,将大众流行的东西推荐给长尾中的人怎么可能得到好的效果,所以回到推荐系统的一个核心问题:了解你的用户,然后才能给出更好的推荐。)

二、深入协同过滤的核心

前面作为背景知识,介绍了集体智慧和协同过滤的基本思想,主要是为饭友们对推荐相关的打一些基础和铺垫。

接下来,下面这一节将深入分析协同过滤的原理,介绍基于协同过滤思想的多种推荐机制,优缺点和实用场景。

(核心1、面试问题坑、需求反推工作量思考:协同过滤的基本核心有3个要素。)

首先,要实现协同过滤,需要一下几个步骤:

  • 收集用户偏好;
  • 找到相似的用户或物品;
  • 计算推荐。

1. 收集用户偏好

原理作用:

一句话:要从用户的行为和偏好中发现规律,并基于此给予推荐。所以,如何收集用户的偏好信息成为系统推荐效果最基础的决定因素。(前者饭友PM都知道,后者是面试或需求中常会问)

2. 核心策略:如何收集呢?

(即用户有很多方式向系统提供自己的偏好信息,而且不同的应用也可能大不相同,下面举例进行介绍。以下可以作为需求分析、口径定义使用。)

(补充1:面试坑:当问到具体的用户偏好收集、如何定义行为、权重、正负反馈等相关问题,实际就是这节相关内容,所以下面的案例都可以参考回答,基本对全产品都通用,具有很强的适用性。)

(补充2:这种类型相关的,可以参考以前社区的一些文章,以下我找了一些:)

  • 【重要/实践】腾讯视频推荐策略:播放结束后,如何进行推荐策略思考?
  • 【快课/实践】剖析京东JD在“猜你喜欢”的产品设计+推荐策略。

(补充3:有很多办法和操作,具体业务,具体产品都可能不太同。我也无法罗列完全,但挑选了业内常用,实用性和发散性好的。如下表:)

(补充4:PS: 布尔值是“真” True 或“假” False 中的一个。代码层有时也会在适当时将值 True 和 False 转换为 1……)

通用、标准的:

技术图片

(表 1 用户行为和用户偏好)

偏业务:如内容型(以腾讯视频为例)

上面已经提过了。

再举个形象例子:你说你很爱你女友;女友反问:你有多爱?如果女友是讲情义的,那么你就给以前为她做过的DIY礼物打上最高权重,优先展示说出这些内容;如果女友是讲金钱的,那么你就准备为她买过的、即将买的iPhoneXS送她,优先物质。权重,就是优先级,重要性。

下面的,可以直接应用到视频平台的推荐赋值,还是比较全面的。但是,我建议还是要思考到业务情况,赋值和权项范围是要视情况调整。

技术图片

偏业务:如服务型(以美团为例)

  • 用户特征
  • 人口属性:用户年龄,性别,职业等。
  • 行为特征:对商户/商圈/品类的偏好(实时、历史),外卖偏好,活跃度等。
  • 建模特征:基于用户的行为序列建模产生的特征等。
  • 商户特征
  • 属性特征:品类,城市,商圈,品牌,价格,促销,星级,评论等。
  • 统计特征:不同维度/时间粒度的统计特征等。
  • 图像特征:类别,建模特征等。
  • 业务特征:酒店房型等。
  • Query特征
  • 分词,意图,与商户相似度,业务特征等。
  • 上下文特征
  • 时间,距离,地理位置,请求品类,竞争情况等。
  • 广告曝光位次。

(其他如电商也是同理,在这里就不一一梳理。有兴趣可以看社区的用户画像、推荐等专辑内容,里面有不同细分类的梳理,由于这些是要结合,所以会相对分散到某个不同细分领域的产品或业务上。)

总结-提取策略、方法论:

(补充1:下面是对提上述的一些“收集特征、权重赋值”等抽象出“可复用”的思想。)

(补充2:)【面试坑、问题点】

关于策略类PM都离不开大数据的行为收集,特征定义。下面是对这些细分的总结。我梳理每个独立的点,都可以回答。回答的问题范围是“上述案例的一些“关键词””,所以建议先回答下面的一些要点,若面试官深挖再回答上面的细分案例。

(补充3:上述回答逻辑,即总-分-分原理,这样有助于逻辑回答,也有助于符合面试的不断深挖过程。尽量避免一开始就回答具体,这样会让面试官一来问的更细,反而出现没有学习和复盘到而出现更多意外,二来也是给各自心理门槛,即过三关心理,面试官深入问的,你基本都能回答出。)

下面不用产品这个词,而是用“应用”,泛指更多端的产品

策略1:

以上列举的用户行为都是比较通用的、经典业务的。但是如果是推荐、搜索等PM,是可以根据自己应用(业务、产品)的特点添加特殊的用户行为,并用他们表示用户对物品的喜好。

策略2:

方法论,面试可以分享,大大加分!

在一般应用中,提取的用户行为一般都多于一种,关于如何组合这些不同的用户行为,基本上有以下两种方式:(策略、方法论)

  • 【将不同的行为分组】:(假设以第一个案例为例),一般可以分为“查看”和“购买”等等,然后基于不同的行为,计算不同的用户 / 物品相似度。类似于当当网或者 Amazon 给出的“购买了该图书的人还购买了 …”,“查看了图书的人还查看了 …”
  • 【用户、行为加权】:(假设以第二个案例为例),根据不同行为反映用户喜好的程度将它们进行加权,得到用户对于物品的总体喜好。(有些饭友联系到画像内容,这里我要补充下:一般来说,显式的用户反馈比隐式的权值大,但比较稀疏,毕竟进行显示反馈的用户是少数;同时相对于“查看”,“购买”行为反映用户喜好的程度更大,但这也因应用而异。)

【补充:上面的全部,都可以作为针对“如何组合、提取用户行为”的面试问题,所表达的观点,这肯定会加分,并且这些都是关键知道思想。就如同可以理解成:以前走农村包围城市的战略,其根本指导思想是:如论持久战。 所以上面1-3的例子是做法,那么作为策略PM一个核心的点是,你要学会有方法策略,怎么能迁移复用。这里的指导思想就如上面所说的,虽然不一定说完整全面,但对于大部分互联网产品,都是这个原理。】

策略3:

当策略PM做到上面之后,也就是收集了用户行为数据之后,接下来还需要对数据进行一定的预处理。

常问的问题类似:你觉得在收集数据/用户数据、数据源等处理等等,要注意什么。或者遇到什么的坑,或者说你是怎么想的,总之核心是“数据处理”。这个对于画像PM等底层数据PM,一定会问!

其中最核心的工作就是:减噪和归一化。

减噪:用户行为数据是用户在使用应用过程中产生的,它可能存在大量的噪音和用户的误操作,可以通过经典的数据挖掘算法过滤掉行为数据中的噪音,这样可以是的分析更加精确。

(补充1:这里具体的方法,算法等细节,可以参考用户画像等相关内容,这话题又比较大,此处不展开了。只要知道什么回事即可。)

归一化:如前面讲到的,在计算用户对物品的喜好程度时,可能需要对不同的行为数据进行加权。但可以想象,不同行为的数据取值可能相差很大。

例子1:比如,用户的查看数据必然比购买数据大的多,如何将各个行为的数据统一在一个相同的取值范围中,从而使得加权求和得到的总体喜好更加精确,就需要进行归一化处理。

例子2:从以往实战来看,最简单的归一化处理:就是将各类数据除以此类中的最大值,以保证归一化后的数据取值在 [0,1] 范围中。

n同上补充的点,这个相对抽象,饭友们可以结合我举得例子去理解~

(补充2:即上面所做,当进行的预处理后(这个一般可以和数据和开发一起搞),根据不同应用的行为分析方法,可以选择分组或者加权处理,之后可以得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是 [0,1] 或者 [-1, 1] 的浮点数值。)

图另外后面再配。就是数组矩阵的样式,如果很抽象就简单理解成excel表左列右行的样式。

2. 找到相似的用户或物品

原理:当已经对用户行为进行分析得到用户喜好后,可以根据用户喜好计算相似用户和物品,然后基于相似用户或者物品进行推荐。

目前主流的,都是围绕最典型的 CF 的两个分支:

  • 基于用户的 CF ;
  • 基于物品的 CF;

策略1、面试问题:

这两种方法都有个共同核心:就是都需要计算相似度。

所以,下面先看看最基本的几种计算相似度的方法。

由于涉及到计算,那就肯定会有各种公式。否则根本不能说算法。所以下面有相关的技术细节,可能有技术和算法逻辑强的PM能看得很明白。但没有这方面基础的,也没关系,下面我梳理都会按大白话和尽可能了解的语言去讲述原理。

(补充1:还是要说个很现实的事情。这篇依然有一丢的技术术语,PM不理解或者不明白是很正常的,但如果连百度、连问查找都不愿意,那谈何学习和成长呢?要知道,你薪资涨幅高低、大厂公司offer等依然有一堆PM在与你竞争。)

(1)相似度的计算

策略1:

关于相似度的计算,现有的几种基本方法都是基于向量(Vector)的。(饭友其实简单理解,也就是计算两个向量的距离,距离越近相似度越大。)

计算相似度逻辑1:(面试细节)

在推荐的场景中,在用户 – 物品偏好的二维矩阵中:

  1. 可以将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,
  2. 或者将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度。

——————————分割线(下面是技术细节+推荐PM角度的阐述)——————

(补充2:由于涉及到公式,所以一定要保证全面性。所以每个相似度计算方法都附上了:原理、公式、关键点、面试常会问到的细节。饭友们各取所需。)

下面详细介绍几种常用的相似度计算方法:

欧几里德距离(Euclidean Distance)

【原理】:最初用于计算欧几里德空间中两个点的距离,假设 x,y 是 n 维空间的两个点,它们之间的欧几里德距离是:

技术图片

【关键点、面试细节】:

可以看出,当 n=2 时,欧几里德距离就是平面上两个点的距离。

当用欧几里德距离表示相似度,一般采用以下公式进行转换:距离越小,相似度越大。

技术图片

皮尔逊相关系数(Pearson Correlation Coefficient):

【原理】:皮尔逊相关系数一般用于计算两个定距变量间联系的紧密程度,它的取值在 [-1,+1] 之间。

技术图片

sx, sy是 x 和 y 的样品标准偏差。

Cosine 相似度(Cosine Similarity)

Cosine 相似度被广泛应用于计算文档数据的相似度:

技术图片

Tanimoto 系数(Tanimoto Coefficient)

Tanimoto 系数也称为 Jaccard 系数,是 Cosine 相似度的扩展,也多用于计算文档数据的相似度:

技术图片

——————————分割线(下面是原理思想细节+推荐PM角度的阐述)——————

补充3:说回重点。后面我想单纯只讲公式没有太多意义。为何?

  1. 是因为策略PM不一定要知道公式,只需知道原理和思想,知道什么场景该适合用啥;
  2. 单纯说公式没意思,不是开发开始不懂那么多,这样子失去原来的意义;
  3. 不能结合业务也没意义。虽然这个没办法在这里展开,因为太细了,我也没那么全面;

因此,我针对上面提到的计算方式,用大白话去讲解各种的原理。

这里的原理是指:公式本身都是计算,都是为了解决同一个问题。所以假设A找B为目标,那么A会怎样去找?会通过什么方式、什么流程、遇到什么问题、怎么解决。

【PS:这个可以理解是 :如果我想得到10的数字,那么可以用乘法、加法、减法、除法、取余、逻辑运算、同异法等等。如5+5=10、5*2=10,15-5=10,这些都是公式,但本质还是为了得到10,只是可能场景不同我们思考的方向不一样。

所以大家不要看到公式那么怕,百度下或者有兴趣有空看看,这里面比我们之前学高数、高考都简单不少的~ 】

以下基本80%都是PM可以看得懂的,但前提是要静心慢慢看。

毕竟这方面是有门槛的,但正因为有门槛才有壁垒,有壁垒才是产品力、核心竞争力之一,少了难了才会更缺、更值钱和难替换。

同理,我会以PM角度附上了:原理、公式、关键点、面试常会问到的细节。饭友们各取所需。)

(2)相似邻居的计算

上面介绍完相似度的计算公式、逻辑、面试坑、@开发RD交流细节,下面看看如何根据相似度找到用户-物品的邻居:

常用的挑选邻居的原则可以分为两类:

补充了图:图 1 给出了二维平面空间上点集的示意图。

固定数量的邻居:K-neighborhoods 或者 Fix-size neighborhoods。

【原理】:不论邻居的“远近”,只取最近的 K 个,作为其邻居。(下面是流程、逻辑想法)

  • 如图 1 中的 A,假设要计算点 1 的 5- 邻居,那么根据点之间的距离,取最近的 5 个点,分别是点 2,点 3,点 4,点 7 和点 5。
  • 但很明显可以看出,这种方法对于孤立点的计算效果不好。
  • 【核心问题,如果细节会问到-即为什么的解答】因为要取固定个数的邻居,当它附近没有足够多比较相似的点,就被迫取一些不太相似的点作为邻居,这样就影响了邻居相似的程度。(比如图 1 中,点 1 和点 5 其实并不是很相似。)

基于相似度门槛的邻居:Threshold-based neighborhoods

【原理】:

  • 与计算固定数量的邻居的原则不同,基于相似度门槛的邻居计算是对邻居的远近进行最大值的限制,落在以当前点为中心,距离为 K 的区域中的所有点都作为当前点的邻居,
  • 这种方法计算得到的邻居个数不确定,但相似度不会出现较大的误差。
  • 如图 1 中的 B,从点 1 出发,计算相似度在 K 内的邻居,得到点 2,点 3,点 4 和点 7。
  • 【核心观点,问为什么认为好】这种方法计算出的邻居的相似度程度比前一种优,尤其是对孤立点的处理。

图1. 相似邻居计算示意图:

技术图片

3. 计算推荐

经过前期的计算已经得到了相邻用户和相邻物品,下面介绍如何基于这些信息为用户进行推荐。

本系列的上半场,~已经简要介绍过基于协同过滤的推荐算法可以分为基于用户的 CF 和基于物品的 CF,所以按逻辑去看,下面深入这两种方法的计算方法,

PM主要关注是:计算的基本原理、使用场景和优缺点。(这个是高频面试问法、考点,让你介绍下原理思想。)

(1)基于用户的 CF(User CF)

基于用户的 CF 的基本思想相当简单!

【原理】:基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。

(PS:请看我梳理出来的思考流程,看文字+看图配合更好理解。)

  1. 计算就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度(找领居)
  2. 找到 K 邻居后,根据邻居的相似度权重以及他们对物品的偏好,(看邻居偏好)
  3. 预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。(召回排序)

以上。作为面试或者分享你对这个原理的看法,绝对是可以用。

(下面图 2 就是一个例子,对于用户 A,根据用户的历史偏好,这里只计算得到一个邻居 – 用户 C,然后将用户 C 喜欢的物品 D 推荐给用户 A。)

图 2.基于用户的 CF 的基本原理:

技术图片

(2)基于物品的 CF(Item CF)

基于物品的 CF 的原理和基于用户的 CF 类似!!!

【原理】:只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。

(PS:请看我梳理出来的思考流程,看文字+看图配合更好理解。)

  1. 从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,(找用户偏好的“共性”物品)
  2. 得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。(预测召回,排序)

(举个例子,如图 3 ,对于物品 A,根据所有用户的历史偏好,喜欢物品 A 的用户都喜欢物品 C,得出物品 A 和物品 C 比较相似,而用户 C 喜欢物品 A,那么可以推断出用户 C 可能也喜欢物品 C。)

图 3.基于物品的 CF 的基本原理:

技术图片

(3)User CF vs. Item CF

前面介绍了 User CF 和 Item CF 的基本原理,下面分几个不同的角度深入看看它们各自的优缺点和适用场景:

计算复杂度:Item CF 和 User CF 是基于协同过滤推荐的两个最基本的算法。

User CF 是很早以前就提出来了,Item CF 是从 Amazon(亚马逊,成为市值第一的公司,不是没有道理的……) 的论文和专利发表之后(2001 年左右)开始流行,

大家都觉得 Item CF 从性能和复杂度上比 User CF 更优,其中的一个主要原因就是:

  1. 对于一个在线网站,用户的数量往往大大超过物品的数量,同时物品的数据相对稳定,因此计算物品的相似度不但计算量较小,同时也不必频繁更新。(但只是适用一些电商)
  2. 但往往忽略了这种情况只适应于提供商品的电子商务网站,对于新闻,博客或者微内容的推荐系统,情况往往是相反的,物品的数量是海量的,同时也是更新频繁的。

面试挖坑:用户海量、内容物品海量,因此要看产品实际情况而去使用相应的协同过滤算法,不能一概而论。

所以单从复杂度的角度,这两个算法在不同的系统中各有优势,推荐引擎的设计者需要根据自己应用的特点选择更加合适的算法。

适用的场景:

场景策略:在非社交网络的网站中:内容内在的联系是很重要的推荐原则,它比基于相似用户的推荐原则更加有效。

可以看到,在这种情况下我认为有几个很重要的点:

  • Item CF 的推荐成为了引导用户浏览的重要手段 。(比如在当当网(购书网站)上,当你看一本书的时候,推荐引擎会给你推荐相关的书籍,这个推荐的重要性远远超过了网站首页对该用户的综合推荐。)
  • 同时 Item CF 便于为推荐做出解释。(在一个非社交网络的网站中,给某个用户推荐一本书,同时给出的解释是某某和你有相似兴趣的人也看了这本书,这很难让用户信服,因为用户可能根本不认识那个人;但如果解释说是因为这本书和你以前看的某本书相似,用户可能就觉得合理而采纳了此推荐。)
  • 相反的,在现今很流行的社交网络站点中,User CF 是一个更不错的选择,User CF 加上社会网络信息,可以增加用户对推荐解释的信服程度。
  • 推荐多样性和精度。

一般来说,刚开始研究推荐引擎的学者们在相同的数据集合上分别用 User CF 和 Item CF 计算推荐结果,发现推荐列表中,只有 50% 是一样的,还有 50% 完全不同。

(但是这两个算法确有相似的精度,所以可以说,这两个算法是很互补的。具体怎么度量,可以参考下面梳理的几个方面。一是整体的度量方法,而是不同的业务指标)

度量策略-两种经典方法:

(PS:无涉及具体业务,可通用)

补充1面试坑:常问到的:如你如何衡量推荐效果好不好? 从技术指标?业务指标如何看? 不同业务下又如何观察,验证? 改善?。

补充:2类似的可以以前饭团的内容,如:

  • 【重要】衡量个性化推荐产品效果的核心指标有哪些?
  • 【实践】浅析建立个性化推荐数据指标体系&实践(以电商为例)

关于推荐的多样性,有两种度量方法:

  • 第一种度量方法:是从单个用户的角度度量。

就是说给定一个用户(见下补充),查看系统给出的推荐列表是否多样。(直观)

也就是要比较推荐列表中的物品之间两两的相似度,不难想到,对这种度量方法,Item CF 的多样性显然不如 User CF 的好,因为 Item CF 的推荐就是和以前看的东西最相似的。

(补充1 ,可作为面试细节:这里的用户,一般在我们PM可以叫白名单用户、随机用户、抽样用户、分组测试用户、体验用户都可以~ 具体看业务规则策略。如我以前做这方面验证会分两种情况:如特定场景会分组用户测试(侧重是对场景的验证,白名单)、如果是走量测试机率、抗压等等,就导出随机大量。后者一般有条件都可以联合用户画像去勾选某些条件的用户群))

  • 第二种度量方法是考虑系统的多样性,也被称为覆盖率 (Coverage),它是指一个推荐系统是否能够提供给所有用户丰富的选择。

在这种指标下,Item CF 的多样性要远远好于 User CF(因为 User CF 总是倾向于推荐热门的),从另一个侧面看,也就是说,Item CF 的推荐有很好的新颖性,很擅长推荐长尾里的物品。

所以,尽管大多数情况,Item CF 的精度略小于 User CF, 但如果考虑多样性,Item CF 却比 User CF 好很多。

PK的实践分析:

面试策略:在面试的时候,尤其刚入门推荐的PM可能会问到深入:你为什么说UCF和ICF是这样,为什么就说它的多样性会更好… 这时候,你需要有一些的原理、实践策略反推出支撑。

所以,存在上面的情况,或者是如果对推荐的多样性还心存疑惑,那么下面再举个实例看看 User CF 和 Item CF 的多样性到底有什么差别。

(补充:我按思考的金字塔原理梳理以下几点。每一点都可以作为单独“结论”。即假设谈需求、面试的时候:你针对这个类似问题可以回答以下的任一点。如果他细问再联系上下几点。当然,你熟悉之外就请随便搭,这样的方法只是方便对这方面基础不太扎实的PM。)

个人推荐的顺序是: 1-2、 2、1-3,都可以用于作答。

  1. 首先,假设每个用户兴趣爱好都是广泛的,喜欢好几个领域的东西,不过每个用户肯定也有一个主要的领域,对这个领域会比其他领域更加关心。
  2. 给定一个用户,假设他喜欢 3 个领域 A,B,C,A 是他喜欢的主要领域,这个时候来看 User CF 和 Item CF 倾向于做出什么推荐:
  3. 如果用 User CF, 它会将 A,B,C 三个领域中比较热门的东西推荐给用户;
  4. 而如果用 ItemCF,它会基本上只推荐 A 领域的东西给用户。
  5. 那么看到因为 User CF 只推荐热门的,所以它在推荐长尾里项目方面的能力不足;
  6. 而 Item CF 只推荐 A 领域给用户,这样他有限的推荐列表中就可能包含了一定数量的不热门的长尾物品,同时 Item CF 的推荐对这个用户而言,显然多样性不足。
  7. 但是对整个系统而言,因为不同的用户的主要兴趣点不同,所以系统的覆盖率会比较好。

从上面的分析,可以很清晰的看到:这两种推荐都有其合理性,但都不是最好的选择,因此他们的精度也会有损失。

怎么优化、解决?

其实对这类系统的最好选择是:

如果系统给这个用户推荐 30 个物品,既不是每个领域挑选 10 个最热门的给他,也不是推荐 30 个 A 领域的给他,而是比如推荐 15 个 A 领域的给他,剩下的 15 个从 B,C 中选择。

解决策略:所以结合 User CF 和 Item CF 是最优的选择。

  1. 结合的基本原则就是:当采用 Item CF 导致系统对个人推荐的多样性不足时,通过加入 User CF 增加个人推荐的多样性,从而提高精度,
  2. 而当因为采用 User CF 而使系统的整体多样性不足时:可以通过加入 Item CF 增加整体的多样性,同样同样可以提高推荐的精度。

用户对推荐算法的适应度:

毕竟之前更多是谈引擎特性去考虑,除了上面小谈用户,我在这也梳理相关的,作为补充。

面试坑、策略:

  • 策略:以下可以作为用户视觉的“推荐引擎、推荐策略”相关问题的想法,记住是想法!具体怎么说,除了按我梳理的逻辑顺序,也可以自己去按理解去表达。由于站在用户角度,就是上帝角度,只要结合了推荐算法的特性,怎么回答都可以。】
  • 坑:切记!不要说用户觉得爽就行了,也不要说看指标就很不错了!不要单单的说怎样怎样就好,一定要结合推荐引擎本身!客观的说! 切记切记~ 否则你就跳坑了~ 此坑适用于其他的策略PM面试。

回到来说,前面大部分都是从推荐引擎的角度考虑哪个算法更优,面试或者谈需求时,如果不懂技术或者细节,也可以拔高的回答:其实,我认为更多的应该考虑作为推荐引擎的最终使用者——应用用户对推荐算法的适应度。

对于 User CF:

  • 推荐的原则:是假设用户会喜欢那些和他有相同喜好的用户喜欢的东西;
  • 但如果一个用户没有相同喜好的朋友,那 User CF 的算法的效果就会很差,所以一个用户对的 CF 算法的适应度是和他有多少共同喜好用户成正比的。

对于Item C:

  • Item CF 算法也有一个基本假设:就是用户会喜欢和他以前喜欢的东西相似的东西,那么可以计算一个用户喜欢的物品的自相似度。
  • 逻辑1:一个用户喜欢物品的自相似度大,就说明他喜欢的东西都是比较相似的,也就是说他比较符合 Item CF 方法的基本假设,那么他对 Item CF 的适应度自然比较好;
  • 逻辑2:反之,如果自相似度小,就说明这个用户的喜好习惯并不满足 Item CF 方法的基本假设,那么对于这种用户,用 Item CF 方法做出好的推荐的可能性非常低。

小结:

以上的介绍,相信饭友小伙伴们,起码已经对协同过滤推荐的各种方法,原则,特点和适用场景有深入,60%的了解,那就可以了。

下面就进入实战案例分析,重点介绍如何基于 Apache Mahout 实现协同过滤推荐算法。这是国外的一个案例,国外搞推荐算法和理论很早,比较成熟,值得参详。

——————————分割线(下面是从技术角度去看,PM略看)——————

这篇是国外一个推荐系统技术案例分析,但为什么不选纯产品案例(即无技术,无参数)呢?

是因为这个在社区已经有不少了。推荐引擎本质就是一个综合的算法模型,肯定会涉及比较强的技术。加之饭友有一些是开发,可能是开发转PM,那么从开发角度去理解PM的推荐系统也是比较关键的。

脱离了代码层面,或者从代码层面、技术原理方面,如何结合到业务的思考。所以我挑选了一些内容和组合、点评,有了以下部分。比较干涩,PM略看。若要看,请看第3小节,即slope One部分,比较多适合推荐相关策略PM的干货。还是那句话,关注原理思想。

总结

算法理论、思想的口水话、面试点:

移动互联网的一个核心思想就是“集体智慧”,基于协同过滤的推荐策略的基本思想就是基于大众行为,为每个用户提供个性化的推荐,从而使用户能更快速更准确的发现所需要的信息。

产品角度口水话、面试交流点:

从产品角度分析,现今比较成功的推荐引擎,比如 Amazon(鼻祖),豆瓣(早期),头条(最近发起者)、网易云、QQ、阿里淘宝、JD等都采用了协同过滤的方式,现在很多大厂、主流场景都用了混搭方式。但核心还是玩协同过滤的多,不管如何,后期都离不开这一步。

其中类似维基百科这些,计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好。

基于协同过滤的推荐策略也有不同的分支,它们有不同的实用场景和推荐效果,PM可以根据自己产品、业务应用的实际情况选择合适的方法,异或组合不同的方法得到更好的推荐效果。

其他口水话:这篇定位依然是推荐引擎-理论搭建、扫盲系列之二。

第一篇是:理论体系]搭建-推荐体系:扫盲(一),系列一共有2-3篇,下一篇可能会选一种更加主流算法去解决大数据的应用。

如我们常见到策略PM类招聘JD写着:“聚类算法”,推荐。那么这个几百80%都会出现,我后面抽空再给大家介绍。

以上,谢谢,希望对饭友们有帮助。

以上是关于什么是协同过滤推荐算法?的主要内容,如果未能解决你的问题,请参考以下文章

协同过滤算法 预测和推荐

算法推荐算法--协同过滤

机器学习算法原理解析——协同过滤推荐

基于协同过滤的推荐算法与代码实现

机器学习--CF协同过滤推荐算法原理

协同过滤推荐算法