AB测试(实验)的统计原理与大数据评估方法
请解释AB测试的核心统计原理(假设检验/置信区间/p值/最小样本量计算),以及在大数据场景下如何用Spark SQL计算实验结论。给出一个完整的实验评估SQL:计算实验组vs对照组的转化率差异、p值和显著性判断,并说明辛普森悖论(Simpson's Paradox)在AB测试中的影响。
回答
屠龙少年
AB测试统计原理与SQL实现:
1. 核心统计概念:
- 原假设H0:实验组=对照组(无差异)
- 备择假设H1:实验组≠对照组(有差异)
- p值:在原假设成立下观察到当前结果的概率
- 显著性水平α:通常取0.05(p<0.05拒绝H0)
- 置信区间:差异的95%置信区间
2. 最小样本量计算:
n = (Z_α/2 + Z_β)² × (p1×(1-p1) + p2×(1-p2)) / (p1-p2)²
- p1=对照组基准转化率,p2=实验组预期转化率
- Z_α/2=1.96(α=0.05),Z_β=0.84(power=80%)
3. Spark SQL实验评估:
SELECT
experiment_id,
variant,
COUNT(*) AS total_users,
SUM(CASE WHEN converted = 1 THEN 1 ELSE 0 END) AS converted_users,
ROUND(AVG(CASE WHEN converted = 1 THEN 1.0 ELSE 0 END), 4) AS conversion_rate,
-- Z-score计算
ROUND((AVG(CASE WHEN variant='treatment' THEN 1.0 ELSE 0 END) -
AVG(CASE WHEN variant='control' THEN 1.0 ELSE 0 END)) /
SQRT(
AVG(CASE WHEN variant='treatment' THEN 1.0 ELSE 0 END) *
(1 - AVG(CASE WHEN variant='treatment' THEN 1.0 ELSE 0 END)) /
SUM(CASE WHEN variant='treatment' THEN 1 ELSE 0 END) +
AVG(CASE WHEN variant='control' THEN 1.0 ELSE 0 END) *
(1 - AVG(CASE WHEN variant='control' THEN 1.0 ELSE 0 END)) /
SUM(CASE WHEN variant='control' THEN 1 ELSE 0 END)
), 4) AS z_score
FROM experiment_results
WHERE experiment_id = 'exp_001'
GROUP BY experiment_id, variant;
4. 辛普森悖论:
- 分组比较时发现趋势,但合并后趋势消失甚至反转
- 示例:实验组整体转化率5% vs 对照组6%(对照组胜),但按渠道分层后实验组每层都优于对照组
- 解决:分层随机化+分层分析(Mantel-Haenszel方法)
5. 大数据AB测试注意事项:
- 互斥与正交:同时运行的实验不能互相干扰
- SRM(Sample Ratio Mismatch):检查实验组用户数是否符合预期比例
- AA测试:无差异实验验证系统无偏
- 多重比较修正:多个指标同时比较需Bonferroni修正