标签:导致 抽象 分析 理论 电子商务网 分词 推荐 协同过滤算法 width
剖析千人千面的大脑——推荐引擎部分,其中这篇是定位:对推荐引擎中的核心算法:协同过滤进行深挖。
首先,千人千面融合各种场景,如搜索,如feed流,如广告,如风控,如策略增长,如购物全流程等等;其次千人千面的大脑肯定是内部的推荐引擎,这里有诸多规则和算法在实现对上述各个场景进行“细分推荐排序”;最后是推荐引擎的算法又以“协同过滤”为最核心、最主流热门,也是当下众多内容型、电商型、社交工具、分发型的基础。
由于协同过滤的算法介绍,网上也蛮多但片段化。要么侧重讲“原理流程”,这个占了4成;要么讲算法公式,这个占5成;还有1成是偏向业务的理解,但这个笼统很难参考。
因此,这篇是属于推荐引擎-理论搭建体系-之二,PM可以侧重关注:
(1)了解协同过滤之前,先知道什么是:集体智慧。(没有对比就没有“感知”,这个集体智慧是更好帮助了解、对比协同过滤。因为网上很多片段化的文章,没有对比出来,不利于PM去联想和学习的)
(2)了解什么是协同过滤(这点偏向理论,网上的很多也如此。但我挑选了精简部分,就只要2点关键:1知道它有什么作用,2为什么需要是它)
(3)学习协同过滤的核心。要实现包括三大重要部分:【干货,核心】
(4)举个推荐引擎中-应用协同过滤的实践案例。国外的产品案例。(包括如何使用,用什么公式,什么场景,有什么问题,怎么解决,代码层面附录。PS:为什么选国外呢? 是因为这个推荐最早是应用于国外,不管是算法还是理论层面,确实要比国内深究多一分,觉得比较客观,可以参考和适用更强,这点可以跳着看。)
以上,个人认为走推荐、画像、搜索等PM核心要掌握第(1)~(3)部分,公式可以除外。其他策略PM们也可以关注各种的原理、特点、面试关键词,以用来作为谈资、需求筹码、面试拔高、综合素质的层次跨越获取高薪。
(1)原理和介绍:
集体智慧 (Collective Intelligence) 并不是 移动互联网时代特有的,只是在移动互联网时代,大家在 Web 应用中利用集体智慧构建更加有趣的应用或者得到更好的用户体验。
核心原理:
集体智慧是指在大量的人群的行为和数据中收集答案,帮助你对整个人群得到统计意义上的结论,这些结论是在单个个体上无法得到的,它往往是某种趋势或者人群中共性的部分。
(PS:从上面可以知道,这里的“结论”是提取共性。这里的本质应用就可以是推荐系统的“人以群分,物以类聚”思想。)
(补充1:)
集体智慧(Collective Intelligence,CI),简称集智,它是一种共享的或群体的智能。
在互联网时代之前就存在,可以分为两面去看:
(补充2:)
为什么会补充说明这个?有2个原因:一是有些饭友不太清楚;二是我觉得这个概念其实很多公司、业务、产品在设计、在做策略、在做发展都离不开,多多少少会掺和到,所以抛出这个概念,可以让大家注意到。
总之越来越多的传统公司和组织也开始使用各种集体智慧平台或工具,借助外部智慧以解决复杂问题。尤其现在主推的各种智能平台,智能城市、策略。
(2)从案例去看:
Wikipedia 和 Google 是两个典型的利用集体智慧的 移动互联网 应用:
【Wikipedia】(维基百科)
(补充:或许也许有人会质疑它的权威性,但如果你从另一个侧面想这个问题,也许就可以迎刃而解。在发行一本书时,作者虽然是权威,但难免还有一些错误,然后通过一版一版的改版,书的内容越来越完善。(饭友们可以回忆思考下。常见的个性化推荐产品,如电商,如头条,网易等等,不管是推荐系统也好,搜索也罢,各种策略产品,是不是都说你越使用、越反馈,越懂你,越精准,这里的本质原理是“相通”的))
【Google】(姑姑,哈哈)
或许饭友们绝对这不好理解,那么你可以把它想象成一个选举的过程,每个 Web 页面都是一个投票者同时也是一个被投票者,PageRank 通过一定数目的迭代得到一个相对稳定的评分。Google 其实利用了现在 Internet 上所有 Web 页面上链接的集体智慧,找到哪些页面是重要的。
(饭友们同样可思考下:这里的页面上各种的链接,找到哪些页面,是不是和我们很多内容型产品,找到相似的内容资料,如文章,如视频等相似呢? 这里“投票者”其实可以理解是用户对内容的行为反馈)
(补充1:这里的web页面不算仅指PC端,也是包含移动端。更多是泛指产品中的每个”网络页面”。)
(1)怎么去理解呢?
协同过滤是利用集体智慧的一个典型方法。
(PS,协同过滤是推荐的核心算法,即集体智慧和推荐是关系的,个中原理参见上面所说的。)
要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题:
核心原理:协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。
(2)会遇到什么问题?
当然其中有一些核心的问题:
如同第一章所说,同样与集体智慧PK。可以发现:
协同过滤相对于集体智慧而言,它从一定程度上保留了个体的特征,就是你的品位偏好,所以它更多可以作为个性化推荐的算法思想。
(补充2:所以可以想象,这种推荐策略在 移动互联网 的长尾中是很重要的,将大众流行的东西推荐给长尾中的人怎么可能得到好的效果,所以回到推荐系统的一个核心问题:了解你的用户,然后才能给出更好的推荐。)
前面作为背景知识,介绍了集体智慧和协同过滤的基本思想,主要是为饭友们对推荐相关的打一些基础和铺垫。
接下来,下面这一节将深入分析协同过滤的原理,介绍基于协同过滤思想的多种推荐机制,优缺点和实用场景。
(核心1、面试问题坑、需求反推工作量思考:协同过滤的基本核心有3个要素。)
首先,要实现协同过滤,需要一下几个步骤:
原理作用:
一句话:要从用户的行为和偏好中发现规律,并基于此给予推荐。所以,如何收集用户的偏好信息成为系统推荐效果最基础的决定因素。(前者饭友PM都知道,后者是面试或需求中常会问)
(即用户有很多方式向系统提供自己的偏好信息,而且不同的应用也可能大不相同,下面举例进行介绍。以下可以作为需求分析、口径定义使用。)
(补充1:面试坑:当问到具体的用户偏好收集、如何定义行为、权重、正负反馈等相关问题,实际就是这节相关内容,所以下面的案例都可以参考回答,基本对全产品都通用,具有很强的适用性。)
(补充2:这种类型相关的,可以参考以前社区的一些文章,以下我找了一些:)
(补充3:有很多办法和操作,具体业务,具体产品都可能不太同。我也无法罗列完全,但挑选了业内常用,实用性和发散性好的。如下表:)
(补充4:PS: 布尔值是“真” True 或“假” False 中的一个。代码层有时也会在适当时将值 True 和 False 转换为 1……)
通用、标准的:
(表 1 用户行为和用户偏好)
偏业务:如内容型(以腾讯视频为例)
上面已经提过了。
再举个形象例子:你说你很爱你女友;女友反问:你有多爱?如果女友是讲情义的,那么你就给以前为她做过的DIY礼物打上最高权重,优先展示说出这些内容;如果女友是讲金钱的,那么你就准备为她买过的、即将买的iPhoneXS送她,优先物质。权重,就是优先级,重要性。
下面的,可以直接应用到视频平台的推荐赋值,还是比较全面的。但是,我建议还是要思考到业务情况,赋值和权项范围是要视情况调整。
偏业务:如服务型(以美团为例)
(其他如电商也是同理,在这里就不一一梳理。有兴趣可以看社区的用户画像、推荐等专辑内容,里面有不同细分类的梳理,由于这些是要结合,所以会相对分散到某个不同细分领域的产品或业务上。)
总结-提取策略、方法论:
(补充1:下面是对提上述的一些“收集特征、权重赋值”等抽象出“可复用”的思想。)
(补充2:)【面试坑、问题点】
关于策略类PM都离不开大数据的行为收集,特征定义。下面是对这些细分的总结。我梳理每个独立的点,都可以回答。回答的问题范围是“上述案例的一些“关键词””,所以建议先回答下面的一些要点,若面试官深挖再回答上面的细分案例。
(补充3:上述回答逻辑,即总-分-分原理,这样有助于逻辑回答,也有助于符合面试的不断深挖过程。尽量避免一开始就回答具体,这样会让面试官一来问的更细,反而出现没有学习和复盘到而出现更多意外,二来也是给各自心理门槛,即过三关心理,面试官深入问的,你基本都能回答出。)
下面不用产品这个词,而是用“应用”,泛指更多端的产品
策略1:
以上列举的用户行为都是比较通用的、经典业务的。但是如果是推荐、搜索等PM,是可以根据自己应用(业务、产品)的特点添加特殊的用户行为,并用他们表示用户对物品的喜好。
策略2:
方法论,面试可以分享,大大加分!
在一般应用中,提取的用户行为一般都多于一种,关于如何组合这些不同的用户行为,基本上有以下两种方式:(策略、方法论)
【补充:上面的全部,都可以作为针对“如何组合、提取用户行为”的面试问题,所表达的观点,这肯定会加分,并且这些都是关键知道思想。就如同可以理解成:以前走农村包围城市的战略,其根本指导思想是:如论持久战。 所以上面1-3的例子是做法,那么作为策略PM一个核心的点是,你要学会有方法策略,怎么能迁移复用。这里的指导思想就如上面所说的,虽然不一定说完整全面,但对于大部分互联网产品,都是这个原理。】
策略3:
当策略PM做到上面之后,也就是收集了用户行为数据之后,接下来还需要对数据进行一定的预处理。
常问的问题类似:你觉得在收集数据/用户数据、数据源等处理等等,要注意什么。或者遇到什么的坑,或者说你是怎么想的,总之核心是“数据处理”。这个对于画像PM等底层数据PM,一定会问!
其中最核心的工作就是:减噪和归一化。
减噪:用户行为数据是用户在使用应用过程中产生的,它可能存在大量的噪音和用户的误操作,可以通过经典的数据挖掘算法过滤掉行为数据中的噪音,这样可以是的分析更加精确。
(补充1:这里具体的方法,算法等细节,可以参考用户画像等相关内容,这话题又比较大,此处不展开了。只要知道什么回事即可。)
归一化:如前面讲到的,在计算用户对物品的喜好程度时,可能需要对不同的行为数据进行加权。但可以想象,不同行为的数据取值可能相差很大。
例子1:比如,用户的查看数据必然比购买数据大的多,如何将各个行为的数据统一在一个相同的取值范围中,从而使得加权求和得到的总体喜好更加精确,就需要进行归一化处理。
例子2:从以往实战来看,最简单的归一化处理:就是将各类数据除以此类中的最大值,以保证归一化后的数据取值在 [0,1] 范围中。
n同上补充的点,这个相对抽象,饭友们可以结合我举得例子去理解~
(补充2:即上面所做,当进行的预处理后(这个一般可以和数据和开发一起搞),根据不同应用的行为分析方法,可以选择分组或者加权处理,之后可以得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是 [0,1] 或者 [-1, 1] 的浮点数值。)
图另外后面再配。就是数组矩阵的样式,如果很抽象就简单理解成excel表左列右行的样式。
原理:当已经对用户行为进行分析得到用户喜好后,可以根据用户喜好计算相似用户和物品,然后基于相似用户或者物品进行推荐。
目前主流的,都是围绕最典型的 CF 的两个分支:
策略1、面试问题:
这两种方法都有个共同核心:就是都需要计算相似度。
所以,下面先看看最基本的几种计算相似度的方法。
由于涉及到计算,那就肯定会有各种公式。否则根本不能说算法。所以下面有相关的技术细节,可能有技术和算法逻辑强的PM能看得很明白。但没有这方面基础的,也没关系,下面我梳理都会按大白话和尽可能了解的语言去讲述原理。
(补充1:还是要说个很现实的事情。这篇依然有一丢的技术术语,PM不理解或者不明白是很正常的,但如果连百度、连问查找都不愿意,那谈何学习和成长呢?要知道,你薪资涨幅高低、大厂公司offer等依然有一堆PM在与你竞争。)
(1)相似度的计算
策略1:
关于相似度的计算,现有的几种基本方法都是基于向量(Vector)的。(饭友其实简单理解,也就是计算两个向量的距离,距离越近相似度越大。)
计算相似度逻辑1:(面试细节)
在推荐的场景中,在用户 – 物品偏好的二维矩阵中:
——————————分割线(下面是技术细节+推荐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:说回重点。后面我想单纯只讲公式没有太多意义。为何?
因此,我针对上面提到的计算方式,用大白话去讲解各种的原理。
这里的原理是指:公式本身都是计算,都是为了解决同一个问题。所以假设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 个,作为其邻居。(下面是流程、逻辑想法)
基于相似度门槛的邻居:Threshold-based neighborhoods
【原理】:
图1. 相似邻居计算示意图:
经过前期的计算已经得到了相邻用户和相邻物品,下面介绍如何基于这些信息为用户进行推荐。
本系列的上半场,~已经简要介绍过基于协同过滤的推荐算法可以分为基于用户的 CF 和基于物品的 CF,所以按逻辑去看,下面深入这两种方法的计算方法,
PM主要关注是:计算的基本原理、使用场景和优缺点。(这个是高频面试问法、考点,让你介绍下原理思想。)
(1)基于用户的 CF(User CF)
基于用户的 CF 的基本思想相当简单!
【原理】:基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。
(PS:请看我梳理出来的思考流程,看文字+看图配合更好理解。)
以上。作为面试或者分享你对这个原理的看法,绝对是可以用。
(下面图 2 就是一个例子,对于用户 A,根据用户的历史偏好,这里只计算得到一个邻居 – 用户 C,然后将用户 C 喜欢的物品 D 推荐给用户 A。)
图 2.基于用户的 CF 的基本原理:
(2)基于物品的 CF(Item CF)
基于物品的 CF 的原理和基于用户的 CF 类似!!!
【原理】:只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。
(PS:请看我梳理出来的思考流程,看文字+看图配合更好理解。)
(举个例子,如图 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 更优,其中的一个主要原因就是:
面试挖坑:用户海量、内容物品海量,因此要看产品实际情况而去使用相应的协同过滤算法,不能一概而论。
所以单从复杂度的角度,这两个算法在不同的系统中各有优势,推荐引擎的设计者需要根据自己应用的特点选择更加合适的算法。
适用的场景:
场景策略:在非社交网络的网站中:内容内在的联系是很重要的推荐原则,它比基于相似用户的推荐原则更加有效。
可以看到,在这种情况下我认为有几个很重要的点:
一般来说,刚开始研究推荐引擎的学者们在相同的数据集合上分别用 User CF 和 Item CF 计算推荐结果,发现推荐列表中,只有 50% 是一样的,还有 50% 完全不同。
(但是这两个算法确有相似的精度,所以可以说,这两个算法是很互补的。具体怎么度量,可以参考下面梳理的几个方面。一是整体的度量方法,而是不同的业务指标)
度量策略-两种经典方法:
(PS:无涉及具体业务,可通用)
补充1面试坑:常问到的:如你如何衡量推荐效果好不好? 从技术指标?业务指标如何看? 不同业务下又如何观察,验证? 改善?。
补充:2类似的可以以前饭团的内容,如:
关于推荐的多样性,有两种度量方法:
就是说给定一个用户(见下补充),查看系统给出的推荐列表是否多样。(直观)
也就是要比较推荐列表中的物品之间两两的相似度,不难想到,对这种度量方法,Item CF 的多样性显然不如 User CF 的好,因为 Item CF 的推荐就是和以前看的东西最相似的。
(补充1 ,可作为面试细节:这里的用户,一般在我们PM可以叫白名单用户、随机用户、抽样用户、分组测试用户、体验用户都可以~ 具体看业务规则策略。如我以前做这方面验证会分两种情况:如特定场景会分组用户测试(侧重是对场景的验证,白名单)、如果是走量测试机率、抗压等等,就导出随机大量。后者一般有条件都可以联合用户画像去勾选某些条件的用户群))
在这种指标下,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,都可以用于作答。
从上面的分析,可以很清晰的看到:这两种推荐都有其合理性,但都不是最好的选择,因此他们的精度也会有损失。
怎么优化、解决?
其实对这类系统的最好选择是:
如果系统给这个用户推荐 30 个物品,既不是每个领域挑选 10 个最热门的给他,也不是推荐 30 个 A 领域的给他,而是比如推荐 15 个 A 领域的给他,剩下的 15 个从 B,C 中选择。
解决策略:所以结合 User CF 和 Item CF 是最优的选择。
用户对推荐算法的适应度:
毕竟之前更多是谈引擎特性去考虑,除了上面小谈用户,我在这也梳理相关的,作为补充。
面试坑、策略:
回到来说,前面大部分都是从推荐引擎的角度考虑哪个算法更优,面试或者谈需求时,如果不懂技术或者细节,也可以拔高的回答:其实,我认为更多的应该考虑作为推荐引擎的最终使用者——应用用户对推荐算法的适应度。
对于 User CF:
对于Item C:
小结:
以上的介绍,相信饭友小伙伴们,起码已经对协同过滤推荐的各种方法,原则,特点和适用场景有深入,60%的了解,那就可以了。
下面就进入实战案例分析,重点介绍如何基于 Apache Mahout 实现协同过滤推荐算法。这是国外的一个案例,国外搞推荐算法和理论很早,比较成熟,值得参详。
——————————分割线(下面是从技术角度去看,PM略看)——————
这篇是国外一个推荐系统技术案例分析,但为什么不选纯产品案例(即无技术,无参数)呢?
是因为这个在社区已经有不少了。推荐引擎本质就是一个综合的算法模型,肯定会涉及比较强的技术。加之饭友有一些是开发,可能是开发转PM,那么从开发角度去理解PM的推荐系统也是比较关键的。
脱离了代码层面,或者从代码层面、技术原理方面,如何结合到业务的思考。所以我挑选了一些内容和组合、点评,有了以下部分。比较干涩,PM略看。若要看,请看第3小节,即slope One部分,比较多适合推荐相关策略PM的干货。还是那句话,关注原理思想。
算法理论、思想的口水话、面试点:
移动互联网的一个核心思想就是“集体智慧”,基于协同过滤的推荐策略的基本思想就是基于大众行为,为每个用户提供个性化的推荐,从而使用户能更快速更准确的发现所需要的信息。
产品角度口水话、面试交流点:
从产品角度分析,现今比较成功的推荐引擎,比如 Amazon(鼻祖),豆瓣(早期),头条(最近发起者)、网易云、QQ、阿里淘宝、JD等都采用了协同过滤的方式,现在很多大厂、主流场景都用了混搭方式。但核心还是玩协同过滤的多,不管如何,后期都离不开这一步。
其中类似维基百科这些,计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好。
基于协同过滤的推荐策略也有不同的分支,它们有不同的实用场景和推荐效果,PM可以根据自己产品、业务应用的实际情况选择合适的方法,异或组合不同的方法得到更好的推荐效果。
其他口水话:这篇定位依然是推荐引擎-理论搭建、扫盲系列之二。
第一篇是:理论体系]搭建-推荐体系:扫盲(一),系列一共有2-3篇,下一篇可能会选一种更加主流算法去解决大数据的应用。
如我们常见到策略PM类招聘JD写着:“聚类算法”,推荐。那么这个几百80%都会出现,我后面抽空再给大家介绍。
以上,谢谢,希望对饭友们有帮助。
标签:导致 抽象 分析 理论 电子商务网 分词 推荐 协同过滤算法 width
原文地址:https://www.cnblogs.com/Little-Li/p/11354590.html