第一部分 基础介绍
推荐系统有什么用?
推荐系统的应用范围?
推荐系统的准则?
推荐系统的常用应用场景举例
第二部分:算法及应用举例
推荐系统常用什么算法?
个性化推荐如何冷启动?
如何做内容相关性的推荐?
如何做基于用户操作协同的推荐?
第一部分 基础介绍
推荐系统是什么?
简单来说推荐系统就是研究用户在平台上的所有行为,对用户进行人物画像,以及研究平台上的内容/产品。同时把用户和产品匹配起来的过程。
推荐系统有什么用?
个性化推荐的存在价值就是通过梳理和优化用户关系网络、打通内容传播链条、引爆信息定向传播,从而实现加速高价值用户关系构建、优质内容传播和商业化营收等目标。
简单的说就是提供了一个“物以类聚,人以群分”的人性化服务,表现形式是“千人千面”。他可以把用户最感兴趣的东西呈现在用户眼前,提升用户体验,增加用户粘性。
推荐系统的应用范围?
推荐系统在各个领域有广泛的应用,比如电商网站、视频网站、视频直播平台、新闻客户端、文学网站、音乐网站等等。几乎To C的产品都能用到。
个性化推荐的准则?
推荐理由是提升用户信任的桥梁:比如好友推荐、名人推荐、媒体推荐、入选榜单、人以群分(与您口味相似的人都。。。)、用户行为(最近7天浏览过。。。)
推荐的最高境界是让用户产生惊喜
推荐方式多样化(多维度、多方法)
推荐的维度可以:用户细分(学生党、辣妈),内容分类(军事、娱乐)
推荐系统的常用应用场景举例
1.APP首页的“推荐”、“热门”
2.在发现栏目给用户推荐感兴趣的内容
3.内容详情页的关联推荐/相关推荐。
4.阅读结束/视频播放结束/直播结束推荐
5.搜索页面推荐
第二部分:算法及应用举例
一、推荐系统常用算法?
推荐系统中常用到的算法包括用户偏好算法,协同过滤算法(item_base,user_base)、关联规则算法、聚类算法、内容相似性算法(content_base),以及一些其它的补充算法。
1.根据用户偏好算法可以算出来用户感兴趣的内容/产品。然后推荐给用户
2.item_base(基于内容的协调过滤算法)是根据集体用户行为算出物品间的相似度,然后把与用户看过的物品或者购买过的物品最相似的物品推荐给该用户。
3.user_base(基于客户的协调过滤算法)是根据集体行为计算用户之间的相似度,比如A跟B计算出来非常相似,则可以把B喜欢的内容,但A还没有看过,推荐给A。
4.根据关联规则算法,可以算出物品间的支持度和置信度。最常见的应用是组合购买,百分之八十买了A商品的人都买了B商品
5.聚类算法可以根据用户进行聚类,也可以对产品进行聚类。聚类后可以针对大类进行推荐,或者继续计算用户类和产品类之间的关系。
4.content_base(内容相似性算法)是根据物品本身的属性进行关联性运算,计算出物品间的相似性,最常见的应用是同类推荐。
二、个性化推荐如何冷启动?
一款产品刚上市该如何应用个性化推荐算法呢?无论是基于用户行为的个性化,还是基于内容相似度的个性化,都是需要建立在大量的用户数和内容的基础上。在产品发布之初,个性化推荐无法开展,此时一般采用“热度算法”。
热度算法就是把热点的内容优先推荐给用户。虽然无法做到基于兴趣和习惯为每一个用户做到精准化的推荐,但能覆盖到大部分的内容需求,而且启动成本比个性化推荐算法低太多。
所以冷启动时一般先采用“热度算法”将热点先推荐给客户,获取一定的用户数据后再启动个性化推荐
如何设计热度算法?(以新闻为例)
1.基本原理:
新闻热度分 = 初始热度分 + 用户交互产生的热度分 – 随时间衰减的热度分
Score = S0 + S(Users) – S(Time)
这里需要给初始热度定值,给用户各操作定值,给时间衰减定值,最后根据算出来的热度决定在推荐列表中的排序
2.初始热度分:
实践中发现不同新闻受关注度不同,初始热度分其实也应该是一个变量。我们可以这样做:
(1)分类给分。按照新闻类别给予新闻不同的初始热度,让用户关注度高的类别获得更高的初始热度分,从而获得更多的曝光,例如:
(2)热词匹配。对于重大事件的报道,采用的是热词匹配的方式。对大型新闻站点的头条,Twitter热点,竞品的头条做监控和扒取,并将这批新闻的关键词维护到热词库并保持更新;每条新闻入库的时候,让新闻的关键词去匹配热词库,匹配度越高,就有越高的初始热度分。
3.用户交互产生的热度分
确定用户会有哪些操作,具体操作会产生多少热度分。比如一条新闻用户可以点击阅读(click),收藏(favor),分享(share),评论(comment)。我们可以做如下定义:
S(Users) = 1*click + 5*favor + 10*comment + 20*share
实践中发现不同新闻用户规模不同,会导致用户行为的影响力不同,因此,要么做内容运营时,对行为分不断调整,要么吧用户规模也考虑进去,可以这么做:
S(Users) = (1*click + 5*favor + 10*comment + 20*share)/DAU * N(固定数)
4.时间衰减
参考牛顿冷却定律(这里也只是借过来用用而已),时间衰减因子应该是一个类似于指数函数:
T(Time) = e ^ (k*(T1 – T0))
5.热度算法调优
按照之前的“Score = S0 + S(Users) – S(Time)”的算法,热度和时间是线性关系,如下图的红线。而根据常识及调研可知已经发布的新闻的热度值必须随着时间流逝而衰减,并且趋势应该是衰减越来越快,直至趋近于零热度。如下图红线:
因此我们可将算法改为(行业基本上用这个,并不是说是唯一的):
Score = ( S0(Type) + S(Users) ) / T(Time)
6.其他
实际应用中用户还有诸如“赞”,“踩”、“不再推荐此类”等操作,具体公式还要视具体情况而定。另外热度推荐、个性化推荐本身也会导致用户大量的点击。从而导致被推荐的越来越热的情况。所以公式的各项参数都需要不断的调教。最好所有的调整指标都做成运营可调的形式。
7.拓展
上诉是以新闻为例阐述的热度算法的基本步骤流程。不同行业维度不同,公式自然不同。如果应用到电商,则可能推荐的维度是购买最多、最新款。如果应用到O2O餐饮,则可能推荐的是距离最近、评分最高、客流量最大。
三、如何做内容相关性的推荐?
内容相关性推荐主要解决途径有:
内容相似性算法:根据物品本身的属性进行关联性运算,计算出物品间的相似性,最常见的应用是同类推荐。
基于内容的协调过滤算法:是根据集体用户行为算出物品间的相似度,然后把与用户看过的物品或者购买过的物品最相似的物品推荐给该用户。
这里以复杂度最高的新闻为例:
内容相关性推荐基本思路是将内容打标签——同类推荐,如果是新闻的话则需要分词,计算相似度步骤为:分词—计算关键词指标—算法定义—用户匹配
1.分词
分词需要有两个库,即正常的词库和停用词库,具体技术手段不讨论。
正常词库类似于一本词典,是把内容拆解为词语的标准。
停用词库则是在分词过程中需要首先弃掉的内容,比如“这”、“那”、“然后”(可以理解为除了关键词的那一部分)。
因为网络世界热词频出,标准词库和停用词库也需要不断更新和维护,可以在网上查找或购买那些能随时更新的词库。
2.关键词指标
内容相关性的推荐本质上是关键词相关性的推荐,所以定义一个指标:内容频率,称为TF(Term Frequency),用来衡量关键词在内容中出现的频率
但两个内容关键词和出现的频率都很接近那就意味着两个内容相关性很高么?当然不是,比如一篇文章说北京市政如何如何,“北京”这个关键词频率高达10%。另一篇文章说北京天气如何如何,“北京”这个关键词频率也高达10%。但他们明显没啥相关度。所以仅靠“TF”并不能进行相关性推荐。
这里再定义一个指标:关键词在在所有文档中出现的频率的相反值,称为IDF(Inverse Document Frequency)。
然后定义关键词指标:TFIDF=TF * IDF,这样一来上例中的“北京”就被Pass掉了。
它的原理是:一个关键词在某条新闻出现的频率最大,在所有文档中出现的频率越小,该关键词对这条新闻的特征标识作用越大。
3.算法定义
做完上述两步可以得到一个新闻特征集:
Word是关键词,tfidf是Word的权重,(Word,tfidf)是一个向量。两个内容重合度越高,tfidf值越接近。那么向量(wordA,tfidfA)和向量(WordB,ifidfB)的夹角越小。我们可以用夹角余弦来表示,得出公式:
4.用户匹配
完成上述三步就已经完成了内容的分类,接下来需要将内容推送给对该类内容可能感兴趣的用户。
参照热度算法中的用户交互热度分,我们可以依葫芦画瓢。比如一条新闻用户可以点击阅读(click),收藏(favor),分享(share),评论(comment)。我们可以做如下定义:
以上是内容推荐的实现方案,它不会受到用户数量的影响。仅取决于具体用户的操作,而且每个用户的推荐相互独立并不会相互影响。但是它推荐的内容都是由用户的阅读历史决定,所以没办法挖掘用户的潜在兴趣,没办法为用户带来惊喜。
四、如何做基于用户操作协同的推荐?
基于内容的推荐算法有其独特的优势,但是不能给用户带来不期而遇的惊喜感。这就需要做基于用户的协同操作的推荐。主要解决途径有:
基于客户的协调过滤算法:是根据集体行为计算用户之间的相似度,比如A跟B计算出来非常相似,则可以把B喜欢的内容,但A还没有看过,推荐给A。
根据用户偏好算法:根据用户的历史操作算出来用户感兴趣的内容/产品。然后推荐给用户
基于客户的协调过滤算法简而言之就是找到相同喜好的人,实现“人以群分”,把内容推荐给有相同喜好的人。关键在于用户群体划分,推荐内容排序。
基于用户操作协同的推荐虽然能给人制造“惊喜”,但对用户操作依赖很高。实际运用中个性化推荐应该多种推荐方法同时使用。
1.如何用户群体划分?
1.借用第三方登录获取用户信息,比如通过微信、QQ、微博等登录
2.产品首次启用时问询打、标签
3.根据用户操作总结经验给用户打标签
2.如何根据用户操作总结经验给用户打标签?
对用户的操作进行赋值,比如阅读,赞,收藏,评论,分享操作,我们对这几种行为赋予的分数分别为1分、2分、3分、4分和5分,得出用户(阅读)特征向量。特征向量越接近用户间的(阅读)喜好越接近。
举例:比如有A、B、C、D和E共5个用户,他们各自阅读了几篇新闻并做出了阅读,赞,收藏,评论,分享操作,我们对这几种行为赋予的分数分别为1分、2分、3分、4分和5分,这样用户对每条新闻都有自己的得分,其中“-”表示未阅读,得分如下:
问:接下来,我们需要给用户E推荐4,5,6中的哪一篇?
五位用户的特征向量分别为:
根据欧几里得距离公式,他们之间的距离分别为:
distance(E,A)=4.123 (用户A没有阅读news2,因此news2的数据不能用来计算与用户E的相似度,这里取1,3)
distance(E,B)=3.162
distance(E,C)=3.742
distance(E,D)=1.414
所以,应该把DE喜好最接近,应该给E推荐news4。
3.如何进行推荐内容排序?
1.提取该用户类型(A)下所有内容
2.剔除该用户(a1)已阅读内容,剩下待推荐列表
3.对待推荐列表中的内容惊喜加权计算。包括该用户(a1)与群体中其他用户(a2,a3...)的相似程度和其他用户(a1,a2...)对该条内容的喜欢程度(具体算法不清...)
4.根据第3条的得出的得分进行高低排序
由于用户需求的复杂性,个性化推荐其实也并不是一个万金油。比如我现在突然对军事新闻感兴趣,明天又不感兴趣了怎么办?比如我今天想买鞋子,然后还想买件外套。但淘宝因为我买了鞋子所以一直给我推荐鞋子,这时我的体验是不好的。
所以个性化推荐往往作为一个“您可能感兴趣”而存在。或者与之匹配的必然还有一个垂直搜索的功能。