转自:https://zhuanlan.zhihu.com/p/27963455
3.2 基于用户的协同推荐
终于,经过团队的努力,你的产品已经有了大量活跃用户了,这时候你开始不满足于现有的算法,虽然基于内容的推荐已经很精准了,但总是少了那么一点性感,因为你所有给用户的内容都是基于他们的阅读习惯推荐的,没能给用户“不期而遇”的感觉。
于是你就开始做基于用户的协同过滤了。
基于用户的协同过滤推荐算法,简单来讲就是依据用户A的阅读喜好,为A找到与他兴趣最接近的群体,所谓“人以群分”,然后把这个群体里其他人喜欢的,但是A没有阅读过的内容推荐给A;举例我是一个足球迷,系统找到与我类似的用户都是足球的重度阅读者,但与此同时,这些“足球群体”中有一部分人有看NBA新闻的习惯,系统就可能会给我推荐NBA内容,很可能我也对NBA也感兴趣,这样我在后台的兴趣图谱就更完善了。
1)用户群体划分
做基于用户的协同过滤,首先就要做用户的划分,可以从三方面着手:
a. 外部数据的借用
这里使用社交平台数据的居多,现在产品的登录体系一般都借用第三方社媒的登录体系,如国外的Facebook、Twitter,国内的微信、微博,借用第三方账户的好处多多,例如降低门槛,方便传播等,还能对个性化推荐起到重要作用。因为第三方账户都是授权获取部分用户信息的,往往包括性别,年龄,工作甚至社交关系等,这些信息对用户群划分很有意义。
此外还有其他的一些数据也能借用,例如IP地址,手机语种等。
使用这些数据,你很容易就能得到一个用户是北京的还是上海的,是大学生还是创业者,并依据这些属性做准确的大类划分。比如一篇行业投资分析出来后,“上海创业圈”这个群体80%的用户都看过,那就可以推荐给剩下的20%。
b. 产品内主动询问
常见在产品首次启动的时候,弹框询问用户是男是女,职业等,这样能对内容推荐的冷启动提供一些帮助,但总体来说性价比偏低,只能询问两三个问题并对用户的推荐内容做非常粗略的划分,同时要避免打扰到用户;这种做法算是基于用户个性化的雏形。
c. 对比用户特征
前文已经提到过,新闻的特征加用户的阅读数据能得到用户的特征,那就可以通过用户特征的相似性来划分群体。
2)内容推荐实施
我们结合一个很小的实例来了解用户协同过滤的原理,包括如何计算用户之间的相似性和如何做出推荐。假设有A,B,C,D,E共5个用户,他们各自阅读了几篇新闻并做出了阅读,赞,收藏,评论,分享操作,我们对这几种行为赋予的分数分别为1,2,3,4,5分,这样用户对每条新闻都有自己的得分,其中“-”表示未阅读,得分如下:
接下来,我们需要给用户E推荐4,5,6中的哪一篇?
用户的阅读特征向量由用户所有的阅读数据决定,我们以用户E阅读过的新闻数据作为参考标准,来找到与E最相似的用户。
多维向量的距离需要通过欧几里得距离公式来计算,数值越小,向量距离约接近
算出结果
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
因此得出结果用户D是与用户E阅读喜好最接近的那个,应该优先归为同一类用户。最终结论根据用户D的阅读数据,优先推荐news4。
3)内容选取
我们通过阅读特征向量把用户做群体划分后,接下来就是如何获取新闻推荐的优先级。上面的例子里面只需要选出一个相似用户,并且用户A,B,C,D都只阅读news4,5,6中的一条,所以比较简单,但现实情况中,同一个用户群体阅读的新闻多且随机,用户交互更是错综复杂,如何得出推荐新闻的优先级呢?
假设用户X在系统归属于群体A,这个群体有n个用户,分别为A0,A1,A2…An,这些用户的集合用S(X,n)表示;
a. 首先,我们需要把集合中所有用户交互过(阅读,评论等)的新闻提取出来;
b. 需要剔除掉用户X已经看过的新闻,这些就不用再推荐了,剩下的新闻集合有m条,用N(X,m)来表示;
c. 对余下的新闻进行评分和相似度加权的计算,计算包括两部分,一是用户X与S(X,n) 每一个用户的相似性,二是每个用户对新闻集N(X,m)中每条新闻的喜好,这样就能得到每条新闻相对于用户X的最终得分;
d. 将N(X,m)中的新闻列表按照得分高低的顺序推荐给用户。
4)优缺点
相比于基于内容的推荐算法,基于用户的协同过滤同样优缺点明显。
优点主要在于对分词等算法的精确度无太大要求,推荐都是基于用户的行为数据去不断学习和完善;同时能发现用户的潜在阅读兴趣,能“制造惊喜”;
而缺点则是启动的门槛高,用户量不够时几乎无法开展;并且学习量不够时推荐结果较差。
4 总结
个性化推荐的算法网上有很多资料,也有很多其他的实现方法,因为笔者了解也有限,所以也不误导大家了。
热度和个性化推荐算法,作为大部分内容型产品的核心卖点之一,依然在不断地进化和完善中。没有哪种算法是完美的,甚至没有哪种算法是一定优于其他的,在实际使用中,很多产品都是多算法结合去做好内容推荐。
而产品经理在算法的实施中,绝对不是一句“我们要做个性化推荐”就完事的,必须深入算法内部,对算法的原理做深入了解,然后结合自己的产品特征来部署和优化。
因此我针对产品经理整理了这一篇相对粗浅的算法相关的介绍,如有对这些内容感兴趣的,欢迎探讨!如有描述不当之初,敬请指正,感激不尽!