本文将对推荐引擎核心算法中的协同过滤进行剖析深挖,希望能给大家作为参考,并在工作中产生助益。剖析千人千面的大脑——推荐引擎部分,其中这篇是定位:对推荐引擎中的核心算法:协同过滤进行深挖。 首先,千人千面融合各种场景,如搜索,如feed流,如广告,如风控,如策略增长,如购物全流程等等;其次千人千面的大脑肯定是内部的推荐引擎,这里有诸多规则和算法在实现对上述各个场景进行“细分推荐排序”;最后是推荐引擎的算法又以“协同过滤”为最核心、最主流热门,也是当下众多内容型、电商型、社交工具、分发型的基础。 由于协同过滤的算法介绍,网上也蛮多但片段化。要么侧重讲“原理流程”,这个占了4成;要么讲算法公式,这个占5成;还有1成是偏向业务的理解,但这个笼统很难参考。 因此,这篇是属于推荐引擎-理论搭建体系-之二,PM可以侧重关注: (1)了解协同过滤之前,先知道什么是:集体智慧。(没有对比就没有“感知”,这个集体智慧是更好帮助了解、对比协同过滤。因为网上很多片段化的文章,没有对比出来,不利于PM去联想和学习的) (2)了解什么是协同过滤(这点偏向理论,网上的很多也如此。但我挑选了精简部分,就只要2点关键:1知道它有什么作用,2为什么需要是它) (3)学习协同过滤的核心。要实现包括三大重要部分:【干货,核心】
- 一是收集用户偏好(知道为什么要收、收哪些哪样的、如何收集、收集过程有什么原则?);
- 二是找到相似的用户或者物品(这里的核心有2大方面:1是怎样定义算“相似”,属于相似度问题,用什么公式去计算、有什么特点;2是相似邻居问题,可用什么公式计算两个相似邻居);
- 三是计算推荐(这里核心是基于物品的方式是如何计算推荐、基于用户又是如何、两者PK又有什么差异点,如在场景,多样性)每个部分再挖出各个关键点、(学习,不是了解,是学习)
一、集体智慧和协同过滤
1. 什么是集体智慧
(1)原理和介绍: 集体智慧 (Collective Intelligence) 并不是 移动互联网时代特有的,只是在移动互联网时代,大家在 Web 应用中利用集体智慧构建更加有趣的应用或者得到更好的用户体验。 核心原理: 集体智慧是指在大量的人群的行为和数据中收集答案,帮助你对整个人群得到统计意义上的结论,这些结论是在单个个体上无法得到的,它往往是某种趋势或者人群中共性的部分。 (PS:从上面可以知道,这里的“结论”是提取共性。这里的本质应用就可以是推荐系统的“人以群分,物以类聚”思想。) (补充1:) 集体智慧(Collective Intelligence,CI),简称集智,它是一种共享的或群体的智能。 在互联网时代之前就存在,可以分为两面去看:- 在网络时代来临之前,集体智慧就一直活跃在生物学、社会学、计算机科学、大众行为学等领域 [1] [2] 。
- 随着Web 2.0的崛起和社会性软件的普及,集体智慧这在社交网络服务、众包、分享、评论和推荐等领域也得到了广泛应用 [3] (典型案例包括:维基百科、百度百科、百度知道、猪八戒网、任务中国、Threadless、InnoCentive、digg、iStockphoto、Mechanical Turk等。)
- 入口:https://www.wikipedia.org/
- Wikipedia 是一个知识管理的百科全书。(相对于传统的由领域专家编辑的百科全书)
- Wikipedia 允许最终用户贡献知识,随着参与人数的增多,Wikipedia 变成了涵盖各个领域的一本无比全面的知识库。
- 所以在 Wikipedia 上,这种改版和修正被变为每个人都可以做的事情,任何人发现错误或者不完善都可以贡献他们的想法,即便某些信息是错误的,但它一定也会尽快的被其他人纠正过来。从一个宏观的角度看,整个系统在按照一个良性循环的轨迹不断完善,这也正是集体智慧的魅力。
- 入口:https://www.google.com.hk/ (PS被封杀需翻墙)
- Google:目前最流行的搜索引擎,与 Wikipedia 不同,它没有要求用户显式的贡献,但仔细想想 Google 最核心的 PageRank 的思想,它利用了 Web 页面之间的关系,将多少其他页面链接到当前页面的数目作为衡量当前页面重要与否的标准;
2. 什么是协同过滤
(1)怎么去理解呢? 协同过滤是利用集体智慧的一个典型方法。 (PS,协同过滤是推荐的核心算法,即集体智慧和推荐是关系的,个中原理参见上面所说的。) 要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题:- 如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?
- 大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。
- 如何确定一个用户是不是和你有相似的品位?(数据,动作,用户/内容画像)
- 如何将邻居们的喜好组织成一个排序的目录?(召回,排序,推荐)
二、深入协同过滤的核心
前面作为背景知识,介绍了集体智慧和协同过滤的基本思想,主要是为饭友们对推荐相关的打一些基础和铺垫。 接下来,下面这一节将深入分析协同过滤的原理,介绍基于协同过滤思想的多种推荐机制,优缺点和实用场景。 (核心1、面试问题坑、需求反推工作量思考:协同过滤的基本核心有3个要素。) 首先,要实现协同过滤,需要一下几个步骤:- 收集用户偏好;
- 找到相似的用户或物品;
- 计算推荐。
1. 收集用户偏好
原理作用: 一句话:要从用户的行为和偏好中发现规律,并基于此给予推荐。所以,如何收集用户的偏好信息成为系统推荐效果最基础的决定因素。(前者饭友PM都知道,后者是面试或需求中常会问)2. 核心策略:如何收集呢?
(即用户有很多方式向系统提供自己的偏好信息,而且不同的应用也可能大不相同,下面举例进行介绍。以下可以作为需求分析、口径定义使用。) (补充1:面试坑:当问到具体的用户偏好收集、如何定义行为、权重、正负反馈等相关问题,实际就是这节相关内容,所以下面的案例都可以参考回答,基本对全产品都通用,具有很强的适用性。) (补充2:这种类型相关的,可以参考以前社区的一些文章,以下我找了一些:)- 【重要/实践】腾讯视频推荐策略:播放结束后,如何进行推荐策略思考?
- 【快课/实践】剖析京东JD在“猜你喜欢”的产品设计+推荐策略。
(表 1 用户行为和用户偏好)
偏业务:如内容型(以腾讯视频为例) 上面已经提过了。 再举个形象例子:你说你很爱你女友;女友反问:你有多爱?如果女友是讲情义的,那么你就给以前为她做过的DIY礼物打上最高权重,优先展示说出这些内容;如果女友是讲金钱的,那么你就准备为她买过的、即将买的iPhoneXS送她,优先物质。权重,就是优先级,重要性。 下面的,可以直接应用到视频平台的推荐赋值,还是比较全面的。但是,我建议还是要思考到业务情况,赋值和权项范围是要视情况调整。 偏业务:如服务型(以美团为例)- 用户特征
- 人口属性:用户年龄,性别,职业等。
- 行为特征:对商户/商圈/品类的偏好(实时、历史),外卖偏好,活跃度等。
- 建模特征:基于用户的行为序列建模产生的特征等。
- 商户特征
- 属性特征:品类,城市,商圈,品牌,价格,促销,星级,评论等。
- 统计特征:不同维度/时间粒度的统计特征等。
- 图像特征:类别,建模特征等。
- 业务特征:酒店房型等。
- Query特征
- 分词,意图,与商户相似度,业务特征等。
- 上下文特征
- 时间,距离,地理位置,请求品类,竞争情况等。
- 广告曝光位次。
- 【将不同的行为分组】:(假设以第一个案例为例),一般可以分为“查看”和“购买”等等,然后基于不同的行为,计算不同的用户 / 物品相似度。类似于当当网或者 Amazon 给出的“购买了该图书的人还购买了 …”,“查看了图书的人还查看了 …”
- 【用户、行为加权】:(假设以第二个案例为例),根据不同行为反映用户喜好的程度将它们进行加权,得到用户对于物品的总体喜好。(有些饭友联系到画像内容,这里我要补充下:一般来说,显式的用户反馈比隐式的权值大,但比较稀疏,毕竟进行显示反馈的用户是少数;同时相对于“查看”,“购买”行为反映用户喜好的程度更大,但这也因应用而异。)
2. 找到相似的用户或物品
原理:当已经对用户行为进行分析得到用户喜好后,可以根据用户喜好计算相似用户和物品,然后基于相似用户或者物品进行推荐。 目前主流的,都是围绕最典型的 CF 的两个分支:- 基于用户的 CF ;
- 基于物品的 CF;
- 可以将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,
- 或者将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度。
——————————分割线(下面是技术细节+推荐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:说回重点。后面我想单纯只讲公式没有太多意义。为何?- 是因为策略PM不一定要知道公式,只需知道原理和思想,知道什么场景该适合用啥;
- 单纯说公式没意思,不是开发开始不懂那么多,这样子失去原来的意义;
- 不能结合业务也没意义。虽然这个没办法在这里展开,因为太细了,我也没那么全面;
- 如图 1 中的 A,假设要计算点 1 的 5- 邻居,那么根据点之间的距离,取最近的 5 个点,分别是点 2,点 3,点 4,点 7 和点 5。
- 但很明显可以看出,这种方法对于孤立点的计算效果不好。
- 【核心问题,如果细节会问到-即为什么的解答】因为要取固定个数的邻居,当它附近没有足够多比较相似的点,就被迫取一些不太相似的点作为邻居,这样就影响了邻居相似的程度。(比如图 1 中,点 1 和点 5 其实并不是很相似。)
- 与计算固定数量的邻居的原则不同,基于相似度门槛的邻居计算是对邻居的远近进行最大值的限制,落在以当前点为中心,距离为 K 的区域中的所有点都作为当前点的邻居,
- 这种方法计算得到的邻居个数不确定,但相似度不会出现较大的误差。
- 如图 1 中的 B,从点 1 出发,计算相似度在 K 内的邻居,得到点 2,点 3,点 4 和点 7。
- 【核心观点,问为什么认为好】这种方法计算出的邻居的相似度程度比前一种优,尤其是对孤立点的处理。
3. 计算推荐
经过前期的计算已经得到了相邻用户和相邻物品,下面介绍如何基于这些信息为用户进行推荐。 本系列的上半场,~已经简要介绍过基于协同过滤的推荐算法可以分为基于用户的 CF 和基于物品的 CF,所以按逻辑去看,下面深入这两种方法的计算方法, PM主要关注是:计算的基本原理、使用场景和优缺点。(这个是高频面试问法、考点,让你介绍下原理思想。) (1)基于用户的 CF(User CF) 基于用户的 CF 的基本思想相当简单! 【原理】:基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。 (PS:请看我梳理出来的思考流程,看文字+看图配合更好理解。)- 计算就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度(找领居)
- 找到 K 邻居后,根据邻居的相似度权重以及他们对物品的偏好,(看邻居偏好)
- 预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。(召回排序)
- 从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,(找用户偏好的“共性”物品)
- 得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。(预测召回,排序)
- 对于一个在线网站,用户的数量往往大大超过物品的数量,同时物品的数据相对稳定,因此计算物品的相似度不但计算量较小,同时也不必频繁更新。(但只是适用一些电商)
- 但往往忽略了这种情况只适应于提供商品的电子商务网站,对于新闻,博客或者微内容的推荐系统,情况往往是相反的,物品的数量是海量的,同时也是更新频繁的。
- Item CF 的推荐成为了引导用户浏览的重要手段 。(比如在当当网(购书网站)上,当你看一本书的时候,推荐引擎会给你推荐相关的书籍,这个推荐的重要性远远超过了网站首页对该用户的综合推荐。)
- 同时 Item CF 便于为推荐做出解释。(在一个非社交网络的网站中,给某个用户推荐一本书,同时给出的解释是某某和你有相似兴趣的人也看了这本书,这很难让用户信服,因为用户可能根本不认识那个人;但如果解释说是因为这本书和你以前看的某本书相似,用户可能就觉得合理而采纳了此推荐。)
- 相反的,在现今很流行的社交网络站点中,User CF 是一个更不错的选择,User CF 加上社会网络信息,可以增加用户对推荐解释的信服程度。
- 推荐多样性和精度。
- 【重要】衡量个性化推荐产品效果的核心指标有哪些?
- 【实践】浅析建立个性化推荐数据指标体系&实践(以电商为例)
- 第一种度量方法:是从单个用户的角度度量。
- 第二种度量方法是考虑系统的多样性,也被称为覆盖率 (Coverage),它是指一个推荐系统是否能够提供给所有用户丰富的选择。
- 首先,假设每个用户兴趣爱好都是广泛的,喜欢好几个领域的东西,不过每个用户肯定也有一个主要的领域,对这个领域会比其他领域更加关心。
- 给定一个用户,假设他喜欢 3 个领域 A,B,C,A 是他喜欢的主要领域,这个时候来看 User CF 和 Item CF 倾向于做出什么推荐:
- 如果用 User CF, 它会将 A,B,C 三个领域中比较热门的东西推荐给用户;
- 而如果用 ItemCF,它会基本上只推荐 A 领域的东西给用户。
- 那么看到因为 User CF 只推荐热门的,所以它在推荐长尾里项目方面的能力不足;
- 而 Item CF 只推荐 A 领域给用户,这样他有限的推荐列表中就可能包含了一定数量的不热门的长尾物品,同时 Item CF 的推荐对这个用户而言,显然多样性不足。
- 但是对整个系统而言,因为不同的用户的主要兴趣点不同,所以系统的覆盖率会比较好。
- 结合的基本原则就是:当采用 Item CF 导致系统对个人推荐的多样性不足时,通过加入 User CF 增加个人推荐的多样性,从而提高精度,
- 而当因为采用 User CF 而使系统的整体多样性不足时:可以通过加入 Item CF 增加整体的多样性,同样同样可以提高推荐的精度。
- 策略:以下可以作为用户视觉的“推荐引擎、推荐策略”相关问题的想法,记住是想法!具体怎么说,除了按我梳理的逻辑顺序,也可以自己去按理解去表达。由于站在用户角度,就是上帝角度,只要结合了推荐算法的特性,怎么回答都可以。】
- 坑:切记!不要说用户觉得爽就行了,也不要说看指标就很不错了!不要单单的说怎样怎样就好,一定要结合推荐引擎本身!客观的说! 切记切记~ 否则你就跳坑了~ 此坑适用于其他的策略PM面试。
- 推荐的原则:是假设用户会喜欢那些和他有相同喜好的用户喜欢的东西;
- 但如果一个用户没有相同喜好的朋友,那 User CF 的算法的效果就会很差,所以一个用户对的 CF 算法的适应度是和他有多少共同喜好用户成正比的。
- Item CF 算法也有一个基本假设:就是用户会喜欢和他以前喜欢的东西相似的东西,那么可以计算一个用户喜欢的物品的自相似度。
- 逻辑1:一个用户喜欢物品的自相似度大,就说明他喜欢的东西都是比较相似的,也就是说他比较符合 Item CF 方法的基本假设,那么他对 Item CF 的适应度自然比较好;
- 逻辑2:反之,如果自相似度小,就说明这个用户的喜好习惯并不满足 Item CF 方法的基本假设,那么对于这种用户,用 Item CF 方法做出好的推荐的可能性非常低。
——————————分割线(下面是从技术角度去看,PM略看)——————
这篇是国外一个推荐系统技术案例分析,但为什么不选纯产品案例(即无技术,无参数)呢? 是因为这个在社区已经有不少了。推荐引擎本质就是一个综合的算法模型,肯定会涉及比较强的技术。加之饭友有一些是开发,可能是开发转PM,那么从开发角度去理解PM的推荐系统也是比较关键的。 脱离了代码层面,或者从代码层面、技术原理方面,如何结合到业务的思考。所以我挑选了一些内容和组合、点评,有了以下部分。比较干涩,PM略看。若要看,请看第3小节,即slope One部分,比较多适合推荐相关策略PM的干货。还是那句话,关注原理思想。总结
算法理论、思想的口水话、面试点: 移动互联网的一个核心思想就是“集体智慧”,基于协同过滤的推荐策略的基本思想就是基于大众行为,为每个用户提供个性化的推荐,从而使用户能更快速更准确的发现所需要的信息。 产品角度口水话、面试交流点: 从产品角度分析,现今比较成功的推荐引擎,比如 Amazon(鼻祖),豆瓣(早期),头条(最近发起者)、网易云、QQ、阿里淘宝、JD等都采用了协同过滤的方式,现在很多大厂、主流场景都用了混搭方式。但核心还是玩协同过滤的多,不管如何,后期都离不开这一步。 其中类似维基百科这些,计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好。 基于协同过滤的推荐策略也有不同的分支,它们有不同的实用场景和推荐效果,PM可以根据自己产品、业务应用的实际情况选择合适的方法,异或组合不同的方法得到更好的推荐效果。 其他口水话:这篇定位依然是推荐引擎-理论搭建、扫盲系列之二。 第一篇是:理论体系]搭建-推荐体系:扫盲(一),系列一共有2-3篇,下一篇可能会选一种更加主流算法去解决大数据的应用。 如我们常见到策略PM类招聘JD写着:“聚类算法”,推荐。那么这个几百80%都会出现,我后面抽空再给大家介绍。 以上,谢谢,希望对饭友们有帮助。爱盈利-运营小咖秀(www.aiyingli.com) 始终坚持研究分享移动互联网App运营推广经验、策略、全案、渠道等纯干货知识内容;是广大App运营从业者的知识启蒙、成长指导、进阶学习的集聚平台;
想了解更多移动互联网干货知识,请关注微信公众号运营小咖秀(ID: yunyingshow)
【转载说明】  若上述素材出现侵权,请及时联系我们删除及进行处理:8088013@qq.com