← A/B 测试知识库

A/B 测试数据科学全景指南

A/B 测试 知识库


本文从第一性原理出发,以"问题 数学方法 解决方案"的框架,系统梳理 A/B 测试全生命周期的数据科学知识体系。

目录

  1. A/B 测试的本质:因果推断问题
  2. 全生命周期问题地图
  3. 设计阶段:实验上线前
  4. 执行阶段:实验运行中
  5. 分析阶段:实验结束后
  6. 决策阶段:从结果到行动
  7. 进阶专题
  8. 落地优先级与工程架构

一、A/B 测试的本质:因果推断问题

1.1 核心困境:反事实缺失

A/B 测试的底层逻辑是 鲁宾因果模型(Rubin Causal Model)

对于任意一个实验单元 i(通常是一个用户),我们定义:

实验对用户 i 的个体因果效应(Individual Treatment Effect,ITE)为:

$$\tau_i = Y_i(1) - Y_i(0)$$

根本问题(Fundamental Problem of Causal Inference):对于同一个用户 i,我们永远只能观测到其中一个潜在结果要么在实验组看到 $Y_i(1)$,要么在对照组看到 $Y_i(0)$,不可能同时观测两者。

这意味着我们无法计算任何个体的因果效应,只能转而估计平均处理效应(Average Treatment Effect,ATE)

$$ATE = E[Y(1)] - E[Y(0)]$$

1.2 随机化:因果推断的黄金标准

问题:如何在没有反事实的情况下,无偏地估计 ATE?

数学解法随机化(Randomization)

随机化保证了处理分配 T 与潜在结果独立:

$$T \perp (Y(1), Y(0))$$

这意味着:

$$E[Y(1)] = E[Y|T=1], \quad E[Y(0)] = E[Y|T=0]$$

观测到的组间均值差异就是对 ATE 的无偏估计:

$$\widehat{ATE} = \bar{Y}_1 - \bar{Y}_0$$

随机化是因果推断的"免费午餐"它同时消除了已知和未知混杂因素的影响,不需要任何统计建模假设。

1.3 数学框架:从假设检验到决策

A/B 测试的标准分析框架是频率学派假设检验

步骤 统计操作 数学表达
1. 提出假设 原假设 $H_0$ vs 备择假设 $H_1$ $H_0: \mu_T = \mu_C, H_1: \mu_T \neq \mu_C$
2. 计算检验统计量 Welch's t-test $t = \frac{\bar{Y}_T - \bar{Y}_C}{\sqrt{s_T^2/n_T + s_C^2/n_C}}$
3. 判断显著性 p-value 与 $\alpha$ 比较 $p < \alpha \rightarrow \text{拒绝} H_0$
4. 估计效应量 置信区间 $(\bar{Y}_T - \bar{Y}_C) \pm t_{\alpha/2} \cdot SE$

二、全生命周期问题地图

A/B 测试的生命周期可以分为四个阶段,每个阶段面临不同的挑战:

flowchart LR A[设计阶段] --> B[执行阶段] B --> C[分析阶段] C --> D[决策阶段] A1["如何确定样本量?"] -.-> A A2["如何保证随机化有效?"] -.-> A A3["如何选择指标?"] -.-> A B1["分流系统是否公平?"] -.-> B B2["方差太大怎么办?"] -.-> B B3["能否提前查看?"] -.-> B B4["实验间如何隔离?"] -.-> B C1["差异是否显著?"] -.-> C C2["多个指标怎么判?"] -.-> C C3["不同用户效果一样吗?"] -.-> C C4["效应长期有效吗?"] -.-> C D1["要不要全量上线?"] -.-> D D2["上线后效果会衰减吗?"] -.-> D D3["ROI 如何计算?"] -.-> D

下文将按照这个生命周期,逐一阐述每个问题及其数学解决方案。


三、设计阶段:实验上线前

3.1 问题:需要多少样本才能检测到有意义的提升?

痛点:样本太少 真有效应检测不到(统计功效不足);样本太多 浪费时间与流量。

