🔬 第20课:A/B测试

评估与优化 A/B测试

🎯 学习目标

🗂️ 课程定位

本课属于推荐系统进阶课程的评估与优化阶段。本阶段的学习目标是系统掌握该领域的核心算法与实践方法,为后续阶段打下坚实基础。

本阶段课程一览

📖 核心理论

A/B测试是推荐系统效果验证的金标准。通过随机将用户分为对照组和实验组,对比不同推荐策略的真实效果。A/B测试能捕捉离线评估无法衡量的因素(位置偏差、长期影响等)。

A/B测试流程

  1. 假设:明确实验假设和预期效果
  2. 样本量:计算所需的最小样本量
  3. 分流:随机分配用户到A/B组
  4. 运行:运行足够时间(至少1-2周)
  5. 分析:统计检验+分层分析
  6. 决策:基于数据决定是否上线

📐 数学公式

Z检验

z = (p_B-p_A) / √(2p̄(1-p̄)/n)

样本量

n = (z_{α/2}√2p̄(1-p̄)+z_β√(p₁(1-p₁)+p₂(1-p₂)))²/Δ²

置信区间

CI = Δ ± z_{α/2}·SE

💻 代码实现

import numpy as np
from scipy import stats
np.random.seed(42)
print("="*60+"\nA/B测试\n"+"="*60)
# 模拟A/B测试数据
n_users_ab=2000
# 控制组(A): 旧推荐算法
ctr_A=np.random.binomial(1,0.05,n_users_ab)
# 实验组(B): 新推荐算法(提升0.8pp)
ctr_B=np.random.binomial(1,0.058,n_users_ab)
print(f"样本量:每组{n_users_ab}")
print(f"控制组(A)CTR:{ctr_A.mean():.4f}")
print(f"实验组(B)CTR:{ctr_B.mean():.4f}")
# 统计检验
# Z检验(两比例)
p_A=ctr_A.mean();p_B=ctr_B.mean()
p_pool=(ctr_A.sum()+ctr_B.sum())/(2*n_users_ab)
se=np.sqrt(2*p_pool*(1-p_pool)/n_users_ab)
z=(p_B-p_A)/se
p_value=2*(1-stats.norm.cdf(abs(z)))
print(f"\nZ检验:z={z:.4f} p={p_value:.4f}")
print(f"结论:{'显著'if p_value<0.05 else '不显著'}(α=0.05)")
# 置信区间
diff=p_B-p_A
ci_low=diff-1.96*se;ci_high=diff+1.96*se
print(f"差异置信区间:[{ci_low:.4f},{ci_high:.4f}]")
# 样本量计算
def sample_size(p_base,mde,alpha=0.05,beta=0.2):
    z_alpha=stats.norm.ppf(1-alpha/2)
    z_beta=stats.norm.ppf(1-beta)
    p1=p_base;p2=p_base+mde
    p_avg=(p1+p2)/2
    n=(z_alpha*np.sqrt(2*p_avg*(1-p_avg))+z_beta*np.sqrt(p1*(1-p1)+p2*(1-p2)))**2/mde**2
    return int(np.ceil(n))
print(f"\n--- 样本量计算 ---")
for mde in [0.005,0.01,0.02]:
    n=sample_size(0.05,mde)
    print(f"MDE={mde}:需要每组{n}样本")
# 多指标测试
print("\n--- 多指标测试 ---")
metrics={"CTR":(ctr_A,ctr_B),"停留时长":(np.random.exponential(30,n_users_ab),np.random.exponential(32,n_users_ab))}
for name,(a,b) in metrics.items():
    t_stat,p_val=stats.ttest_ind(a,b)
    print(f"  {name}:A均值={np.mean(a):.2f} B均值={np.mean(b):.2f} p={p_val:.4f}")
# 分层分析
print("\n--- 分层分析 ---")
user_type=np.random.choice(["新用户","老用户"],n_users_ab,p=[0.3,0.7])
for ut in ["新用户","老用户"]:
    mask_a=user_type==ut
    ctr_a=ctr_A[mask_a];ctr_b=ctr_B[mask_a]
    if len(ctr_a)>0 and len(ctr_b)>0:
        print(f"  {ut}:A={ctr_a.mean():.4f} B={ctr_b.mean():.4f} n={mask_a.sum()}")
