协同过滤算法

推荐系统构建三大方法:基于内容的推荐content-based,协同过滤collaborative filtering,隐语义模型(LFM, latent factor model)推荐。这篇博客主要讲协同过滤。
——​​《推荐系统:协同过滤collaborative filtering》​​

协同过滤(CF, Collaborative Filtering)的主要思想是:利用已有的用户群过去的行为或者意见预测当前用户最可能喜欢哪些东西或者对哪些东西感兴趣。主要应用场景是在线零售系统,目的是进行商品促销和提高销售额。
——《​​​协同过滤​​》


  协同过滤(Collaborative Filtering, CF) 是一种非常经典的推荐系统算法,其完全由统计学出发,挖掘用户与物品之间的相关性。协同过滤顾名思义,先协同,即寻找相似的用户或物品,再过滤,即筛选出符合条件的内容。

  在推荐系统中,主要有两个主体,包括 用户(User)物品(Item) ,协同过滤也因此分为用户协同过滤(UserCF)物品协同过滤(ItemCF) 。简单的罗列描述如下:

  • 用户协同过滤:是指根据相似性的用户进行推荐。具体地讲,当为某一个用户 【推荐系统】协同过滤算法_推荐系统 进行推荐相关物品时,先根据这个用户的交互历史,与其他所有用户计算相似度,获得一定数量的最相似的用户 【推荐系统】协同过滤算法_协同过滤_02 ,其次根据这些用户所交互过的物品获得候选的物品列表,最后将这些物品推荐给用户 【推荐系统】协同过滤算法_推荐系统
  • 物品协同过滤:是指根据相似性的物品为用户进行推荐。具体地讲,首先获得某个用户 【推荐系统】协同过滤算法_推荐系统

1、共现矩阵

【推荐系统】协同过滤算法_协同过滤_05 和一组物品 【推荐系统】协同过滤算法_协同过滤_06 ,其中 【推荐系统】协同过滤算法_推荐系统_07 分别表示用户和物品的数量。推荐系统的前提是获取用户与物品的交互数据,因此即需要获得用户集合 【推荐系统】协同过滤算法_相似度_08 中每个用户 【推荐系统】协同过滤算法_协同过滤_09 与物品集合中 【推荐系统】协同过滤算法_协同过滤_10 中,每个物品之间的交互关系,因此这属于一个典型的二分图结构。图中,包含两类不同的结点,分别表示用户和物品,图中边的两端结点类型不同,边表示用户与物品之间存在交互历史,边上的权值则可以表示评价(正反馈,或打分等)。因此可以选择共现矩阵进行存储。

共现矩阵是描述用户与物品之间交互的矩阵,一般地,行表示某个用户与所有物品的交互数据,列表示某个物品与所有用户的交互数据。相比邻接矩阵而言,其可用于存储二分图。

例1: 给定三个用户 【推荐系统】协同过滤算法_推荐系统_11 和三个物品 【推荐系统】协同过滤算法_推荐系统_12 ,假设存在一定的交互数据(左侧为二分图,1表示存在交互,0表示不存在交互),则可以转化为共现矩阵表示(右侧图)。 当新来一个用户 【推荐系统】协同过滤算法_推荐系统_13, 其只与2号物品有过交互,推荐系统的目标则是为这个用户推荐其他没有交互过的物品,例如预测图中的绿色边是否存在。

【推荐系统】协同过滤算法_协同过滤_14

【推荐系统】协同过滤算法_推荐系统_15 表示第 【推荐系统】协同过滤算法_相似度_16 个用户对物品 【推荐系统】协同过滤算法_推荐系统_17 的得分。其可以表示为 【推荐系统】协同过滤算法_相似度_18,其中 【推荐系统】协同过滤算法_推荐系统_19 表示第 【推荐系统】协同过滤算法_协同过滤_20 个用户向量;也可以表示为 【推荐系统】协同过滤算法_相似度_21, 其中 【推荐系统】协同过滤算法_相似度_22 表示第 【推荐系统】协同过滤算法_协同过滤_23

2、相似度

  根据上面的描述,可知协同过滤中非常重要的部分是计算相似度。一般地,常见的相似度量函数有:

  • 余弦相似度:给定两个向量 【推荐系统】协同过滤算法_推荐系统_24【推荐系统】协同过滤算法_推荐系统_25,则有 【推荐系统】协同过滤算法_相似度_26
  • 皮尔逊相关系数

    皮尔逊相关系数本质上就是对共现矩阵的归一化后任意两个用户之间的协方差,当协方差值越大,则说明相关度越大。其中 【推荐系统】协同过滤算法_相似度_27 表示用户 【推荐系统】协同过滤算法_协同过滤_28 对物品 【推荐系统】协同过滤算法_相似度_29 的打分,【推荐系统】协同过滤算法_相似度_30 则表示用户 【推荐系统】协同过滤算法_协同过滤_28
  • 杰卡德相似度:通常适合集合,在共现矩阵中,可以对每个用户表示具有交互的物品集合,因此可以使用集合的相似度,记做
    【推荐系统】协同过滤算法_推荐系统_32

有了相似度函数,则可以进行协同过滤。

2、用户协同过滤

【推荐系统】协同过滤算法_推荐系统_15 表示第 【推荐系统】协同过滤算法_相似度_16 个用户对物品 【推荐系统】协同过滤算法_推荐系统_17

  • 给定一个用户 【推荐系统】协同过滤算法_协同过滤_36,选择相应的相似度函数,计算其与其他所有用户 【推荐系统】协同过滤算法_推荐系统_37 之间的相似度 【推荐系统】协同过滤算法_相似度_38
  • 对所有相似度进行由高到低排序,并获取TopK个最相似的用户集合,记做 【推荐系统】协同过滤算法_协同过滤_39
  • 根据这TopK个用户的反馈物品数据,分别预测该用户 【推荐系统】协同过滤算法_协同过滤_36 对每个物品 【推荐系统】协同过滤算法_相似度_29 的评价得分,公式为:
    【推荐系统】协同过滤算法_相似度_42
    直观理解为,每个用户 【推荐系统】协同过滤算法_协同过滤_43【推荐系统】协同过滤算法_协同过滤_36 的相似度与 【推荐系统】协同过滤算法_推荐系统_37【推荐系统】协同过滤算法_相似度_29

例2: 假设例1中的共现矩阵中的元素表示用户为物品的打分,试预测用户 【推荐系统】协同过滤算法_推荐系统_13 与物品 【推荐系统】协同过滤算法_相似度_48

  • 用户 【推荐系统】协同过滤算法_相似度_49 可以初始化表示为向量 【推荐系统】协同过滤算法_推荐系统_50,并选择余弦相似度与其他3个用户计算相似度,计算得分分别为 【推荐系统】协同过滤算法_推荐系统_51,发现用户 【推荐系统】协同过滤算法_协同过滤_52
  • 【推荐系统】协同过滤算法_协同过滤_52 用户所有反馈物品 【推荐系统】协同过滤算法_相似度_54【推荐系统】协同过滤算法_推荐系统_55 已经与用户 【推荐系统】协同过滤算法_相似度_49 有过交互,则只需要计算物品 【推荐系统】协同过滤算法_协同过滤_57 的预测值。代入式子得到 【推荐系统】协同过滤算法_协同过滤_58
  • 因此,预测结果为1。

  用户协同过滤存在两个不足之处:
(1)通常用户数远远大于物品数,因此寻找相似用户的计算量会非常大;
(2)用户的历史数据向量往往非常稀疏。

3、物品协同过滤

  物品协同过滤是基于物品进行推荐的协同过滤算法。通过共现矩阵中物品列向量的相似度得到物品之间相似矩阵。再找到用户的历史正反馈物品的相似物品进行一步排序和推荐,物品协同过滤具体过程:

  • 给定一个用户 【推荐系统】协同过滤算法_相似度_29,选择相应的相似度函数,计算其与其他所有用户 【推荐系统】协同过滤算法_推荐系统_60 之间的相似度 【推荐系统】协同过滤算法_相似度_61
  • 获得当前用户的正反馈物品列表;
  • 针对用户的正反馈物品,找出相似的TopK个物品,组成相似物品集合, 【推荐系统】协同过滤算法_相似度_62
  • 对相似物品集合中的物品,利用相似度分值进行排序,生成最终的推荐列表;相似度分值计算为:
    【推荐系统】协同过滤算法_推荐系统_63

4、协同过滤总结

(1)用户协同过滤(UserCF)是基于用户相似度进行推荐的,用户可以快速地了解与自己相似的其他用户的偏好。UserCF更适用于发现热点,跟踪热点的趋势;
(2)基于物品协同过滤(ItemCF)是基于物品相似度进行推荐的,用户在某一段内更倾向于寻找一类商品,根据用户偏好的物品来寻找与之相似的物品进行推荐,更加契合用户动机
(3)协同过滤算法具有可解释性,但不具有泛化能力
(4)协同过滤不能处理长尾效应以及稀疏性的数据;
(5)协同过滤只对用户-物品的交互数据进行分析,无法有效引入其他信息,例如用户信息、物品信息等