1. 项目概述
去年在做一个电商推荐模块时,我尝试了多种推荐算法,最终发现基于物品的协同过滤(ItemCF)在实际业务中表现最为稳定。今天就来详细拆解这个经典算法的实现细节和优化技巧。
ItemCF的核心思想很简单:如果用户喜欢物品A,那么与A相似的物品B也值得推荐。相比基于用户的协同过滤(UserCF),ItemCF更适合物品数量相对稳定、用户行为数据稀疏的场景。比如在视频平台,每天新增的视频数量有限,但用户观看记录却很分散,这时用ItemCF就能建立更稳定的物品关联关系。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心算法原理
2.1 相似度计算
物品相似度的计算是ItemCF最关键的环节。假设我们有以下用户-物品交互矩阵:
| 用户 | 物品A | 物品B | 物品C |
|---|---|---|---|
| 用户1 | 1 | 0 | 1 |
| 用户2 | 1 | 1 | 0 |
| 用户3 | 0 | 1 | 1 |
计算物品A和B的余弦相似度:
- 找出同时交互过A和B的用户(用户2)
- 向量A=[1,1,0],向量B=[0,1,1]
- 点积:10 + 11 + 0*1 = 1
- 模长:|A|=√(1+1+0)=√2,|B|=√(0+1+1)=√2
- 相似度:1/(√2*√2)=0.5
实际工程中更常用改进的余弦相似度,会加入物品的热门程度惩罚:
code复制sim(i,j) = ∑(u∈U)(r_u,i * r_u,j) / (sqrt(∑r_u,i²) * sqrt(∑r_u,j²)) * 1/log(1+|N(i)|)
其中N(i)是喜欢物品i的用户数,这个惩罚项可以降低热门物品的相似度权重。
2.2 推荐生成
得到物品相似度矩阵后,为用户u生成推荐的公式:
code复制p(u,j) = ∑(i∈N(u)) sim(j,i) * r_u,i
其中N(u)是用户u有过行为的物品集合,r_u,i表示用户u对物品i的评分(隐式反馈时可用1代替)。最后按p(u,j)降序排列取TOP-N即可。
3. 工程实现要点
3.1 数据预处理
实际业务中的数据往往需要经过以下处理:
- 行