数学解法:统计功效分析(Power Analysis)

关键参数:

参数 符号 含义
显著性水平 $\alpha$ 犯第一类错误的概率(通常 5%)
统计功效 $1-\beta$ 真有效应被检测出的概率(通常 80%)
最小可检测效应 $\delta$(MDE) 业务上认为有意义的最小提升
指标方差 $\sigma^2$ 核心指标的方差
样本量 $n$ 每组需要的样本量

对双侧检验:

$$n \approx \frac{2(Z_{\alpha/2} + Z_{\beta})^2 \sigma^2}{\delta^2}$$

实际应用中的关键选择

  1. 业务 ROI 计算:多少提升才能覆盖实验成本?
  2. 历史效应量参考:同类实验通常能带来多大提升?
  3. 滚动留存效应:微小提升在长期是否复利放大?

3.2 问题:如何让实验组和对照组在关键维度上天然均衡?

痛点:纯随机分流可能在某些关键维度(付费层级、活跃度)上产生"运气性不均衡",增加方差甚至引入偏差。

数学解法:分层随机化(Stratified Randomization)

将用户按关键特征(如付费层级)分为 K 个互斥的层,在每层内部独立进行随机分配。

为什么分层有效?

对分层后的均值差异的方差:

$$Var(\bar{Y}_{T,strat} - \bar{Y}_{C,strat}) = \sum_{k=1}^{K} \left(\frac{n_k}{n}\right)^2 \cdot Var(\bar{Y}_{T,k} - \bar{Y}_{C,k})$$

由于层内用户更同质(层内方差 < 总体方差),分层估计的总方差显著降低。

分层变量的选择原则

  1. 与核心指标高度相关
  2. 实验前即可获取(不受策略影响)
  3. 2-5 层即可,过多层反而增加复杂性

3.3 问题:当用户之间存在网络效应时如何分流?

痛点:社交产品中外卖(如微信的支付策略、Uber 的定价),一个用户的体验会直接影响另一个用户。按用户独立随机分组的假设被破坏,ATET 估计产生偏差。

数学解法:集群随机化(Cluster Randomization)

将存在干扰的单元聚集为一个集群,以集群为单位进行随机分组。

当集群效应存在时(集群内相关性 $\rho > 0$),有效样本量会缩水:

$$n_{effective} = \frac{n}{1 + (m-1)\rho} = n \times DEFF$$

其中:

集群选择策略

集群粒度 适用场景 代价
城市/地区 需要地理隔离的实验 需要大量集群
社区/群组 社交网络产品 需要社交图谱
时间段 有时间效应的实验 要求时间序列控制

四、执行阶段:实验运行中

4.1 问题:分流系统是否公平?(SRM 检验)

痛点:即使代码实现了 50:50 分流,数据管道可能有 bug、bot 流量、缓存穿透等问题,导致实际观测比例偏离设计比例。SRM(Sample Ratio Mismatch)比 p-value 异常更要命的信号。

数学解法:卡方拟合优度检验

$$\\chi^2 = \\sum_{i=1}^{k} \\frac{(O_i - E_i)^2}{E_i}$$

其中 $O_i$ 为第 i 组实际观测人数,$E_i$ 为期望人数。

$\\chi^2$ 统计量服从自由度为 $k-1$ 的卡方分布。如果 $p < 0.01$,应立即排查分流系统。

SRM 检查应自动化运行:实验开始后每 30 分钟检测一次,连续两次告警则自动暂停实验。

4.2 问题:指标方差太大,微小提升被"噪声淹没"?

痛点:用户行为差异极大。一个用户消费上千元,另一个消费 0 元。这种天然差异产生的方差远超实验策略带来的差异。

数学解法一:CUPED(Controlled-Experiment Using Pre-Experiment Data)

这是降低方差最经典的方法。核心思想:利用实验前的同一用户数据 $X$ 来"去除"用户固有的行为偏差。

原理推导

对于实验期指标 $Y$,构造修正指标:

