Recommendation

1 minute read

Published:

This is my personal notes for recommendation.

推荐指标

CTR: 点击PV/展现PV, 点击UV/展现UV
覆盖率: 推荐系统能够推荐出来的视频总数 / 总视频数
召回率: 推荐列表中用户点击的视频数 / 用户实际点击的视频总数
平均时长: 平均每个用户的播放时长

CF Algorithms

目前有关个性化推荐算法主要分为三大类:

  • 1.基于协同过滤的推荐;
  • 2.基于内容过滤的推荐和;
  • 3.社会化推荐;

本文主要讨论基于协同过滤(CF)的推荐,而该算法也可以划分为两类(Item-CF, User-CF)。

  • 1.基于物品的协同过滤算法(Item-CF)
    内容过滤根据信息资源与用户兴趣的相似性来推荐商品,通过计算用户兴趣模型和商品特征向量之间的向量相似性,主动将相似度高的商品发送给该模型的客户。由于每个客户都独立操作,拥有独立的特征向量,不需要考虑别的用户的兴趣,不存在评价级别多少的问题,能推荐新的项目或者是冷门的项目。这些优点使得基于内容过滤的推荐系统不受冷启动和稀疏问题的影响。
  • 2.基于用户的协同过滤算法(User-CF)
    该算法利用用户之间的相似性来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。但有很难解决的两个问题,一个是稀疏性,即在系统使用初期由于系统资源还未获得足够多的评价,很难利用这些评价来发现相似的用户。另一个是可扩展性,随着系统用户和资源的增多,系统的性能会越来越差。

Item-CF

算法流程

  • 1.构建用户–>物品的倒排;
  • 2.构建物品与物品的同现矩阵;
  • 3.计算物品之间的相似度,即计算相似矩阵;
  • 4.根据用户的历史记录,给用户推荐物品;

算法实例: 数据:A;{a,b,d},B:{c,d,e},C:{c,d},D:{b,c,d},E:{a,d}

  • 流程1 物品用户倒排
User\Itemabcde
A11 1 
B  111
C  11 
D 111 
E1  1 
  • 流程2 构建物品-物品的同现矩阵 数字表示两种物品同时出现的次数,对角线为空
Item\Itemabcde
a 1 2 
b1 221
c 2 21
d222  
e 11  
  • 流程3 计算物品之间的相似度,即相似矩阵 $W_{ij}=|N(i)⋂N(j)|/\sqrt{|N(i)||N(j)|}$ 分子为物品的同现次数,分母为两物品在用户中出现的总次数
Item\Itemabcde
a 0.41 0.71 
b0.41 0.670.580.58
c 0.67 0.580.58
d0.710.580.58  
e 0.580.58  
  • 流程4 根据用户的历史记录,给用户推荐物品 最终推荐的什么物品,由预测兴趣度决定。 例如:A用户喜欢a,b,d ,兴趣度分别为1,1,1
    • 推荐c的预测兴趣度=1X0.67+1X0.58=1.25
    • 推荐e的预测兴趣度=1X0.58=0.58

User-CF

算法流程:
三个用户分别为A用户、B用户、C用户。他们看过的电影中,既有相同的,也有不同的。
我们需要计算待推荐的用户A与所有的用户的相似度,进而找到与A用户最相似的N个用户,假设N=1,则需要找到与A用户最相似的1个用户(B),从而将B看过而A没有看过的电影推荐给A。

相似度计算: Person系数、欧式距离

  • Pearson相关系数用来衡量两个数据集合之间的相似性
  • Pearson相关系数的一个优点是可以避免评分等级膨胀(grade inflation)的问题,也就是说有的用户可能倾向于对所有的电影都给比较高的分数,而有的用户则会比较苛刻,给分都比较低。对于这种情况,Pearson相关系数可以处理。

Choice of User-CF and Item-CF

1、user和item数量分布以及变化频率

  • 如果user数量远远大于item数量, 采用Item-CF效果会更好, 因为同一个item对应的打分会比较多, 而且计算量会相对较少
  • 如果item数量远远大于user数量, 则采用User-CF效果会更好, 原因同上
  • 在实际生产环境中, 有可能因为用户无登陆, 而cookie信息又极不稳定, 导致只能使用item-cf
  • 如果用户行为变化频率很慢(比如小说), 用User-CF结果会比较稳定
  • 如果用户行为变化频率很快(比如新闻, 音乐, 电影等), 用Item-CF结果会比较稳定

2、相关和惊喜的权衡

  • item-based出的更偏相关结果, 出的可能都是看起来比较类似的结果
  • user-based出的更有可能有惊喜, 因为看的是人与人的相似性, 推出来的结果可能更有惊喜

3、数据更新频率和时效性要求

  • 对于item更新时效性较高的产品, 比如新闻, 就无法直接采用item-based的CF, 因为CF是需要批量计算的, 在计算结果出来之前新的item是无法被推荐出来的, 导致数据时效性偏低;
  • 但是可以采用user-cf, 再记录一个在线的用户item行为对, 就可以根据用户最近类似的用户的行为进行时效性item推荐;
  • 对于像影视, 音乐之类的还是可以采用item-cf的;