# AA测试(验证分流正确性)
print("\n--- AA测试(验证分流) ---")
ctr_all=np.concatenate([ctr_A,ctr_B])
half=len(ctr_all)//2
aa_a=ctr_all[:half];aa_b=ctr_all[half:]
t_aa,p_aa=stats.ttest_ind(aa_a,aa_b)
print(f"AA测试:p={p_aa:.4f} ({'通过'if p_aa>0.05 else '失败'} - 应>0.05)")

🔴 运行结果

============================================================ A/B测试 ============================================================ 样本量:每组2000 控制组(A)CTR:0.0525 实验组(B)CTR:0.0570 Z检验:z=0.6255 p=0.5316 结论:不显著(α=0.05) 差异置信区间:[-0.0096,0.0186] --- 样本量计算 --- MDE=0.005:需要每组31234样本 MDE=0.01:需要每组8158样本 MDE=0.02:需要每组2213样本 --- 多指标测试 --- CTR:A均值=0.05 B均值=0.06 p=0.5317 停留时长:A均值=29.74 B均值=30.61 p=0.3653 --- 分层分析 --- 新用户:A=0.0532 B=0.0548 n=602 老用户:A=0.0522 B=0.0579 n=1398 --- AA测试(验证分流) --- AA测试:p=0.5317 (通过 - 应>0.05)

✅ 验证通过

🔍 代码解读

本课代码涵盖了从数据生成、模型训练到效果评估的完整流程。以下是关键步骤的详细解读:

  1. 数据准备:生成模拟数据,确保算法可在本地运行验证。工业场景中需替换为真实数据。
  2. 模型训练:实现核心算法的SGD/ALS等优化过程,关注学习率和正则化的选择。
  3. 推荐生成:基于训练好的模型为用户生成推荐列表,排除已交互物品。
  4. 效果评估:使用Precision/Recall/NDCG/AUC等指标评估推荐质量。
  5. 方法对比:多种方法横向对比,理解不同算法的优劣。

代码设计原则:简洁可读、关键步骤有注释、结果可复现(固定随机种子)。

代码运行环境

组件版本说明
Python3.8+推荐3.10版本
NumPy1.21+核心数值计算库
SciPy1.7+统计检验(部分课程)

代码扩展建议

💡 关键洞察

常见陷阱

📝 本章小结

本课是第20课:A/B测试,属于评估与优化阶段。我们系统学习了本课的核心概念、数学原理和代码实现,并通过实机运行验证了算法的正确性。

核心要点回顾

  1. 理解A/B测试的原理与流程
  2. 掌握统计显著性的计算方法
  3. 理解A/B测试的常见陷阱
  4. 设计合理的推荐系统A/B测试方案

实践建议

常见误区

🧪 练习

练习1:实现贝叶斯A/B测试(替代频率学派方法)

练习2:实现分层实验(方差减少)

练习3:实现多臂老虎机A/B测试(替代固定分流)

练习4:实现交叉实验(多个因素同时测试)

📚 延伸阅读

推荐论文

推荐资源

💼 面试考点

高频面试题

  1. 请简述本课核心算法的原理、优缺点和适用场景。
  2. 如何评估推荐系统的效果?离线指标和在线效果为什么会有差异?
  3. 推荐系统面临的核心挑战有哪些?分别如何解决?
  4. 请描述推荐系统的完整架构,从数据到展示的全流程。
  5. 如何处理冷启动问题?有哪些具体方案?

答题技巧

🏭 工业案例

大厂推荐实践

公司场景核心技术
字节跳动抖音/TikTok多目标排序+实时特征+双塔召回
阿里巴巴淘宝推荐DIN/DIEN序列模型+MIND多兴趣
腾讯微信看一看DeepFM+图神经网络召回
美团本地生活推荐多场景多目标+时空特征
Netflix视频推荐矩阵分解+深度学习混合

工程要点

规模参考

🏆 本课成就

✅ 理解A/B测试的原理与统计基础

✅ 掌握统计显著性和样本量计算

✅ 理解A/B测试的常见陷阱

✅ 设计合理的推荐系统A/B测试方案

💡 关键提示:A/B测试是推荐系统效果验证的最终环节和金标准。任何算法改动都应该通过严谨的A/B测试验证后再全量上线。良好的实验文化、规范的分流机制、完善的监控体系,是推荐系统持续迭代优化的基础。切记:没有A/B测试验证的优化都是主观臆断。

推荐系统进阶·第20/30课·Powered by OpenClaw