$$Y_{cuped} = Y - \\theta (X - \\mu_X)$$

其中 $\\mu_X = E[X]$,$\\theta$ 为调节参数。

计算 $Y_{cuped}$ 的期望:

$$E[Y_{cuped}] = E[Y] - \\theta(E[X] - \\mu_X) = E[Y]$$

期望不变 无偏性保持

计算 $Y_{cuped}$ 的方差:

$$Var(Y_{cuped}) = Var(Y) + \\theta^2 Var(X) - 2\\theta Cov(X, Y)$$

求导得最优 $\\theta$(使方差最小):

$$\\frac{\\partial Var}{\\partial \\theta} = 2\\theta Var(X) - 2Cov(X, Y) = 0$$

$$\\theta^* = \\frac{Cov(X, Y)}{Var(X)}$$

代入后:

$$Var(Y_{cuped}) = Var(Y) \\cdot (1 - \\rho^2_{X,Y})$$

其中 $\\rho_{X,Y} = Corr(X, Y)$。

关键结论:CUPED 将方差降低为原来的 $(1-\\rho^2)$。如果实验前指标与实验期指标的相关性为 0.6,则方差降低 36%;若相关性为 0.8,方差降低 64%。

方差降低直接等效于:

$$n_{effective} = \\frac{n}{1 - \\rho^2}$$

即 100 万样本在 $\\rho=0.6$ 时等效于 156 万样本;在 $\\rho=0.8$ 时等效于 278 万样本。

协变量 X 的选择原则

  1. 与 Y 高度相关(最大化 $\\rho$)
  2. 实验前测量的(不受策略影响)
  3. 同一用户、同一指标的历史值通常是最佳选择

数学解法二:ML-CUPED(多协变量扩展)

线性 CUPED 只使用一个协变量。ML-CUPED 使用机器学习模型基于多个历史特征预测 Y,得到预测值 $\\hat{Y} = f(X_1, X_2, ..., X_p)$:

$$Y_{ml\_cuped} = Y - (\\hat{Y} - \\mu_{\\hat{Y}})$$

相比单变量 CUPED,ML-CUPED 通常能多削减 5-15% 的方差,因为:

  1. 模型可以捕捉非线性关系
  2. 多个弱相关的协变量组合后预测力更强
  3. 可以融入更多行为特征(频次、时长、多样性等)

注意事项:ML 模型必须使用实验前的数据训练(不能泄露实验期信息),且最好使用交叉验证避免过拟合。

数学解法三:Winsorization(缩尾处理)

对于极端值驱动的指标(如收入),直接用原始值会导致方差被极少数"大鲸鱼"用户主导。

处理方法:将超过分位数 $q$ 的观测值压缩到该分位数:

$$\tilde{Y}_i = \min(Y_i, F_Y^{-1}(q))$$

其中 $F_Y^{-1}(q)$ 为 Y 分布的第 q 分位数,通常选择 $q = 0.95$ 或 $q = 0.99$。

CUPED + Winsorization 联合使用:先缩尾降低极端值的杠杆效应,再 CUPED 消除个体差异,效果最佳。

4.3 问题:能否在实验过程中提前查看结果?提前停止?

痛点:传统固定样本量检验要求只看一次(实验结束时)。如果在实验过程中反复查看 p 值并"看到显著就停止",Type-I error 会严重膨胀。

为什么不能 peek?

模拟实验:每天查看一次 p 值,连续 10 天,即使在 $H_0$ 为真的情况下(无效应),10 天中至少有一次 p < 0.05 的概率:

$$P(\\text{至少一次显著}) = 1 - (1-0.05)^{10} \\approx 40\\%$$

也就是说 Type-I error 从 5% 膨胀到了 40%!

数学解法一:Bonferroni 校正(过于保守)

将显著性水平按查看次数分割:

$$\\alpha_{adjusted} = \\frac{\\alpha}{K}$$

其中 K 为查看次数。10 次查看 每次需要 $p < 0.005$ 才算显著。这种方法过于保守。

