推荐算法实践:ItemCF原理

144 阅读1分钟

ItemCF

  • 核心假设:如果用户历史上喜欢了某个物品,则在未来大概率会喜欢与该物品相似的物品。
  • 计算相似度:通过分析用户的行为记录(如购买、点击等),计算物品之间的相似度

相似分计算

1. 余弦相似度

缓解“哈利波特问题”:热门物品(如《哈利波特》系列)通常会被很多用户点击,如果没有分母的抑制作用,它们可能会在推荐中频繁出现,导致推荐结果过于集中于热门物品。通过分母的归一化,可以降低热门物品的相似度得分,从而提高推荐的多样性和个性化。

sim(i,j)=uij1Ni×Nj=重合用户数点击i的用户数×点击j的用户数\text{sim}(i, j) = \frac{\sum_{u \in i \cap j} 1}{\sqrt{N_i \times N_j}} = \frac{\text{重合用户数}}{\sqrt{\text{点击} i \text{的用户数} \times \text{点击} j \text{的用户数}}}
  • 分子部分uij1\sum_{u \in i \cap j} 1 表示同时对物品 iijj 产生过交互(如点击、购买等)的用户数量,即“重合用户数”。
  • 分母部分NiNj\sqrt{N_i N_j},其中 NiN_i 是点击物品 ii 的用户数,NjN_j 是点击物品 jj 的用户数。分母的这种形式可以有效抑制热门物品的过度影响。

2. Inverse User Frequency

IUF是一种用于修正物品相似度计算的参数,其基本思想是:活跃用户对物品相似度的贡献应该小于不活跃的用户。IUF的引入可以有效减少活跃用户对物品相似度的过度影响,从而提高推荐系统的性能。 IUF在推荐系统中的作用主要体现在以下几个方面:

  • 减少热门商品的影响:通过引入IUF,可以降低热门商品在相似度计算中的权重,从而提高推荐的多样性和个性化效果。
  • 提高推荐的准确性:IUF可以更准确地评估物品之间的相似性,从而提高推荐的准确性。

IUF的计算公式如下:

IUF(i,j)=uUij1log(1+Iu)\text{IUF}(i, j) = \sum_{u \in U_{ij}} \frac{1}{\log(1 + |I_u|)}

其中,UijU_{ij}表示同时交互过物品i和j的用户集合,IuI_u表示用户uu交互过的物品集合。

sim(i,j)=uijIUF(i,j)Ni×Nj\text{sim}(i, j) = \frac{\sum_{u \in i \cap j} \text{IUF}(i,j)}{\sqrt{N_i \times N_j}}

3. SwingI2I

Swing i2i算法的直觉来源是,如果大量用户同时喜欢两个物品,且这些用户之间的相关性低,那么这两个物品一定是强关联。

sim(i,j)=uUiUjvUiUj1α+IuIvsim(i,j)=\sum_{u \in U_i \cap U_j } \sum_{v \in U_i \cap U_j}\frac{1}{\alpha + |I_{u} \cap I_v|}
  • sim(i,j)sim(i, j):表示物品 ii 和物品 jj 之间的相似度。
  • UiU_i:表示对物品 ii 产生过交互的用户集合。
  • UjU_j:表示对物品 jj 产生过交互的用户集合。
  • UiUjU_i \cap U_j:表示同时对物品 ii 和物品 jj 产生过交互的用户集合。
  • IuI_u:表示用户 uu 产生过交互的物品集合。
  • IvI_v:表示用户 vv 产生过交互的物品集合。
  • IuIv|I_u \cap I_v|:表示用户 uu 和用户 vv 同时产生过交互的物品数量。
  • α\alpha:是一个超参数,用于控制分母的大小,避免分母为零的情况。

推荐分数计算

score(u,i)=jSsim(i,j)Ru,i\text{score}(u, i) = \sum_{j \in S} \text{sim}(i, j) \cdot R_{u, i}

其中:

  • score(u,s)\text{score}(u, s) 表示用户 uu 对物品 ss 的推荐分数。
  • SS 是用户 uu 历史交互过的物品集合。
  • sim(si,s)\text{sim}(s_i, s) 是物品 sis_i 和物品 ss 之间的相似度。
  • Ru,siR_{u, s_i} 是用户 uu 对物品 sis_i 的评分或交互强度。