前言:最近一段时间开始逐渐负责一些个性化推荐的项目,所以对推荐知识进行了一波恶补,这个过程其实是异常痛苦的,因为网上的知识要么过于”直白“,完全没有借鉴意义,要么就过于偏向技术,拒人于千里之外,于是便早早立下flag,要整理一篇针对于小白推荐PM的科普文章,由于自己也是做推荐中新的不能再新的新人,故求交流,求轻喷。
一、推荐系统的意义
1.1什么时候需要推荐系统
推荐系统本质上是一种信息过滤系统,主要解决的问题为信息过载,即用户与标的物(内容/商品/其他)之间的触达效率。
在传统行业场景下,由于货架有限,标的物不可能无限增加,解决信息过载问题相对比较容易,比如在一家路边超市,你想买一款饮料,只要转一圈就可以找到。到了大商场,商品变多,这个过程相对复杂点,你需要先到达对应的楼层,找到对应的饮料区域,在进行挑选购买。
在互联网场景下,由于货架成本被无限降低,对应的选择也会成几何量级的增加,这个时候帮助用户选择就显得十分重要了,这里又具体分为两个场景:
场景一:用户有明确或相对明确的需求,只是无从下手----解决方案为搜索引擎
场景二:用户没有明确的需求,比如我饿了想找点吃的,但是不知道吃啥-----解决方案为个性化推荐
(当然,搜索场景下依然需要推荐辅助决策,并不能粗暴割裂,这里只是为了方便理解就近似分类了)
综上:判别产品/业务线是否需要推荐系统的先决条件有两个:
①存在信息过载,即用户不能很容易或很快的从所有物品中找到自己想要的
②用户在当前场景下大部分时间是没有特别明确需求的
1.2推荐系统的是否有用?
这部分不用过于赘述,相信大家看的都比较多了,国外的亚马逊,国内的今日头条,不论大厂还是小厂,在这个信息爆炸的时代,都相对比较重视个性化推荐,效果也非常显著。
二、PM在个性化推荐工作中的主要作用
个性化推荐的相关工作中,稍微深入一点就会涉及复杂的算法、模型训练、机器学习的理论知识,在这些知识面前,往往RD更为强势,个人认为PM在个性化推荐工作中主要的内容是:
(1)确定以及跟进评估指标(项目管理)
(2)特征的选取与权重定义(懂业务)
(3)基础数据(用户数据&标签)的维护(数据意识)
(4)内容/商品数量、质量、展现形式的扩充与优化(降低推荐难度,提高起点)
(5)资源协调(抢人、撕逼、背锅)
以上五点从上到下是重要程度降序的关系,在保证数据的前提下,结合公司/团队/自身的实际情况,决定每一部分的参与程度,但是无论如何需要切记:个性化推荐是偏技术向的工作,PM不可能比技术更加了解,起好方向把握与润滑的作用即可(不懂可以学,别瞎比比)
三、推荐系统的关键指标
关键指标主要分为以下几类:
(1)用户满意度
这个主要通过用户调研体现,无论数据多么好,用户满意、时长增加才是唯一的判别标准
(2)预测准确度(precision)&召回率(recall)
这两个数据是TOPN推荐中最核心的指标,算法是把模型推荐数据与用户实际行为作比对,需要重点关注
(3)商业/产品目标
结合实际情况,关注最终的商业/产品目标是否达成,比如:交易额、点击率、订单量、停留时长、CTR等等
(4)其他指标
包括:覆盖率、多样性、新颖性、精细度、信任度、健壮度、实时性等多个维度的指标来评判模型的健康
四、基于邻域的相关推荐算法介绍
目前主流的推荐方法主要分为以下几类:
(1)协同过滤(CF)的推荐方法
(2)基于内容(CB)的推荐方法
(3)基于知识的推荐方法
以上三种主流的推荐方法,实际上是分别利用四种信息源来完成的,包括用户画像、物品画像、群体数据、知识模型。
其中CF推荐方法利用了群体数据信息源;CB推荐方法利用了用户画像和物品画像这种类信息源;KB推荐方法利用了用户画像、物品画像和知识模型三类信息源。
由此可见,没有一类推荐方法可以同时利用四种信息源。同时三类推荐方法也各有优缺点,可以说没有任何单独的一类方法可以解决所有局限性问题,因此,将多种推荐方法混合起来使用、各取其长的算法设计思路开始变得重要起来。即大多数公司的混合推荐系统
本次主要讲解最被大众熟知的(1)协同过滤(CF)的推荐方法
4.1基于邻域的推荐算法概述
协同过滤(collaborative filtering)是推荐系统最为常用的算法之一,已被很多知名网站如Amazon.com、TiVo、Netflix等成功应用在自己的推荐系统中。
协同过滤推荐系统的算法可以分为两类:基于记忆(memory-based)的和基于模型(model-based)的算法。memory-based与model-based 区别在于前者基于实例,先记住所有实例(训练数据),然后用相似度算法来泛化到新数据中,后者基于模型;基于训练数据学习一个模型(函数),然后基于该模型来做预测,本次我们下面主要讲解基于记忆(memory-based)的相关算法
基于记忆的算法最主要可以分为基于用户邻域(User-CF)的协同过滤和基于物品邻域(Item-CF)的协同过滤。下面详述
4.2基于用户邻域(User-CF)的协同过滤
基于用户邻域的协同过滤算法给用户推荐和该用户兴趣相似的其他用户喜欢的物品。具体的推荐过程为:我要给你推荐物品,首先找到和你兴趣最相似的一群用户,然后在他们喜欢但你还没有产生行为的物品中挑选你可能最感兴趣的N个物品推荐给你。
要实现上面的推荐过程,我们要做好两件事。一是准确找到和一个特定用户兴趣最相似的K个用户;二是在众多可能感兴趣的物品集合中选出最感兴趣的N个物品。
为了做好上面的两件事,基于用户邻域的协同过滤引进了下面两个概念:
(1)用户兴趣相似度数据,用于度量两个用户兴趣相似的程度。
这个概念实现的关键是计算两个用户的兴趣相似度主要原理为:给定用户u和v,令N(u)表示用户u曾经有过的正反馈的物品合集,令N(v)表示用户v曾经有过的正反馈的物品合集,利用余弦公式来量化相似程度
对于少量用户,其实直接计算就能很好地解决了,但事实上在海量用户的情况下,这样的复杂度是很难接受的,那么可优化的空间在哪里呢?其实用户的交互是稀疏的,所以对于很多(u,v)对来说其实没有计算的必要。所以可以选择做一个物品-用户倒排表,用一个矩阵C[u][v]来表示用户之间相同的交互数量,对于倒排表中的每个物品对应的用户,两两之间在C中+1,通过这种方式得到所有交互不为0的用户相似度即可。
(2)用户对物品的兴趣度数据,用于度量一个用户对一个物品的感兴趣程度。
有了相似度矩阵之后我们就可以进行推荐了,首先找出和用户相似度最高的K个用户,然后得到这K个用户发生交互商品的集合,去除用户原本已经发生交互的商品就得到了带推荐的集合,如何去衡量这些待推荐商品的优先级呢,很容易想到,如果它来自和用户相似度非常高的用户,那么它的优先级肯定应该高一点对吧,所以可以用如下公式来描述
与用户最相似的K个用户中如果用户v与待推荐商品发生过交互,则用户对该商品的兴趣加上这两个用户的相似度和该用户对该商品的兴趣的乘积,如果只是单纯的行为数据,则兴趣为1。有了用户对待推荐商品的兴趣之后,可以选择一个阈值N,将用户兴趣度最高的N个商品作为最后的推荐集合即可
4.3基于物品邻域(Item-CF)的协同过滤
基于物品邻域的协同过滤算法给用户推荐和该用户产生过行为的物品内容相似的其他物品。具体的推荐过程为:我要给你推荐物品,首选找到和你产生过行为的每个物品内容最相似的一批物品,然后在这些相似物品中挑选你可能最感兴趣的N个物品推荐给你。
要实现上面的推荐过程,我们要做好两件事。一是准确找到和一个特定物品内容最相似的K个物品;二是在众多相似物品集合中挑选出最感兴趣的N个物品。
为了做好上面的两件事,基于物品邻域的协同过滤引进了下面两个概念:
(1)物品内容相似度数据,用于度量两个物品内容相似的程度。
其中,|N(i)|是喜欢物品i的用户数,|N(j)|是喜欢物品j的用户数,|N(i)&N(j)|是同时喜欢物品i和物品j的用户数。
从上面的定义看出,在协同过滤中两个物品产生相似度是因为它们共同被很多用户喜欢,两个物品相似度越高,说明这两个物品共同被很多人喜欢。
(2)用户对物品的兴趣度数据,用于度量一个用户对一个物品的感兴趣程度。
在得到物品之间的相似度后,Item-CF 用如下公式计算用户u对一个物品的感兴趣程度
其中,Puj表示用户u对物品j的兴趣,N(u)表示用户喜欢的物品集合(i是该用户喜欢的某一个物品),S(i,k)表示和物品i最相似的K个物品集合(j是这个集合中的某一个物品),Wji表示物品j和物品i的相似度,Rui表示用户u对物品i的兴趣(这里简化Rui都等于1)。
该公式的含义是:和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。
4.4User-CF与Item-CF的区别
资料引用:
《推荐系统时间》-项亮
《集群智慧编程》Toby Segara
https://www.jianshu.com/p/b0fa0f900d73-(-萧饭饭-PM个性化推荐总结)
http://www.cnblogs.com/shijingxiang/articles/5773246.html
https://blog.csdn.net/ningyanggege/article/details/80930542
由于写的很仓促,很多部分取自博客//知乎,如有未提到的引用烦请提醒,十分抱歉。