打开

推荐策略产品经理:剖析协同过滤(千人千面推荐的核心 )-下

凤城狂客 1330阅读 2019-02-28
前文:@首发社区+[策略产品经理研习社](公众号chanpin007),已托管维权骑士转载请联系。
这是下篇,上篇:推荐策略产品经理:剖析协同过滤(千人千面推荐的核心 )-上
PS:本文首发社区为有标注、加粗、颜色区分重点,因为编辑器不同所以整篇内容可能看起来会稍微有些“混”,希望谅解。若需要看原版可以进入社区,底部有入口。


(2)找到相似的用户或物品

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

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

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

【策略1、面试问题:】

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

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

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

(补充1:

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

1、相似度的计算

策略1:

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

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

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

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

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

(补充2:

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

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

  • 欧几里德距离(Euclidean Distance)

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

e1e37e95f56fc6d0d28d2fe1b02983a4-picture

【关键点、面试细节】:

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

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

b4980220a95482fe5581d5a678cf742e-picture

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

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

a9815721950e876d713190cbbd2b0ec9-picture

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

  • Cosine 相似度(Cosine Similarity)

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

d0aa13c7c49abc504e0f2f8a5dc5874f-picture

  • Tanimoto 系数(Tanimoto Coefficient)

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

dfce8912bc3c32a149d8e67dff44a528-picture

——————————分割线(下面是原理思想细节+推荐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.相似邻居计算示意图:

13edef6cbfca4a717a34e2a99b0a1e81-picture

(3)计算推荐

经过前期的计算已经得到了相邻用户和相邻物品,

下面介绍如何基于这些信息为用户进行推荐。

本系列的上半场,~已经简要介绍过基于协同过滤的推荐算法可以分为基于用户的 CF 和基于物品的 CF,

所以按逻辑去看,下面深入这两种方法的计算方法,

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

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

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

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

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

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

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

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

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

348ed9f644b3b1491532ff429994f14d-picture

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

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

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

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

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

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

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

33348f8621f7517895e9a36c8003d3fc-picture

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 方法做出好的推荐的可能性非常低。

4、小结:

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

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

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

这篇是国外一个推荐系统技术案例分析,但为什么不选纯产品案例(即无技术,无参数)呢?是因为这个在社区已经有不少了。推荐引擎本质就是一个综合的算法模型,肯定会涉及比较强的技术。加之饭友有一些是开发,可能是开发转PM,那么从开发角度去理解PM的推荐系统也是比较关键的。脱离了代码层面,或者从代码层面、技术原理方面,如何结合到业务的思考。(补充:如果需要更深入知道技术、算法代码层次的东西,可以参考CSDN的:**基于 Apache Mahout 实现高效的协同过滤推荐电影**)所以我挑选了一些内容和组合、点评,有了以下部分。比较干涩,PM略看。若要看,请看第3小节,即slope One部分,比较多适合推荐相关策略PM的干货。还是那句话,关注原理思想。

三、案例分析:基于 Apache Mahout 实现高效的协同过滤推荐

【由于有文字限制,删减部分相对没那么重要。如果需要可以加入社区或者知乎上有完整篇。饭团社区入口下方底部。】

四、总结

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

移动互联网的一个核心思想就是“集体智慧”,

基于协同过滤的推荐策略的基本思想就是基于大众行为,为每个用户提供个性化的推荐,从而使用户能更快速更准确的发现所需要的信息。

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

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

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

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

【其他口水话:】

这篇定位依然是推荐引擎-理论搭建、扫盲系列之二。第一篇是:

[理论体系]搭建-推荐体系:扫盲(一)

系列一共有2-3篇,下一篇可能会选一种更加主流算法去解决大数据的应用。

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

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

—————

写下你的评论

发布评论 取消
500

写下你的评论

发布
500

评论

查看更多评论

删除评论

删除的评论将永久消失,确定要删除吗?

删除 取消
内容不合法,请修改后提交

云队友-为有效工作时间付费

免费招聘 →
1分钟快速发布职位

绑定手机

参与互动需要先绑定手机号哦~

完善信息

参与互动需要完善个人信息哦~

参与互动需要进行审核

为了保证社区的内容质量,需要提一个问题,来证明你是可以的!

在问题审核通过后,即可开启PMCAFF所有功能~

  • 微信好友

  • 朋友圈

取消

打开 APP 阅读

推荐使用 PMCAFF APP,阅读体验更佳。