
1) 【一句话结论】:在电商推荐系统中,采用基于物品的协同过滤(Item-Based CF),通过预计算并存储商品间的相似度矩阵,对用户购买过的商品推荐相似商品,该算法时间复杂度低(推荐阶段为O(U*K),K为Top K相似商品数),适合商品数量庞大的场景(如淘宝百万级商品)。
2) 【原理/概念讲解】:老师口吻,解释核心思想。基于物品的协同过滤的核心是“商品相似度驱动推荐”,即先计算所有商品之间的相似度,再基于用户购买行为推荐相似商品。具体步骤:
类比:把商品看作“物品”,用户购买行为是“喜欢”,那么相似的商品就是“同类型”(如都是“运动鞋”),推荐就是“给你喜欢的‘运动鞋’的同类型‘篮球鞋’”,通过计算物品间的“相似性”来传递偏好。
3) 【对比与适用场景】:用表格对比基于物品和基于用户的CF:
| 维度 | 基于物品的CF(Item-Based CF) | 基于用户的CF(User-Based CF) |
|---|---|---|
| 定义 | 计算商品间的相似度,推荐相似商品 | 计算用户间的相似度,推荐相似用户购买的商品 |
| 计算对象 | 商品-商品相似度 | 用户-用户相似度 |
| 时间复杂度 | 计算阶段:O(N²)(N为商品数),推荐阶段:O(U*K)(U为用户数,K为Top K相似商品数) | 计算阶段:O(U²)(U为用户数),推荐阶段:O(U*K)(K为Top K相似用户数) |
| 适用场景 | 商品数量庞大(如电商百万级商品),用户行为稀疏 | 用户数量较少(如社交推荐),用户行为密集 |
| 注意点 | 需高效存储和查询商品相似度矩阵(如稀疏矩阵、缓存) | 需高效存储和查询用户相似度矩阵,用户间相似度计算效率低(用户数多时) |
4) 【示例】:以用户A(购买商品1、3)、用户B(购买商品1、2)为例,计算商品1和商品2的余弦相似度(共现用户为{A,B},共现用户数=2,用户1的购买用户数=2,用户2的购买用户数=2,故相似度=2/(√2*√2)=1)。推荐步骤:
# 用户购买历史
user_items = {'A': [1, 3], 'B': [1, 2]}
# 计算商品相似度(余弦相似度,共现用户数量)
item_sim = {}
for item1 in user_items['A']:
for item2 in user_items['A']:
if item1 != item2:
common_users = set(user_items['A']) & set(user_items['B'])
if item1 in common_users and item2 in common_users:
sim = 1 # 共现用户相同
else:
sim = 0
item_sim[(item1, item2)] = sim
# 推荐给用户A
recommended = []
for item in user_items['A']:
for similar_item, s in item_sim.items():
if similar_item[0] == item and similar_item[1] not in user_items['A']:
recommended.append((similar_item[1], s))
recommended.sort(key=lambda x: x[1], reverse=True)
# 输出推荐结果:商品2,相似度1
5) 【面试口播版答案】:面试官您好,针对电商推荐系统中计算用户与商品相似度的问题,我主要介绍基于物品的协同过滤(Item-Based CF)算法。核心思路是先预计算并存储商品间的相似度矩阵,再对用户购买过的商品推荐相似商品。具体来说:
6) 【追问清单】:
7) 【常见坑/雷区】: