跳到主要内容

设计推荐系统

需求

设计内容/商品推荐系统,支持:

  • 千万级用户、百万级物品
  • 推荐延迟 < 100ms
  • 支持多种推荐场景(首页、详情页、搜索结果)

架构设计

四层漏斗

层级目标候选数延迟方法
召回从全量中选出候选集全量 → 100010ms多路召回
粗排快速过滤1000 → 20010ms轻量模型
精排精确打分200 → 5030ms深度模型
重排多样性、业务规则50 → 205ms规则引擎

召回策略

召回通路方法适用场景
协同过滤UserCF / ItemCF有行为历史的用户
向量召回Embedding ANN全量用户
热门召回全站/分类 TopN冷启动用户
标签召回基于用户标签匹配新用户
关联召回看了又看、买了又买详情页推荐
-- ItemCF:基于物品的协同过滤
-- 找到与用户历史行为物品相似的物品
WITH user_items AS (
SELECT user_id, item_id
FROM user_behaviors
WHERE behavior_type = 'click'
AND behavior_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
),
item_similarity AS (
SELECT
a.item_id AS item_a,
b.item_id AS item_b,
COUNT(DISTINCT a.user_id) AS co_users,
-- 余弦相似度
COUNT(DISTINCT a.user_id) / SQRT(
(SELECT COUNT(DISTINCT user_id) FROM user_items WHERE item_id = a.item_id) *
(SELECT COUNT(DISTINCT user_id) FROM user_items WHERE item_id = b.item_id)
) AS similarity
FROM user_items a
JOIN user_items b ON a.user_id = b.user_id AND a.item_id < b.item_id
GROUP BY a.item_id, b.item_id
HAVING co_users >= 5
)
SELECT item_b AS recommend_item, similarity
FROM item_similarity
WHERE item_a IN (SELECT item_id FROM user_items WHERE user_id = 'target_user')
ORDER BY similarity DESC
LIMIT 100;

特征工程

特征类型示例更新频率
用户特征年龄、历史购买品类、活跃度T+1
物品特征价格、品类、CTR、上架时间T+1
上下文特征时间、设备、地点实时
交叉特征用户×品类偏好、用户×价格段T+1

常见面试问题

Q1: 冷启动如何解决?

答案

冷启动类型解决方案
新用户热门推荐 → 引导选择兴趣 → 基于注册信息推荐
新物品基于内容特征匹配 → 小流量曝光测试 → 收集数据后迭代

Q2: 如何评估推荐效果?

答案

评估方式指标说明
离线评估Precision/Recall/NDCG历史数据回测
在线 A/BCTR、转化率、人均消费真实流量实验
长期指标用户留存、多样性防止茧房效应

相关链接