推荐系统学习(二):召回-协同过滤-ItemCF
基于物品的协同过滤 (ItemCF)
核心思想
ItemCF 的核心假设是:用户的兴趣具有连贯性,喜欢某个物品的用户,往往也会对与该物品相似的其他物品感兴趣。例如,一个购买了T恤的用户,很可能也会喜欢与这件T恤相似的夹克。算法的目标是回答“和你喜欢的物品相似的还有什么”。
第一步:物品相似度计算
余弦相似度 (Cosine Similarity)
当只有用户的交互行为(如点击、购买,即隐式反馈)而没有具体评分时,常使用余弦相似度。它通过计算两个物品的共同用户数,并进行标准化,以消除热门物品因用户数多而带来的影响。
1 | |
其中,N(i) 是与物品 i 有过交互的用户集合,|N(i) ∩ N(j)| 是物品 i 和 j 的共同用户数。
皮尔逊相关系数 (Pearson Correlation Coefficient)
当有具体评分数据(显式反馈)时,皮尔逊相关系数是更好的选择。它通过将每个用户的评分减去该物品的平均分,来消除不同物品评分标准(如有的物品普遍分高,有的偏低)带来的偏差,更关注评分的相对趋势。
1 | |
其中,U_ij 是同时评价过物品 i 和 j 的用户集合,r_ui 是用户 u 对物品 i 的评分,r̄_i 是物品 i 的平均评分。
第二步: 候选物品推荐
加权求和 (用于隐式反馈)
计算出物品相似度后,可以预测用户 u 对未接触物品 j 的兴趣分数。方法是找到用户 u 历史上喜欢的物品,并将这些物品与物品 j 的相似度进行加权求和。
1 | |
其中,N(u) 是用户 u 交互过的物品集合,w_ji 是物品 j 和 i 的相似度,r_ui 是用户 u 对物品 i 的兴趣强度(可以简单设为1)。
基于平均分的评分预测 (用于显式反馈)
当使用皮尔逊相关系数时,评分预测公式会以物品的平均分作为基准,并根据用户对相似物品的评分偏好进行调整。
1 | |
这个公式的逻辑是:用物品 j 的平均分作为基础预测,然后加上一个修正项,该修正项是用户对相似物品的评分(减去该物品的平均分)与相似度的加权平均。
第三步:一些优化
计算复杂度优化
暴力计算所有物品对的相似度时间复杂度高达 O(|I|^2),在物品数量巨大时不可行。由于许多物品对没有共同用户,相似度为0,计算它们是浪费时间。
基于用户-物品倒排表的优化:
该方法不直接遍历物品对,而是从用户出发,其时间复杂度为 O(Σ|N(u)|²) ≈ O(R * k̄),其中 R 是总交互数,k̄ 是用户平均交互的物品数。在稀疏数据中,此方法效率远高于暴力计算。
- 构建用户-物品倒排表:为每个用户
u维护一个他/她交互过的物品列表N(u)。 - 计算物品共现矩阵:遍历每个用户的物品列表
N(u),将列表中的物品两两配对(i, j),在共现矩阵C[i][j]中对应位置加1。这个矩阵记录了物品i和j的共同用户数。 - 计算最终相似度:利用共现矩阵
C和每个物品的总用户数N,代入余弦相似度公式,计算出最终的物品相似度矩阵。
Swing算法:面向工业场景的优化
传统ItemCF存在热门物品主导推荐、无法区分噪音点击等问题。Swing算法通过分析用户-物品交互的图结构来优化相似度计算,其核心思想是:如果两个物品被许多没有太多其他共同兴趣的用户对同时喜欢,那么这两个物品的关联性就更强。
1 | |
其中,U_i 是与物品 i 交互的用户集合,I_u 是用户 u 交互的物品集合,w_u 是用户权重,α 是平滑系数。这个公式惩罚了兴趣广泛的用户对所产生的共现。
Surprise算法:互补商品推荐
作为Swing的扩展,专门用于挖掘具有时序性和方向性的互补关系(如先买手机再买手机壳)。它通过融合类别、商品和聚类三个层面的信息来综合衡量互补性。最终的互补关系分数通过线性组合得出:
1 | |
其中,Comp_cluster(i, j) 代表通过商品聚类缓解数据稀疏问题后,计算出的聚类层面的互补相关性。