课程概览 #
推荐系统是互联网时代最重要的应用技术之一,从电商推荐到内容分发,从社交网络到搜索引擎,推荐系统无处不在。本讲将系统介绍推荐系统的核心价值、架构设计和评估方法,为后续深入各模块打下坚实基础。
核心学习目标:
- 理解推荐系统的核心价值和应用场景
- 掌握经典的召回-排序-重排三层架构
- 深入理解离线评估与在线评估的指标体系
- 掌握A/B测试的最佳实践
一、推荐系统的核心价值 #
1.1 信息过载时代的解决方案 #
信息爆炸的现实:
- 电商平台:淘宝商品数超10亿,京东商品数超5亿
- 内容平台:抖音每日新增视频数百万,YouTube每分钟上传500小时视频
- 新闻资讯:全网每日新闻文章数千万
- 音乐应用:Spotify曲库超7000万首
人类认知的局限性:
- 工作记忆容量:7±2个项目(Miller定律)
- 决策疲劳:选择过多导致决策质量下降
- 时间稀缺:用户平均停留时间有限
推荐系统的使命:
在海量信息中,快速找到用户最感兴趣的内容,实现"千人千面"的个性化体验。
1.2 推荐系统的商业价值 #
对平台的价值:
| 指标 | 提升幅度 | 说明 |
|---|---|---|
| 用户停留时长 | +20%~50% | 更精准的内容,更少的流失 |
| 转化率 | +10%~30% | 匹配用户需求,提高购买意愿 |
| GMV/收入 | +15%~40% | 推荐系统是电商核心增长引擎 |
| 用户留存率 | +5%~15% | 持续提供新鲜有趣的内容 |
| 广告收入 | +25%~60% | 精准广告投放,提升CTR |
真实案例:
Netflix:
- 推荐系统带来每年10亿美元节省(通过减少用户流失)
- 80%的观看时间来自推荐
- “你可能喜欢的"列表贡献35%流量
Amazon:
- 35%的销售额来自推荐
- “购买此商品的顾客也购买了"转化率极高
- 个性化推荐提升平均客单价
抖音/TikTok:
- 推荐算法是核心竞争力
- 用户日均使用时长超100分钟
- 推荐准确度是增长的关键
对用户的价值:
- 节省搜索时间
- 发现潜在兴趣
- 降低选择焦虑
- 提升使用体验
1.3 推荐系统的应用场景 #
按领域分类:
电商推荐:
- 商品推荐(淘宝、京东、Amazon)
- 交叉销售和追加销售
- 购物车推荐、凑单推荐
内容推荐:
- 视频推荐(YouTube、Netflix、抖音)
- 音乐推荐(Spotify、网易云音乐)
- 新闻推荐(今日头条、Google News)
- 图书推荐(Kindle、Goodreads)
社交推荐:
- 好友推荐(Facebook、LinkedIn)
- 内容推荐(Twitter、Instagram)
- 群组推荐(微信、WhatsApp)
搜索推荐:
- 搜索补全
- 相关搜索推荐
- 热门搜索推荐
其他场景:
- 金融产品推荐
- 旅游行程推荐
- 招聘职位推荐
- 房产推荐
二、推荐系统的经典架构 #
2.1 三层架构:召回-排序-重排 #
现代工业级推荐系统普遍采用三层架构:
用户请求
↓
┌─────────────────────────────────────┐
│ 召回层 (Recall / Retrieval) │
│ • 从海量候选中快速筛选千级候选 │
│ • 多路召回:协同过滤、内容、热点 │
│ • 目标:高召回率,允许低精确度 │
│ • 输出:1000-5000个候选 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 排序层 (Ranking / Scoring) │
│ • 对召回候选进行精排 │
│ • 复杂模型:深度学习、多目标优化 │
│ • 目标:精确预测用户偏好 │
│ • 输出:50-100个候选 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 重排层 (Re-ranking) │
│ • 多样性、业务规则调整 │
│ • 去重、加打散、业务逻辑 │
│ • 目标:提升用户体验和业务指标 │
│ • 输出:10-20个最终推荐 │
└─────────────────────────────────────┘
↓
最终推荐列表
2.2 召回层设计 #
核心目标:
- 快速从百万/亿级候选中筛选出千级候选
- 召回率优先,允许一定误召回
- 多路召回,覆盖不同场景
常见召回策略:
协同过滤召回:
- User-based CF: 相似用户喜欢的物品
- Item-based CF: 相似物品被相似用户喜欢
- 矩阵分解: 用户和物品的隐向量
内容召回:
- 基于用户历史:推荐历史兴趣相似的内容
- 基于物品内容:标签、主题、类别匹配
- 基于内容特征:文本、图像、视频特征
热点召回:
- 全局热门:高流量、高转化
- 分层热门:按类别、地域、时间
- 趋势召回:上升趋势内容
深度学习召回:
- 双塔模型:用户塔和物品塔
- 向量检索:Faiss、Annoy近似最近邻
- 图神经网络:用户-物品图关系
其他召回:
- 地理位置(LBS应用)
- 社交关系(好友点赞)
- 搜索历史
- 实时行为
多路召回融合:
召回源1:协同过滤 (300)
召回源2:内容相似 (300)
召回源3:深度召回 (400)
召回源4:热点召回 (200)
↓
去重 (Union)
↓
粗排/截断 (Top 1000-2000)
2.3 排序层设计 #
核心目标:
- 精确预测用户对每个候选的兴趣度
- 多目标优化(CTR、时长、转化等)
- 实时性和准确性平衡
排序模型演进:
逻辑回归 (LR)
↓
梯度提升树 (GBDT)
↓
GBDT + LR
↓
深度神经网络 (DNN)
↓
Wide & Deep
↓
DeepFM, xDeepFM, DCN
↓
多任务学习 (MMOE, PLE)
↓
大模型增强 (LLM4Rec)
特征工程:
| 特征类型 | 示例 | 维度 |
|---|---|---|
| 用户特征 | 年龄、性别、历史行为、偏好标签 | 100-500维 |
| 物品特征 | 类别、标签、内容特征、统计特征 | 200-1000维 |
| 上下文特征 | 时间、地点、设备、网络 | 50-200维 |
| 交叉特征 | 用户-物品交互、时间衰减 | 500-2000维 |
2.4 重排层设计 #
核心目标:
- 优化用户体验指标
- 满足业务约束
- 提升多样性
常见策略:
多样性优化:
- MMR (Maximal Marginal Relevance)
- 滑动窗口去重
- 类别打散
业务规则:
- 新品扶持
- 库存清仓
- 高利润优先
- 广告插入
体验优化:
- 历史已看过滤
- 曝光频次控制
- 位置加权
多目标平衡:
- CTR vs 时长 vs 转化
- 用户满意度 vs 平台收益
- 短期点击 vs 长期留存
三、推荐系统的评估体系 #
3.1 离线评估指标 #
基于预测的指标:
回归指标(预测评分/点击率):
RMSE = sqrt(mean((y_true - y_pred)^2)) MAE = mean(|y_true - y_pred|)分类指标(点击/不点击):
AUC = ROC曲线下面积 (0.5-1.0, 越大越好) LogLoss = -mean(y*log(p) + (1-y)*log(1-p)) Accuracy = (TP + TN) / (TP + TN + FP + FN)
基于排序列表的指标:
Top-N推荐指标:
Precision@K = (相关推荐数) / K Recall@K = (相关推荐数) / (总相关物品数) F1@K = 2 * (Precision * Recall) / (Precision + Recall)排序质量指标:
NDCG@K = DCG@K / IDCG@K MAP = mean(Average Precision) MRR = 1 / (第一个相关物品的位置)
NDCG详解:
def dcg_at_k(relevances, k):
"""Discounted Cumulative Gain"""
gains = relevances[:k]
discounts = [log2(i+2) for i in range(len(gains))]
return sum(g / d for g, d in zip(gains, discounts))
def ndcg_at_k(relevances, k):
"""Normalized DCG"""
dcg = dcg_at_k(relevances, k)
ideal_relevances = sorted(relevances, reverse=True)[:k]
idcg = dcg_at_k(ideal_relevances, k)
return dcg / idcg if idcg > 0 else 0
3.2 在线评估指标 #
用户行为指标:
| 指标 | 定义 | 计算方式 |
|---|---|---|
| CTR | 点击率 | 点击次数 / 曝光次数 |
| CVR | 转化率 | 转化次数 / 点击次数 |
| ATC | 平均点击深度 | 点击数 / 会话数 |
| Stay Time | 停留时长 | 会话总时长 / 会话数 |
| Session Length | 会话长度 | 交互次数 / 会话数 |
| Bounce Rate | 跳出率 | 单页会话 / 总会话数 |
业务指标:
| 指标 | 定义 | 应用场景 |
|---|---|---|
| GMV | 商品交易总额 | 电商 |
| DAU/MAU | 日活/月活 | 所有应用 |
| Retention | 留存率 | 用户增长 |
| ARPU | 每用户平均收入 | 变现 |
| LTV | 用户生命周期价值 | 长期运营 |
产品指标:
多样性指标:
Category Diversity = 推荐列表中的类别数 / 总类别数 Novelty = 1 - (物品平均流行度) Serendipity = 意外但有价值的推荐比例覆盖度指标:
Item Coverage = 被推荐物品数 / 总物品数 User Coverage = 得到有效推荐的用户数 / 总用户数
3.3 离线与在线指标的关系 #
重要洞察:
离线指标高 ≠ 在线效果好:
- AUC提升0.001可能在线无显著提升
- 离线评估的偏差:训练-测试分布不一致
- 位置偏差:用户更倾向点击前排物品
常见偏差问题:
选择偏差:
- 训练数据只包含曝光物品
- 未曝光物品无法学习
- 解决:逆倾向得分加权(IPW)
位置偏差:
- 排名靠前的物品更容易被点击
- 解决:位置特征、偏差校正
流行度偏差:
- 热门物品主导推荐
- 长尾物品被忽视
- 解决:多样性优化、探索策略
离线-在线相关性提升:
- 使用无偏数据收集
- 加入位置特征
- 模拟在线评估环境
- 关注排序质量而非纯预测准确度
四、A/B测试最佳实践 #
4.1 A/B测试的基本原理 #
核心思想:
在控制变量的情况下,对比不同方案的效果差异,科学评估改进效果。
基本流程:
1. 提出假设
- 新算法能提升CTR 5%
- 新UI能提升用户留存
2. 设计实验
- 确定指标(主要指标、次要指标)
- 确定样本量
- 确定分流比例
3. 实施实验
- 随机分流用户
- 灰度发布
4. 收集数据
- 运行足够时间(通常7-14天)
- 监控数据质量
5. 分析结果
- 统计显著性检验
- 置信区间
- 决策:采纳/放弃/继续实验
4.2 分流策略 #
随机化方法:
用户ID哈希:
def get_bucket(user_id, total_buckets=100): hash_value = int(hashlib.md5(user_id.encode()).hexdigest(), 16) return hash_value % total_buckets # 使用 bucket = get_bucket(user_id) if bucket < 10: experiment_group = "A" elif bucket < 20: experiment_group = "B" else: experiment_group = "control"分层分流:
- 多个实验并行
- 确保正交性
- 避免实验间干扰
正交实验设计:
Experiment 1: 推荐算法
├─ Group A: 旧算法
└─ Group B: 新算法
Experiment 2: UI样式
├─ Group A: 单列布局
└─ Group B: 双列布局
正交设计确保:
- 算法A实验组 = UI A实验组(25%用户)
- 算法A实验组 = UI B实验组(25%用户)
- 算法B实验组 = UI A实验组(25%用户)
- 算法B实验组 = UI B实验组(25%用户)
4.3 样本量计算 #
核心公式:
def calculate_sample_size(
baseline_rate, # 基线转化率 (如 0.05 = 5%)
mde, # 最小检测效应 (如 0.01 = 相对提升20%)
alpha=0.05, # 显著性水平(第一类错误概率)
power=0.8 # 统计功效(1-第二类错误概率)
):
"""
计算每组需要的样本量
"""
from scipy import stats
p1 = baseline_rate
p2 = baseline_rate * (1 + mde)
# Z值
z_alpha = stats.norm.ppf(1 - alpha/2)
z_beta = stats.norm.ppf(power)
# 合并标准差
p_pool = (p1 + p2) / 2
sd = sqrt(p_pool * (1 - p_pool))
# 样本量
n_per_group = 2 * (sd * (z_alpha + z_beta))**2 / (p2 - p1)**2
return ceil(n_per_group)
# 示例:基线CTR=5%, 期望检测相对提升20%
n = calculate_sample_size(0.05, 0.20)
print(f"每组需要 {n:,} 样本")
# 输出:每组需要 20,000 样本
# 总样本:40,000
4.4 统计显著性检验 #
常用方法:
Z检验(大样本比例检验):
from scipy import stats def z_test(control_clicks, control_impressions, treatment_clicks, treatment_impressions): """ Z检验:两个比例是否有显著差异 """ # 计算比例 p1 = control_clicks / control_impressions p2 = treatment_clicks / treatment_impressions # 合并比例 p_pooled = (control_clicks + treatment_clicks) / \ (control_impressions + treatment_impressions) # 标准误差 se = sqrt(p_pooled * (1 - p_pooled) * (1/control_impressions + 1/treatment_impressions)) # Z统计量 z = (p2 - p1) / se # P值(双尾) p_value = 2 * (1 - stats.norm.cdf(abs(z))) # 置信区间 ci_low = (p2 - p1) - 1.96 * se ci_high = (p2 - p1) + 1.96 * se return { 'z_score': z, 'p_value': p_value, 'significant': p_value < 0.05, 'lift': (p2 - p1) / p1, 'ci': (ci_low, ci_high) }T检验(均值检验):
def t_test(group1, group2): """ 独立样本T检验 """ from scipy import stats t_stat, p_value = stats.ttest_ind(group1, group2) # 计算效应量(Cohen's d) n1, n2 = len(group1), len(group2) var1, var2 = group1.var(), group2.var() pooled_std = sqrt(((n1-1)*var1 + (n2-1)*var2) / (n1+n2-2)) cohens_d = (group1.mean() - group2.mean()) / pooled_std return { 't_stat': t_stat, 'p_value': p_value, 'cohens_d': cohens_d }卡方检验(分类数据):
def chi_square_test(contingency_table): """ 卡方检验:分类变量是否独立 """ from scipy.stats import chi2_contingency chi2, p_value, dof, expected = chi2_contingency(contingency_table) return { 'chi2': chi2, 'p_value': p_value, 'significant': p_value < 0.05 }
4.5 高级技巧 #
1. CUPED (Controlled-experiment Using Pre-Experiment Data):
减少方差,提升统计功效:
def cuped_adjustment(metric, covariate):
"""
使用实验前指标作为协变量
"""
# 计算协变量与指标的协方差
theta = cov(metric, covariate) / var(covariate)
# 调整后的指标
adjusted_metric = metric - theta * (covariate - mean(covariate))
return adjusted_metric
# 效果:方差降低20%-50%,样本量需求相应减少
2. Delta-Delta方法:
适用于比例类指标:
def delta_delta_method(p1, n1, p2, n2):
"""
Delta-Delta方法:两个比例差的置信区间
"""
# 方差
var_p1 = p1 * (1 - p1) / n1
var_p2 = p2 * (1 - p2) / n2
# 差的方差
var_diff = var_p1 + var_p2
# 置信区间
diff = p2 - p1
se = sqrt(var_diff)
ci_low = diff - 1.96 * se
ci_high = diff + 1.96 * se
return diff, (ci_low, ci_high)
3. 顺序检验:
多指标检验时控制family-wise error rate:
def sequential_testing(metrics, alpha=0.05):
"""
Holm-Bonferroni方法:控制多检验错误率
"""
# 按P值排序
sorted_metrics = sorted(metrics, key=lambda x: x['p_value'])
# 顺序检验
for i, metric in enumerate(sorted_metrics):
adjusted_alpha = alpha / (len(metrics) - i)
if metric['p_value'] < adjusted_alpha:
metric['significant'] = True
else:
metric['significant'] = False
# 后续指标也不显著
for m in sorted_metrics[i+1:]:
m['significant'] = False
break
return sorted_metrics
4.6 常见陷阱 #
1. 辛普森悖论:
分组趋势与整体趋势相反:
示例:
总体:新算法CTR 4.8% vs 旧算法 5.0%(下降)
分层:
- 新用户:新算法 3.0% vs 旧算法 2.0%(上升)
- 老用户:新算法 6.0% vs 旧算法 5.5%(上升)
原因:用户分布变化
解决:分层分析或标准化
2. 选择偏差:
- 自选择偏差:参与实验的用户不同
- 存活偏差:流失用户未计入
- 解决:意向性分析ITT(Intention-to-Treat)
3. 新奇效应:
- 新版本短期效果好,长期回归均值
- 解决:延长实验期,关注长期指标
4. 网络效应:
- 用户间相互影响(社交产品)
- A组用户影响B组用户
- 解决:网络级实验、地理分流
五、推荐系统的技术挑战 #
5.1 大规模计算挑战 #
数据规模:
- 用户数:亿级(抖音DAU超7亿)
- 物品数:千万到亿级(淘宝商品超10亿)
- 行为数据:每天数十亿条
计算要求:
- 召回:从亿级候选筛选千级,延迟<100ms
- 排序:对千级候选打分,延迟<50ms
- 更新:实时特征更新,秒级响应
解决方案:
架构层面:
- 分布式计算(Spark、Flink)
- 流式处理(Kafka、Storm)
- 参数服务器(PS)
- 模型并行、数据并行
算法层面:
- 近似计算(近似最近邻ANN)
- 哈希技巧(特征哈希)
- 模型压缩(量化、蒸馏)
- 缓存策略(Redis、Memcached)
5.2 实时性要求 #
实时特征:
- 用户最近点击(秒级更新)
- 物品实时热度
- 上下文变化(位置、时间)
在线学习:
传统批量学习:
- 每天/每小时更新模型
- 落后于用户兴趣变化
在线学习:
- 实时更新模型参数
- 快速适应用户反馈
- 挑战:稳定性、探索利用
5.3 冷启动问题 #
新用户冷启动:
- 缺乏历史行为
- 解决:人口统计、注册信息、引导选择
新物品冷启动:
- 缺乏交互数据
- 解决:内容特征、探索注入、bandits
系统冷启动:
- 全新平台无数据
- 解决:迁移学习、热门推荐、快速收集
5.4 公平性与多样性 #
推荐茧房:
- 过度迎合用户历史
- 视野狭窄,缺乏探索
- 解决:探索策略、随机扰动
公平性问题:
- 头部物品垄断曝光
- 长尾优质内容难以发现
- 解决:公平性约束、多样性优化
5.5 可解释性 #
用户信任:
- “为什么推荐这个?”
- 提升透明度和可信度
调试优化:
- 理解模型决策逻辑
- 定位问题改进系统
方法:
- 可解释模型(决策树、规则)
- 注意力可视化
- 反事实解释
- 示例解释(“喜欢X的人也喜欢Y”)
六、推荐系统的未来趋势 #
6.1 大模型与推荐的融合 #
LLM4Rec:
- 利用大语言模型理解用户意图
- 生成式推荐:直接生成推荐理由
- 多模态推荐:融合文本、图像、视频
对话式推荐:
- 自然语言交互
- 细化需求
- 个性化解释
6.2 神经符号推荐 #
结合知识与推理:
- 知识图谱增强
- 因果推理
- 可解释规则
示例:
传统:用户A和用户B相似,推荐用户B喜欢的物品
神经符号:
- 用户A喜欢《三体》(科幻小说)
- 《三体》→ 刘慈欣 → 获雨果奖 → 中国作家
- 推荐:《北京折叠》(郝景芳,雨果奖,中国)
6.3 联邦学习推荐 #
隐私保护推荐:
- 用户数据不出设备
- 本地训练 + 参数聚合
- 挑战:通信成本、数据异构
应用场景:
- 跨平台推荐(联盟学习)
- 敏感数据(医疗、金融)
6.4 持续学习与终身学习 #
克服灾难性遗忘:
- 持适应用户兴趣变化
- 学习新物品、新类别
- 保持旧知识
技术方向:
- 记忆回放
- 正则化约束(EWC)
- 动态网络结构
6.5 具身推荐 #
交互式推荐:
- 用户主动探索
- 实时反馈循环
- 多轮对话
AR/VR推荐:
- 场景化推荐
- 空间关系
- 沉浸式体验
七、实践指南:如何构建推荐系统 #
7.1 开发路线图 #
阶段1:规则与统计(0-3个月)
- 热门推荐
- 协同过滤(ItemCF、UserCF)
- 基于内容的推荐
- 基线评估
阶段2:机器学习(3-6个月)
- 逻辑回归
- GBDT(XGBoost、LightGBM)
- 特征工程
- 离线评估体系
阶段3:深度学习(6-12个月)
- Wide & Deep
- DeepFM、xDeepFM
- 双塔模型
- 向量检索
阶段4:优化与演进(12个月+)
- 多任务学习
- 在线学习
- 大模型融合
- 端到端优化
7.2 技术栈推荐 #
离线训练:
# 特征工程
- Pandas、NumPy:数据处理
- PySpark:大规模数据处理
- Feature Tools:自动特征工程
# 模型训练
- XGBoost、LightGBM:GBDT模型
- TensorFlow、PyTorch:深度学习
- DeepRec、EasyRec:推荐系统框架
在线服务:
# 模型服务
- TensorFlow Serving:TF模型部署
- TorchServe:PyTorch模型部署
- ONNX Runtime:跨框架推理
# 特征服务
- Redis:实时特征缓存
- Feast:特征存储平台
- S3/HDFS:离线特征存储
# 召回服务
- Faiss:向量检索
- Elasticsearch:全文检索
- Milvus:向量数据库
数据流:
# 流式处理
- Kafka:消息队列
- Flink:流式计算
- Spark Streaming:流式处理
# 批处理
- Hive:数据仓库
- Spark:大规模计算
- Airflow:工作流调度
7.3 开源项目参考 #
工业级系统:
- YouTube推荐论文(深度学习召回)
- Alibaba’s XDL(深度学习框架)
- Meta’s DLRM(深度推荐模型)
- NVIDIA’s DeepLearningExamples(推荐系统实现)
学术数据集:
- MovieLens:电影评分
- Amazon Reviews:电商数据
- Netflix Prize:历史竞赛数据
- Criteo:点击率预测
- Avazu:移动广告点击
开源库:
- LightFM:混合推荐系统
- Surprise:推荐算法库
- RecBole:推荐系统基准测试
- Cornac:比较推荐算法
八、总结与展望 #
核心要点回顾 #
推荐系统的价值:
- 解决信息过载
- 提升用户体验
- 驱动商业增长
三层架构:
- 召回:快速筛选候选
- 排序:精确预测偏好
- 重排:优化用户体验
评估体系:
- 离线:AUC、NDCG、Recall@K
- 在线:CTR、CVR、GMV、留存
- A/B测试:科学评估方法
技术挑战:
- 大规模计算
- 实时性要求
- 冷启动问题
- 公平性与多样性
未来展望 #
推荐系统正在经历深刻变革:
- 从预测到生成:大模型赋能推荐
- 从单目标到多目标:平衡体验与收益
- 从离线到在线:实时适应与学习
- 从黑盒到可解释:提升透明度与信任
- 从个性化到人性化:理解真实需求
学习建议 #
基础理论:
- 《Recommender Systems Handbook》
- Stanford CS246: Mining Massive Data Sets
- 推荐系统经典论文
实践技能:
- 熟悉机器学习/深度学习框架
- 掌握数据处理工具(Spark、Flink)
- 理解分布式系统原理
持续学习:
- 关注KDD、WWW、RecSys顶会
- 阅读工业界技术博客
- 参与开源项目
参考文献与扩展阅读 #
经典书籍:
- Ricci et al. (2011). “Recommender Systems Handbook.” Springer.
- Aggarwal (2016). “Recommender Systems: The Textbook.” Springer.
关键论文:
- Covington et al. (2016). “Deep Neural Networks for YouTube Recommendations.” RecSys.
- Cheng et al. (2016). “Wide & Deep Learning for Recommender Systems.” DLRS.
- Guo et al. (2017). “DeepFM: A Factorization-Machine based Neural Network for CTR Prediction.” IJCAI.
- Beutel et al. (2018). “LSTM-based Ensemble for CTR Prediction.” KDD Cup.
在线资源:
- Netflix Tech Blog
- Google AI Blog - Recommendations
- KDD Cup RecSys Track
- RecSys Conference Proceedings
课程:
- Stanford CS246: Mining Massive Data Sets
- University of Minnesota: Recommender Systems
- DeepLearning.AI: AI for Good
下一讲预告:我们将深入探讨协同过滤算法,从用户-物品矩阵的稀疏性挑战出发,系统分析User-based、Item-based CF以及矩阵分解技术。敬请期待!