协同过滤召回算法的几个优化点(一)
协同过滤算法是电商推荐场景中非常常见、发展历史也比较久的一类启发式算法。
通常情况下,电商的用户数量远比商品数量大、稳定性上来说也是商品相对稳定。
所以电商场景下通常使用Item Based CF算法,同时,采用余弦相似度的较多。
以此为例,记录一下项目中实际用到的几个优化点,可视情况组合使用。
原始评分预测公式1: r ^ u i = ∑ j ∈ S ( j , k ) ∩ N ( u ) w i j r u j \widehat{r}_{ui}={\textstyle\sum_{j\in S(j,k)\cap N(u)}}w_{ij}r_{uj} r ui=∑j∈S(j,k)∩N(u)wijruj
其中:
- r ^ u i \widehat{r}_{ui} r ui:用户u对物品i的预测评分
- N(u):用户喜欢的(有过评价的)物品集合
- S(j,k):和物品j最相似的K个物品集合
- S ( j , k ) ∩ N ( u ) S(j,k)\cap N(u) S(j,k)∩N(u):和物品j最相似的K个物品中,用户评价过的物品集合
- w i j w_{ij} wij:物品i和j的相似度
- r u j r_{uj} ruj:用户u对物品j的兴趣(评分)
物品相似度 w i j = ∣ N ( i ) ∩ N ( j ) ∣ ∣ N ( i ) ∣ w_{ij}=\frac{\left|N(i)\cap N(j)\right|}{\left|N(i)\right|} wij=∣N(i)∣∣N(i)∩N(j)∣
其中N(i)是喜欢物品i的用户数,分子是同时喜欢物品i和j的用户数。
优化点1:热门物品惩罚
如果物品j过于热门,有很多用户进行了评分,那么它会参与到许多物品的相似度计算中,而且所计算出的 w i j w_{ij} wij会很大,造成任何一个物品都和热门物品j有很大的相似度,这对于推荐的个性化和多样性是不利的。
一个改进的方法是将 w i j w_{ij} wij的分母由 ∣ N ( i ) ∣ \left|N(i)\right| ∣N(i)∣改为 ∣ N ( i ) ∣ ⋅ ∣ N ( j ) ∣ \sqrt{\left|N(i)\right|\cdot\left|N(j)\right|} ∣N(i)∣⋅∣N(j)∣,从而降低物品j的权重。
优化点2:显式使用评分值
原始的相似度计算公式中,分子 ∣ N ( i ) ∩ N ( j ) ∣ \mid N(i)\cap N(j)\mid ∣N(i)∩N(j)∣是同时喜欢物品i和j的用户数、分母 ∣ N ( i ) ∣ \mid N(i)\mid ∣N(i)∣是喜欢物品i的用户数,都没有用到评分值