8.3 抽样与统计推断:从观测数据到有限结论
A/B 实验中 B 组转化率高 0.4 个百分点。这个差异可能来自真实效果、随机波动、分流偏差、指标口径变化或同时上线的其他功能。统计推断不会自动识别因果,它在明确设计和假设下量化不确定性。
总体、样本与估计量
- 总体:想研究的全部对象或过程;
- 样本:实际观察到的数据;
- 参数:总体中未知的量,如均值
μ; - 估计量:样本的函数,如样本均值
X̄。
抽样分布描述在重复抽样下估计量怎样变化。只有一次样本时看不到这个重复过程,但推断公式基于该思想。
数据量大不能修复系统偏差。若只采集成功请求,百万样本也估不出包含失败的真实延迟。
大数定律不是有限次数保证
在适当独立同分布和绝对可积 E|X|<∞等条件下,大数定律说明样本均值随样本量增长收敛到总体期望。
它不表示:
- 抛 10000 次硬币一定接近一半;
- 样本均值随每次新增观测单调靠近;
- 任意相关、重尾过程都快速收敛;
- 一次观测序列能证明分布模型正确。
“收敛”是概率意义或几乎必然意义的渐近结论,有限样本误差仍要量化。
中心极限定理与标准误
对独立同分布、方差有限且大于零等常见条件,标准化样本均值的分布随 n 增大趋近标准正态:
(X̄-μ)/(σ/√n) ⇒ N(0,1)在上述独立同分布模型下,均值标准误精确为:
SE(X̄)=σ/√n样本量扩大 4 倍,标准误约减半,而不是降到四分之一。
总体 σ 未知时,常用样本标准差 s 代入,得到估计标准误 s/√n。标准误描述估计量跨样本的波动,标准差描述单个观测的波动。
重尾、强相关、集群抽样和极端偏态会让简单近似失效。延迟数据常明显偏态,均值的 CLT 也不等于原始延迟分布近似正态。
置信区间的正确解释
频率学派 95% 置信区间的含义是:若重复使用同一抽样和构造程序,长期约 95% 的区间覆盖固定真参数。
得到具体区间后,参数不是按该频率学派模型以 95% 概率在区间里随机移动。口语中常说“95% 可信”,但正式解释应区分频率置信区间与 Bayesian credible interval。
区间宽度受:
- 样本量;
- 数据方差;
- 置信水平;
- 估计方法和模型假设影响。
窄区间也可能围绕有偏估计,不能只看精度不看抽样设计。
假设检验和 p 值
设零假设 H₀ 表示“无效果”。p 值是在 H₀ 及检验模型成立时,观察到至少同样极端统计量的概率。
p 值不是:
H₀为真的概率;- 结果由随机造成的概率;
- 效果大小;
- 实验可复现的概率。
在检验模型和预定分析程序成立时,水平 α 的检验将一类错误概率控制在 α 以内。p 值不替代效应量和区间。下面用假设的 A/B 数据计算开头的 0.4 个百分点差异:两组各 2000 名独立用户,每人一个转化结果,转化人数为 400 与 408。Python 3.8+ 标准库足够完成计算:
from math import sqrt, erfc
from statistics import NormalDist
x_a, n_a, x_b, n_b = 400, 2000, 408, 2000
p_a, p_b = x_a / n_a, x_b / n_b
difference = p_b - p_a
se = sqrt(p_a * (1 - p_a) / n_a + p_b * (1 - p_b) / n_b)
critical = NormalDist().inv_cdf(.975)
interval = (difference - critical * se, difference + critical * se)
pooled = (x_a + x_b) / (n_a + n_b)
se_null = sqrt(pooled * (1 - pooled) * (1 / n_a + 1 / n_b))
p_value = erfc(abs(difference / se_null) / sqrt(2))
print(f"difference: {100 * difference:.3f} percentage points")
print(f"95% CI: [{100 * interval[0]:.3f}, {100 * interval[1]:.3f}] pp")
print(f"two-sided p: {p_value:.3f}")
# difference: 0.400 percentage points
# 95% CI: [-2.088, 2.888] pp
# two-sided p: 0.753区间采用未合并方差的 Wald 正态近似,检验则在 H₀:p_A=p_B 下使用合并比例估计标准误,见 NIST 的两比例检验。这个样本下区间跨过零;未拒绝零假设不证明两组相同。稀有事件、小样本或接近 0/1 的比例需要更合适的区间与检验,不能照搬近似。
一类错误、二类错误与检验功效
- 一类错误:
H₀真却拒绝它; - 二类错误:存在目标效果却未拒绝
H₀; - 功效:在指定真实效果下正确拒绝
H₀的概率。
样本量规划需要:基线率、最小可检测效果、显著性水平、目标功效和分配比例。实验结束后再根据观察差异决定样本量,会引入选择偏差。
多重比较与持续窥视
若 100 个零假设都为真,各检验相互独立且各自恰有 5% 一类错误概率,则至少一个假阳性的概率为 1−0.95^100≈99.4%。依赖检验不能直接套此式,例如完全相同的 100 次检验仍只有 5%。Bonferroni 以每项 α/100 控制“至少一项误报”的族错误率,不要求独立;FDR 控制的则是发现中假阳性比例的期望,目标不同。应先定义主指标和要控制的错误类型。
每天查看结果,一显著就停止,也会破坏固定样本检验的错误率。可采用预先设计的序贯检验或 alpha spending,而不是随意停止。
A/B 实验的因果前提
随机分配用于让两组在期望上可比。还要检查:
- 样本比例失配;
- 用户跨组污染;
- 网络效应和干扰;
- 新奇效应与时间趋势;
- 指标埋点是否组间一致;
- 实验单位是用户、会话还是请求;
- 重复用户观测是否相关。
把同一用户的多个正相关观测当作独立样本,可能低估标准误。随机分配的单位、效应估计和标准误计算必须对应;集群随机化通常需要在集群层分析或使用适当的相关性调整。
模型概率需要校准
分类器输出 0.8 不自动表示“长期 80% 的这类样本为正”。若要解释成概率,需要评估校准:预测约 0.8 的样本中,真实正例比例是否接近 0.8。
区分:
- 判别能力:正例排序是否优于负例,如 ROC-AUC;
- 校准:概率数值是否匹配频率;
- 决策质量:在具体成本和阈值下结果是否有用。
分布漂移会让历史校准失效,线上需要持续监控。
延迟和 SLO 的统计口径
“95% 请求低于 200 ms”不意味着剩余 5% 可以忽略。若每天一亿请求,5% 是五百万次慢请求。
定义指标时写清:
- 窗口和采样率;
- 成功、失败、重试是否纳入;
- 客户端还是服务端计时;
- 分位数估计方法;
- 分组维度和流量权重;
- 数据丢失怎样处理。
SLO 是产品可靠性目标,不是分布定理。统计估计帮助判断是否满足目标,但目标本身来自用户需求和风险权衡。
完成检查
设计一个转化率 A/B 实验:
- 定义实验单位、总体和随机分配;
- 选择主指标与最小可检测效果;
- 说明样本量和停止规则;
- 报告效应量、置信区间与 p 值;
- 处理多指标和重复用户;
- 列出至少三个会破坏因果解释的实现问题。