互联网产品做一次策略迭代,最关心的问题通常很朴素:新推荐算法、新排序规则、新交互入口上线以后,DAU、人均时长、点击率这些总体指标会不会变好。直接全量上线风险太高,A/B 实验因此成为默认做法:抽一部分流量,随机分成对照组和实验组,一组继续用旧版本,一组使用新版本,运行一段时间后比较指标。这一步只能给出样本里的组间差异,还不能直接给出总体上的因果效应。
从样本差异走到因果结论,需要处理两个问题。第一,样本到总体:有限样本里的差异可能只是采样噪声。第二,关联到因果:数据里两个现象一起出现,并不说明其中一个导致了另一个;混淆变量、霍桑效应、网络溢出都会制造这种错觉。A/B 实验的数理框架,本质上就是把「实验组比对照组高」逐步翻译成「新版本让总体指标上升」。
本文介绍这条翻译链路里的两个核心工具:潜在结果框架(Rubin Causal Model) 与频率派假设检验。前者回答「因果效应到底是什么」,后者回答「有限样本里观察到的差异是否足够罕见」。少了潜在结果框架,实验结果只能停留在相关性;少了假设检验,实验结果无法区分真实效果和随机波动。
1. 从总体统计到样本推断
统计推断研究的是如何用样本反推总体。当我们能直接枚举整个 总体(population),例如全国人口普查逐一登记每个人,这叫 普查(census),不是统计推断。更多时候,总体太大、成本太高,或者实验本身有风险,我们只能按某种机制抽取样本,再用样本统计量去 估计 总体参数。统计推断是否可靠,首先取决于样本机制是否让样本代表总体。
A/B 实验是这个思想在工业系统里的典型形式。它的源头可以追到医疗领域的 随机对照试验(RCT):把病人随机分到用药组和安慰剂组,用样本疗效推断药物在目标总体里的效果。互联网产品把同一套思想用于算法迭代,例如让 5% 用户使用新推荐算法,95% 用户继续使用旧算法,一周后比较人均时长。这并不是在验证那 5% 用户本身,而是在估计全量上线以后总体指标会怎样变化。
关键问题也在这里。实验结束后,我们看到实验组人均时长比对照组高 1.2%,能不能直接说「新算法让人均时长提高了 1.2%」?严格说不能。被分到实验组的用户不可能同时再使用旧算法,因此我们无法观察同一个用户在新旧两种版本下的结果差异。真正想估计的是同一个对象在两种处理下的差异,而这个差异在个体层面必然包含一个无法观测的反事实(counterfactual)。
2. 潜在结果框架
2.1 设定与潜在结果
沿用 Neyman 在 1923 年提出的潜在结果框架。设实验里有 个对象,用 表示对象 的分组: 表示进入实验组, 表示进入对照组。指标 有两个版本:
- :对象 在实验组下的指标值,也就是使用新版本时的结果。
- :对象 在对照组下的指标值,也就是使用旧版本时的结果。
这两个量统称为对象 的 潜在结果(potential outcomes)。它们在框架里同时被定义,但实验中只能观测其中一个:分组变量 只决定哪一个潜在结果被看见,不决定哪一个潜在结果存在。
2.2 个体因果效应与反事实
对象 的 个体因果效应 定义为同一个对象在两种处理下的差:
这个定义很自然,也直接暴露了因果推断的根本难题:同一个对象只能接受一种处理,所以 与 最多只能观测到一个。个体因果效应 由一个观测结果和一个反事实共同定义,因此无法被精确计算。反事实(counterfactual) 不是修辞概念,而是因果效应在个体层面不可观测的数学来源。
2.3 SUTVA:让潜在结果可用于因果推断的假设
潜在结果框架本身只是一套语言。要把它用于因果推断,还需要 Rubin 在 1980 年系统化的 Stable Unit Treatment Value Assumption(SUTVA)。这里有两条常被默认使用的假设:
- 无干扰(No interference):对象 的潜在结果只依赖自己的 ,不受其他对象分组 影响。工业反例是社交分发:实验组用户被新算法推荐到优质内容并转发给对照组好友,对照组指标也随之变化。
- 处理一致(Treatment variation irrelevance):所有进入实验组的对象接受的是同一个 treatment。工业反例是推荐服务分地域灰度,实验组里一部分用户实际拿到版本 A,另一部分用户拿到版本 B。
SUTVA 是多数 A/B 实验默认依赖的因果条件,但它在社交、推荐、双边市场里很容易被破坏。网络效应下的实验设计通常要改用 cluster randomization、switchback 等方案,把溢出影响控制在可解释的范围内;本文只讨论最基础的随机对照场景。
2.4 平均因果效应
个体因果效应无法逐个计算,但我们通常不需要逐个计算。A/B 实验关心的是总体平均效果,也就是 平均因果效应(Average Treatment Effect, ATE):
ATE 是总体在实验组状态下的平均指标减去总体在对照组状态下的平均指标。ATE 仍然由不可同时观测的潜在结果定义,但随机实验可以给出它的无偏估计。
3. 随机化与 Difference-in-means 估计量
3.1 随机化如何处理反事实
在 Neyman 视角下, 是总体里已经固定的潜在结果,唯一的随机性来自分组变量 。如果分组与潜在结果独立,实验组和对照组就都是总体的随机子集。随机化的作用,是让每一种潜在状态都获得一个对其总体均值无偏的可观测子样本。
这里容易混淆两句话。我们不是说实验组观测到的 与对照组观测到的 同分布,它们本来就是两种不同处理下的结果;我们说的是实验组和对照组在潜在结果对 的分布上,期望中都代表同一个总体。因此实验组均值可以估计 ,对照组均值可以估计 ,两者相减就可以估计 ATE。
3.2 Difference-in-means 估计量
基于随机分组,我们构造 ATE 的样本估计量:
它被称为 Difference-in-means(组均值差)估计量。形式上就是实验组观测均值减去对照组观测均值,但这条公式成立依赖随机分组,而不是依赖「两组看起来差不多」这样的直觉。组均值差能被解释为因果效应估计量,是因为随机化把组间可比性写进了实验设计。
3.3 无偏性的完整推导
把求和改写成对所有 求和,并用 与 作为指示变量:
在这里, 与 是固定的总体属性, 与 是实验设计参数,随机变量只有 。因此对 求期望时,期望算子只作用在 上:
推导里的关键条件是 对所有对象同时成立。这就是「每个对象按同一概率进入实验组」的数学表述,也是随机分组的最低要求。
3.4 失效条件:实验中途改变分组比例
一旦 随对象变化,简单的 Difference-in-means 就会有偏。工业里常见的例子是实验中途改变对照组与实验组的比例:第一天对照组 1% / 实验组 1%,第二天对照组 1% / 实验组 5%。如果直接比较最终累计均值,早期用户和晚期用户进入实验组的概率不同,时间分布差异会混入 treatment effect,形成类似 辛普森悖论 的偏差。问题不在于放量,而在于对照组与实验组的比例被改变。
等比放量是另一回事。例如两组同步从 1%/1% 放到 5%/5%,ctrl:exp 始终保持 1:1,那么所有对象的 仍然相同,Difference-in-means 仍然无偏。等比放量会让早进入实验的用户暴露时间更长,但这种差异在两组中对称存在。它改变的是估计目标所覆盖的人群与时间结构,不破坏内部效度。
事后修正可以使用 inverse-probability weighting(见附录 B),但更可靠的工程原则更简单:实验全程固定 ctrl:exp 比例;总流量可以等比放大,分组比例不要中途改。
4. 假设检验:从估计量到决策
4.1 零假设、备择假设与两类错误
有了 这个无偏估计量,还不能直接做业务决策。有限样本里 不会刚好等于 ,哪怕真实效果为 0,也可能因为随机波动得到一个非零结果。假设检验要回答的问题,是观察到的差异在「新版本无效」这个前提下是否足够罕见。
定义两个互斥假设:
- 零假设 :,新版本没有效果。
- 备择假设 :,新版本有正向或负向效果。
判决规则会产生两类错误:
- 第一类错误(Type I error,false positive): 为真但被拒绝。概率记作 ,工程上常取 5%。
- 第二类错误(Type II error,false negative): 为真但未能拒绝 。概率记作 , 称为检验的 统计功效(power)。
频率派检验的逻辑可以概括为一句话:如果在 成立时某个结果极少出现,而我们这次确实观察到了它,就有理由拒绝 。
4.2 中心极限定理
要判断「当前结果有多罕见」,必须知道 在 下的分布。这里需要 中心极限定理(Central Limit Theorem, CLT)。
Lindeberg-Lévy 形式:设 独立同分布,满足 与 。当 时,
其中 表示 依分布收敛(convergence in distribution)。
用特征函数可以快速看到这个结论。令 ,则 均值为 0、方差为 。其特征函数 在 附近有展开式:
设标准化和 。由独立性可得:
正是标准正态 的特征函数。由 Lévy 连续性定理, 依分布收敛到 。完整技术细节见附录 A。直观地说,只要二阶矩有限,样本均值在加和平均后会逐渐只保留均值与方差的信息,分布形状趋近正态。
4.3 应用到 A/B 实验:检验统计量
设实验组与对照组样本分别来自方差有限的总体,组内 i.i.d.,组间独立。在工程常见的大样本场景下,由 CLT 与两组独立性:
用样本方差 代替总体方差,构造检验统计量:
在 下,。给定显著性水平 ,双侧检验的拒绝域为 。这一步把「组均值差」转换成了「在零假设下有多罕见」的标准化尺度。
4.4 p 值
p 值(p-value) 定义为:在 成立的前提下,观察到当前结果或更极端结果的概率。双侧检验下:
其中 是标准正态 CDF。p 越小,说明当前观测在 下越罕见,拒绝 的证据越强。p 值衡量的是数据相对于零假设的稀有度,不是备择假设为真的概率。
因此,「 表示 为真的概率是 95%」是错误解释。频率派 p 值始终以 为条件;如果要计算 的后验概率,需要引入先验,进入贝叶斯推断。美国统计协会(ASA)2016 年关于 p 值的声明 对这类误用有系统说明。不要把 p 值读成「实验成功概率」。
4.5 置信区间
p 值给出检验结论,置信区间给出可能的效应范围。 的 置信区间为:
置信区间(confidence interval) 的频率派语义是:如果反复用同样的实验设计采样并构造区间,大约 比例的区间会覆盖真实的 。它不是说当前这一次区间有 的概率覆盖 。真实参数是固定的,当前区间要么覆盖它,要么不覆盖它;概率属于抽样过程。
4.6 Power 与最小样本量
显著性水平 控制 false positive,但不控制 false negative。检验能否发现真实效果,取决于 真实效应大小 、样本量 与方差 。在 的近似下,双侧 检验在效应 处的 power 近似为:
反解得到每组所需样本量:
最小样本量计算应该在实验开始前完成,并在实验开始后固定下来。边跑边看、显著就停,会改变检验过程本身;下一节讨论它的代价。
5. 真实场景下的两个陷阱
5.1 Fixed-sample size 与 peeking 问题
经典 t 检验和 z 检验有一个关键前提:样本量 在实验开始前确定,实验跑满以后只检验一次。工程实务里更常见的是看板每天刷新,PM、算法工程师、数据科学家每天看一次 p 值,显著就停,不显著就继续。这种根据中途结果决定是否停止的做法,叫做 peeking。
Peeking 会把 false positive 率显著放大。每天看一次、连续看 14 天,相当于连续问 14 次「是否已经显著」;即使每次检验的名义 是 5%,至少一次显著的概率也远高于 5%。Johari 等人在 Peeking at A/B Tests(KDD 2017) 中做过仿真:在 为真的情况下使用经典 t 检验并 daily peeking,实际 false positive 率可以从名义 5% 上升到 30% 以上。
业务上常见的怪现象也来自这里:一年做了 100 个实验,每个实验都报显著正向,但年底大盘指标没有增长。许多「显著 +1%」只是 为真时被 peeking 选中的随机高点,后续既不可重复,也不会在线上累加。peeking 把固定样本检验变成了多重比较问题。
修复 peeking 的标准方向是 序列检验(sequential testing)。Wald SPRT 用似然比和上下边界 定义停时规则;工业平台更常见的是混合先验版本 mSPRT(Always Valid Inference, Johari et al. 2015),它能在每个时刻给出有效的置信序列。序列检验允许业务随时看、随时停,同时保持 Type I error 控制。代价是同等样本量下,单次检验功效通常低于 fixed-sample t 检验。
还有一个前提不能省略:SPRT 与 mSPRT 的理论保证依赖样本序列 i.i.d.。真实流式 A/B 数据里,同一个用户跨 batch 的多条记录往往正相关,用户行为也有工作日 / 周末、上午 / 晚间这样的时间结构。序列检验解决 peeking,不自动解决样本相关性。
5.2 i.i.d. 假设破灭与方差低估
CLT 与 都依赖样本 独立同分布(i.i.d.)。这条假设在互联网实验里经常被破坏,最常见的原因是实验单位和数据记录粒度不同。如果实验按用户分流,但指标按曝光、点击、播放记录统计,样本之间通常不是独立的。
以曝光-点击实验为例。实验单位是用户,点击数据粒度是 (user, video)。同一个用户一周内的多次曝光和多次点击显然正相关:一个高活跃用户贡献的记录更多,点击倾向也更稳定。设第 个用户有 条记录 ,用户间独立、用户内可能相关,则总和方差为:
当 时,真实方差大于按 i.i.d. 公式算出的方差。工程实现如果直接套用 i.i.d. 方差,标准误会被低估,检验统计量会被放大,p 值会被压低,false positive 率随之上升。
标准修正是按分析单元聚合数据。既然随机化单位是用户,检验样本也应尽量回到用户级:把同一用户的多条记录聚合成一条用户级指标,再对用户级样本做 t 检验。固定样本 t 检验本身没有问题,问题通常出在喂给它的数据粒度不对。代价是指标语义会从「次均」变成「人均」,跨天、跨 key 的复杂指标还会带来额外的离线聚合成本。
6. 结语
A/B 实验真正回答的问题,不是「实验组是不是比对照组高」,而是「把新版本推给总体以后,指标是否会因为这个版本而变化」。这条判断链路从潜在结果定义因果量开始,经过随机化得到无偏估计,再用 CLT 与假设检验把有限样本结果转换成决策。使用前有几件事需要放在心里:
- A/B 实验是统计系统和因果系统,不只是流量系统。分流、灰度、看板是工程基础;效应定义、方差估计、错误率控制决定报出的数字是否可信。
- 随机化是最便宜的因果识别条件。没有随机化时,观察性数据、自然实验、Difference-in-Differences、Instrumental Variable、Propensity Score Matching 都需要额外假设;每种方法都有自己的失效条件。
- CLT 与 i.i.d. 是基础,也最容易被误用。多记录用户、社交网络溢出、双边市场耦合都会让样本相关性进入方差估计,最终把名义 5% 的错误率推高。
- Peeking 是日常操作里最常见的错误来源。固定样本检验不允许每天看 p 值后决定是否停止;如果业务确实需要随时看结果,应该使用序列检验。
在这套基础之上,工业界继续优化的是两个方向。方差缩减 关心如何在同样错误率控制下减少样本量,例如 CUPED(Deng et al. WSDM 2013) 用实验前协变量构造控制变量;网络效应下的实验设计 关心 SUTVA 失效后如何重新定义随机化单位,例如 cluster randomization 与 switchback。二者共同指向同一个问题:怎样在不牺牲因果效力的前提下,让实验更快、更稳、更便宜。
附录 A:CLT 的完整证明
正文的特征函数证明里有三处技术细节需要补全。
1. 的精确含义。严格来说, 是指存在函数 使得
这一展开要求 有有限二阶矩,即 。推导依赖特征函数的两次可微性,以及 。二阶矩有限,是这个版本 CLT 能成立的关键条件。
2. 极限的严格化。固定 ,对 取对数:
第二步使用 与 。两边取指数,得到 。这一步把标准化和的特征函数收敛到了标准正态的特征函数。
3. 弱收敛。由 Lévy 连续性定理:若一族特征函数 逐点收敛到某个在 处连续的函数 ,则对应分布弱收敛到以 为特征函数的分布。这里 在 连续,因此 。特征函数的收敛最终给出了分布收敛。
更弱条件下的版本,例如 Lindeberg 条件、Feller 的非同分布版本,可参考测度论概率教材,例如 Durrett 的《Probability: Theory and Examples》第 3 章。
附录 B:不均等分配下的 Difference-in-means 修正
§3.4 提到,当 因对象而异时,简单 Difference-in-means 估计量会有偏。修正思路是给每个观测加 逆概率权重(inverse probability weighting),这一思想来自 Horvitz-Thompson estimator。它用已知分配概率把不同对象被抽中的机会重新校准回总体尺度。
设 已知,例如来自实验平台的分流配置。定义:
直接对 求期望可验证 ,不需要 对所有对象一致。IPW 修复的是分配概率不一致导致的偏差。
代价是方差会上升,尤其当某些 接近 0 或 1 时,权重会剧烈放大。工程实践中,更稳妥的办法仍然是从实验设计阶段保证 一致;IPW 是事后修复,不应成为中途调整分组比例的理由。优先把随机化设计做对,再考虑估计量修正。关于 IPW 与 doubly robust、PSM 等方法的系统对比,可参考 Imbens 与 Rubin 的《Causal Inference for Statistics, Social, and Biomedical Sciences》(2015)第 12-15 章。