数学解法二:序贯检验 / 成组序贯设计(Group Sequential Design)

定义"花费掉"的 $\\alpha$ 边界函数(Spending Function)。$\alpha$ 不是平均分配的,而是在早期"花得少",后期"花得多":

方法 边界形状 特点
Pocock 等边界值 早期容易拒绝 $H_0$
O'Brien-Fleming 早期极高,后期降低 早期保守,更常用
Lan-DeMets 通用 $\alpha$-spending 最灵活

O'Brien-Fleming 在信息比例 t(已收集数据占总计划的比例)处的边界值:

$$z_t = \\frac{z_{\\alpha/2}}{\\sqrt{t}}$$

当 t 很小时(早期),边界值极大,几乎不可能提前拒绝除非效应量极大。

数学解法三:Always Valid Inference(随时有效推断)

基于 martingale 理论的方法(如 E-values / E-process),允许在任何时间点停止并做出有效推断,不需要预先指定查看次数或停止规则。

4.4 问题:多个实验同时运行如何相互隔离?

痛点:同一批用户可能同时参与多个实验,策略效果可能叠加或相互抵消。

数学解法与工程方案

方案 做法 适用场景
独占层(Exclusive Layer) 用户被分入不同层,每层可分配一个实验 强交互风险的实验
正交层(Orthogonal Layer) 多层之间独立哈希分流 无交互风险的实验
交互效应模型 统计建模两个实验的交互项 事后分析交互

当同时运行实验 A 和 B 时,用户的效果可能不是加法:

$$Y = baseline + \\tau_A \\cdot T_A + \\tau_B \\cdot T_B + \\tau_{AB} \\cdot T_A \\cdot T_B + \\epsilon$$

如果 $\\tau_{AB}$ 显著不为零,说明存在交互效应。


五、分析阶段:实验结束后

5.1 问题:观测到的差异是真实效应还是随机噪声?

痛点:实验组均值高于对照组,但不知道这种差异在统计上是否可靠。

数学解法一:Welch's t-test(标准方法)

不假设两组方差相等,更稳健:

$$t = \\frac{\\bar{Y}_T - \\bar{Y}_C}{\\sqrt{s_T^2/n_T + s_C^2/n_C}}$$

自由度使用 Welch-Satterthwaite 近似:

$$df \\approx \\frac{(s_T^2/n_T + s_C^2/n_C)^2}{\\frac{(s_T^2/n_T)^2}{n_T-1} + \\frac{(s_C^2/n_C)^2}{n_C-1}}$$

在大样本下趋近于标准正态分布。

数学解法二:Bootstrap(非参数方法)

当指标分布严重偏态(如长尾收入、次留)时,T 检验的正态假设不成立。

Bootstrap 步骤:

  1. 从实验组和对照组分别有放回地重抽样 B 次(B 1000)
  2. 每次计算 $\\hat{\\tau}_b = \\bar{Y}_T^{(b)} - \\bar{Y}_C^{(b)}$
  3. 用 B 个 $\\hat{\\tau}_b$ 的经验分布构造置信区间

百分位数 Bootstrap CI:

$$CI = [\\hat{\\tau}_{(B \\cdot \\alpha/2)}, \\hat{\\tau}_{(B \\cdot (1-\\alpha/2))}]$$

BCa(Bias-Corrected and Accelerated)Bootstrap 在偏态分布下更准确。

数学解法三:Permutation Test(置换检验)

"如果是随机现象,打乱分组后应该得到类似的结果":

  1. 计算原始 $\\hat{\\tau}_{obs}$ = 实验组 - 对照组均值差
  2. 将用户随机打乱重新分"组",计算差异 $\\hat{\\tau}^{(b)}$,重复 B 次
  3. p-value = $\\frac{\\#\\{|\\hat{\\tau}^{(b)}| \\geq |\\hat{\\tau}_{obs}|\\}}{B}$

解法选择决策树

指标是否严重偏态?
 是  样本量是否足够大?
    是(n > 1000/组)  CUPED + Delta Method + t-test(CLT 保证)
    否  Bootstrap / Permutation Test
 否  Welch's t-test(标准选择)

5.2 问题:同时看多个指标,假阳性概率爆炸?

痛点:若同时观察 20 个指标,即使 $H_0$ 完全为真,也几乎必然会看到至少一个"p < 0.05"的结果。

$$P(\\text{至少一个假阳性}) = 1 - (1-0.05)^{20} \\approx 64\\%$$

解决方案层级

第一层(设计层面):指定 OEC(Overall Evaluation Criterion)

实验上线前预先注册 1-2 个核心指标作为决策依据。这不是数学技巧,而是科学方法论防止事后"捞显著指标"(p-hacking)。

$$OEC = w_1 \\cdot Z(metric_1) + w_2 \\cdot Z(metric_2) + ... + w_k \\cdot Z(metric_k)$$

其中 $Z(\\cdot)$ 是标准化,$w_i$ 是从业务目标推导的权重。

第二层(统计层面):多重检验校正

方法 控制目标 公式 特点
Bonferroni FWER $p_i < \\alpha/m$ 最保守,m 个检验
Holm-Bonferroni FWER 逐步法 比 Bonferroni 略宽
BH (Benjamini-Hochberg) FDR q 排名后 $p_{(i)} \\leq \\frac{i}{m}q$ 探索性分析首选

FWER vs FDR 的选择

第三层(分析层面):分层主次框架

核心决策指标(1-2 个):必须显著 + 方向正确
     如果显著  检查护栏指标
     如果不显著  不拒绝 H,不因次要指标显著而上线

正向护栏(希望提升但不能显著下降):DAU、留存
反向护栏(希望不显著或方向不恶化):延迟、崩溃率、卸载率
探索性指标(不需要校正):用于理解"为什么"和生成假设

5.3 问题:比率型指标(CTR、ARPU、转化率)的方差如何正确估计?

痛点:比率指标是两个随机变量的比值(如 $R = Y/N$),不能直接用均值的方差公式。

数学解法:Delta Method(一阶泰勒展开近似)

对于比率 $R = \\bar{Y} / \\bar{N}$:

$$Var(R) \\approx \\frac{1}{\\mu_N^2}Var(Y) + \\frac{\\mu_Y^2}{\\mu_N^4}Var(N) - 2\\frac{\\mu_Y}{\\mu_N^3}Cov(Y, N)$$

也可以用用户级 Delta Method 更直接地计算:

定义 $S_i = Y_i - R \\cdot N_i$(每个用户的"残差得分"),则:

$$Var(R) \\approx \\frac{Var(S)}{\\bar{N}^2}$$

$$SE(R) = \\frac{SD(S)}{\\bar{N} \\cdot \\sqrt{n}}$$

与 Bootstrap 的对比

Delta Method 计算高效,但依赖大样本假设。对于严重偏态的小样本比率指标,Bootstrap 更可靠。

5.4 问题:不同用户群体的效果一样吗?

痛点:平均效应为正不代表所有用户都受益。可能 30% 的用户有大幅提升,30% 有负面效果,40% 无变化平均下来看起来"不显著"。

数学解法一:分组异质性分析

按预设的维度(新老用户、设备类型、活跃度)分组估计效应。需要注意:分组后的多重检验问题(用 Bonferroni / BH 校正)。

数学解法二:因果森林(Causal Forest)

由 Athey & Imbens 提出,基于随机森林的自适应 HTE 估计方法。

核心思想:构建一个森林,每棵树对用户划分,使得同一叶子节点内的处理效应尽可能"相似"。

对用户 $i$ 的 CATE(Conditional Average Treatment Effect)估计:

$$\\hat{\\tau}(x_i) = \\frac{\\sum_{b=1}^{B} \\hat{\\tau}_b(x_i)}{B}$$

其中 $\\hat{\\tau}_b(x_i)$ 是第 b 棵树上包含用户 i 的叶子节点中的 ATE。

关键输出

  1. 每个用户的 CATE 估计及其置信区间
  2. 特征重要性排序(哪些特征驱动了异质性)
  3. 按 CATE 分位数的效果曲线

数学解法三:Meta-Learners 家族

方法 思路 适用场景
S-Learner $E[Y T, X]$ 将处理变量作为特征之一 简单直接,适合处理效应与特征关系简单时
T-Learner 实验组和对照组分别建模 两组差异大时效果好
X-Learner 用 T-Learner 的结果再训练倾向性模型 样本不均衡时最稳健
R-Learner 基于 Robinson 变换的去偏方法 理论性质好,适合高维特征

5.5 问题:短期提升会长期持续吗?

痛点:许多策略在初期表现出色(Novelty Effect),但效果随时间衰减甚至逆转。

常见时间效应偏差

效应 描述 示例
Novelty Effect 用户因新鲜感而短期活跃 新 UI 上线前 3 天点击率飙升后回落
Learning Effect 用户需要时间学习/适应 新功能使用率逐步上升
Selection Bias 留存用户的特征漂移 留存的都是"喜欢"的用户,AT 被高估
Primacy Effect 首次体验的锚定效应 第一印象决定了后续行为模式

数学解法一:长时间 Holdout

实验停止分流后,保留实验组用户继续观察,与始终在对照组的用户对比长期效果。

$$\\tau_{long-term} = E[Y_{t+k}|T=1] - E[Y_{t+k}|T=0]$$

其中 k 为实验结束后的时间窗口(如 30 天、90 天)。

数学解法二:多期 DID(Difference-in-Differences)

如果无法完全随机化(如城市级实验),用 DID 剥离时间趋势:

$$Y_{it} = \\alpha + \\beta_1 \\cdot Treat_i + \\beta_2 \\cdot Post_t + \\delta \\cdot Treat_i \\times Post_t + \\epsilon_{it}$$

$\\delta$ 才是我们关心的因果效应它是在剥离了"实验组与对照组本身的差异"($\\beta_1$)和"时间带来的变化"($\\beta_2$)之后的净效应。

推广到多期的 Event Study 形式:

$$Y_{it} = \\alpha_i + \\lambda_t + \\sum_{j \\neq -1} \\delta_j \\cdot Treat_i \\times Period_{j} + \\epsilon_{it}$$

可以画出每个时间段的效应及其置信区间,直观判断效果的动态变化。


六、决策阶段:从结果到行动

6.1 问题:统计显著就是值得上线的吗?

痛点:大样本下,微小到无商业价值的差异也会统计显著。

区分统计显著性与实际显著性

概念 回答的问题 判断方式
统计显著性 "这个差异是真实的吗?" p-value <
实际显著性 "这个差异有业务价值吗?" 效应量 MDE
临床/业务显著性 "这个策略值得投入吗?" ROI > 阈值

效应量(Effect Size)的度量

$$Cohen's\\ d = \\frac{\\bar{Y}_T - \\bar{Y}_C}{S_{pooled}}$$

Cohen's d 解释
0.2 小效应
0.5 中等效应
0.8+ 大效应

在互联网 A/B 测试中,1-3% 的相对提升是常态;Cohen's d 通常在 0.01-0.1 之间。

6.2 问题:实验结论能推广到全量吗?

问题来源

  1. 爬行效应(Creep Effect):小流量实验时,网络效应/供需关系的干扰有限。全量上线后,市场出清价格变化可能抵消策略效果。
  2. 幸存者偏差(Survivorship Bias):小流量实验中覆盖的用户可能是高活跃用户,不等于全体用户。
  3. 时间效应(Seasonality):实验期间的特殊时间节点(节假日、促销季)可能导致效应被高估或低估。

解决方案


七、进阶专题

7.1 贝叶斯 A/B 测试

频率学派 vs 贝叶斯学派的核心区别

维度 频率学派 贝叶斯学派
概率的含义 长期频率 信念的不确定性
参数是 未知的固定值 随机变量(有先验分布)
实验结论 "拒绝/不拒绝 $H_0$" "B 比 A 好的概率为 X%"
需要预注册样本量? 是(严格来说) 否(天然支持序贯决策)
解读难度 统计概念易混淆 概率表述更直观

贝叶斯框架

  1. 设定先验分布:$\\theta \\sim P(\\theta)$(可以利用历史实验信息)
  2. 用实验数据更新:$P(\\theta|data) \\propto P(data|\\theta) \\cdot P(\\theta)$
  3. 计算后验概率:$P(\\theta_B > \\theta_A | data)$
  4. 如果后验概率超过阈值(如 95%),则宣布胜者

常用模型

贝叶斯方法的核心优势

  1. 可以直接量化"B 比 A 好的概率"更符合直觉
  2. 可以融合同类历史实验的先验信息
  3. 可以使用"损失函数"做最优决策(不仅仅是"检测效应")
  4. 天然允许序贯查看

7.2 Interleaving / 成对比较

适用场景:搜索排序、推荐系统的算法对比。

核心思路:传统 A/B 测试给用户看整体不同的排序/推荐结果。Interleaving 将两组结果交替混合展示给同一用户,直接在用户与混合结果的互动中对比哪个算法的 item 被点击更多。

敏感度提升原理

传统 A/B:

Interleaving:

数学上相当于从不独立样本的 Welch's t-test 转为配对 t-test,方差通常降低至原来的 1/10 到 1/100。

$$t_{paired} = \\frac{\\bar{d}}{s_d / \\sqrt{n}}$$

其中 $d_i$ 是同一用户对两个算法的偏好得分差。

7.3 长期因果效应与 Holdout 设计

问题:A/B 测试通常运行 1-4 周,但很多策略的效果需要在月、季度甚至年的尺度上才能完全显现或衰减。

数学框架

定义实验停止后 k 期的长期效应:

$$\\tau_{LT}^{(k)} = E[Y_{t+k} | T=1, \\text{实验已停止}] - E[Y_{t+k} | T=0]$$

Holdout 设计

  1. 实验结束时,停止分流但不回滚实验组
  2. 保留 5-10% 的用户永远是"干净"对照(Never-exposed)
  3. 对比实验组与 Holdout 组在 k 个月后的指标差异

为什么需要 Holdout 而不仅是延长时间

7.4 网络效应下的因果推断

当用户之间存在直接交互影响时(社交网络、双边市场),SUTVA(Stable Unit Treatment Value Assumption)被违背。

问题形式化

在社交网络中,用户 j 的处理分配 $T_j$ 可能影响用户 i 的结果 $Y_i$(通过社交连接)。

解决方案方向

方法 思路 局限
集群随机化 将社交簇整体分流 集群边界可能泄漏
两阶段随机化 先随机化集群,再在集群内随机化用户 需要足够多的集群
网络暴露模型 定义"邻居中实验组比例"作为暴露度 需要完整的社交图谱
图神经网络因果推断 用 GNN 建模网络结构对效应的调节 高度依赖图结构准确性

暴露模型(Exposure Model)

定义用户 i 的暴露度为其邻居中实验组的比例:

$$e_i = \\frac{\\sum_{j \\in \\mathcal{N}(i)} T_j}{|\\mathcal{N}(i)|}$$

然后估计效应随暴露度的变化:

$$Y_i = \\beta_0 + \\beta_1 T_i + \\beta_2 e_i + \\beta_3 T_i \\cdot e_i + \\epsilon_i$$

其中 $\\beta_3$ 捕获了网络效应的传递你的实验组邻居越多,你被"间接触达"的效应越强。

7.5 AA 测试与系统验证

AA 测试的目的:验证整个实验系统(分流、数据管道、指标计算)是否产生虚假的"显著"结果。

方法论

  1. 运行大量 AA 测试(如 1000 次模拟),每次两组都处理为对照组
  2. 对每次 AA 测试计算 p-value
  3. 验证 p-value 是否服从均匀分布 $U(0, 1)$

AA 测试的诊断信号

异常模式 可能的系统问题
p-value 集中在 0 附近 分流系统不独立(有偏差)
p-value 集中在 1 附近 方差计算有误(过于保守)
特定分桶持续显著 该分桶的用户群存在特征偏差
周期性出现异常 数据管道在特定时间窗口有问题

AA 测试的自动化


八、落地优先级与工程架构

8.1 能力建设路线图

第一阶段(基础能力)
 分流系统:支持用户级/设备级哈希分流
 AA 测试自动化:上线前 24h 校验
 基础分析:Welch's t-test + 置信区间
 SRM 检验:自动检测 + 告警
 指标管理:OEC 定义 + 护栏指标

第二阶段(降方差)
 CUPED:单协变量版本
 Winsorization:自动阈值选择
 Delta Method:比率指标正确推断
 分层抽样:关键维度均衡

第三阶段(提升效率)
 多重检验校正:Bonferroni + BH
 序贯检验:Group Sequential Design
 Bootstrap:偏态指标推断
 ML-CUPED:多协变量方差削减

第四阶段(深度分析)
 贝叶斯框架:Beta-Binomial + Normal-Normal
 HTE 分析:Causal Forest + Meta-learners
 长期 Holdout:效果衰减曲线
 网络效应:Exposure Model
 Interleaving:搜索/推荐高效对比

8.2 核心数据科学 Stack 建议

组件 推荐工具 替代方案
实验管理平台 Statsig / Eppo / 自研 GrowthBook, Optimizely
分流引擎 哈希分流 (MD5/FarmHash) -
离线分析 Python + SciPy + Statsmodels R
方差削减 自研 CUPED SDK Google's CausalImpact
因果推断 EconML / CausalML / DoWhy grf (R)
数据管道 Spark / Flink / Snowflake -
可视化 Streamlit / Grafana / Tableau -

8.3 团队能力模型

一个好的 A/B 测试数据科学团队需要具备:

角色 核心能力
实验平台工程师 分流系统、数据管道、SRM 监控
实验数据科学家 CUPED、Bootstrap、HTE、贝叶斯
因果推断专家 DID、网络效应、长期效应
实验策略顾问 MDE 校准、OEC 设计、业务决策框架

附录:关键公式速查

公式 用途
$n = \\frac{2(Z_{\\alpha/2} + Z_{\\beta})^2 \\sigma^2}{\\delta^2}$ 样本量计算
$t = \\frac{\\bar{Y}_T - \\bar{Y}_C}{\\sqrt{s_T^2/n_T + s_C^2/n_C}}$ Welch's t 检验
$Y_{cuped} = Y - \\theta (X - \\mu_X), \\theta^* = \\frac{Cov(X,Y)}{Var(X)}$ CUPED 修正
$Var(Y_{cuped}) = Var(Y) \\cdot (1-\\rho^2_{X,Y})$ CUPED 方差削减
$\\chi^2 = \\sum \\frac{(O_i - E_i)^2}{E_i}$ SRM 卡方检验
$p_i < \\alpha / m$ Bonferroni 校正
$p_{(i)} \\leq \\frac{i}{m}q$ BH FDR 校正
$Var(R) \\approx Var(S) / (\\bar{N}^2), S_i = Y_i - R \\cdot N_i$ Delta Method
$n_{effective} = n / (1 + (m-1)\\rho)$ 集群随机化有效样本量
$P(\\text{至少一次显著}) = 1 - (1 - \\alpha)^K$ Peeking 的假阳性膨胀
$z_t = z_{\\alpha/2} / \\sqrt{t}$ O'Brien-Fleming 边界

最后的话:A/B 测试不仅仅是一个 t 检验。它是一个从实验设计、数据管道、分流系统、统计推断、异质性分析到业务决策的完整系统工程。本文覆盖的知识体系,本质上是在回答一个核心问题如何在一个充满噪声和不完美的世界中,可靠地测量因果关系。每多理解一层方法论,就是对这个问题多一层的保障。