A/B Testing: Experiment Design, Sample Size, and Launch Decisions

Hyacehila

A/B 测试解决什么问题

在网站、App 和推荐系统等产品场景中,我们经常要在多个设计或运营方案之间做选择。小到按钮位置、文案、颜色,大到注册流程、推荐策略、价格展示和召回机制,单靠直觉很难判断哪个方案真的更好。

A/B 测试的核心思想类似对照实验:把用户或请求随机分到不同组,让每组在相同时间窗口内看到不同方案,然后比较关键指标的变化。它希望回答的问题不是“哪个方案看起来更合理”,而是“在随机误差和业务波动存在时,我们是否有足够证据认为某个方案带来了真实提升”。

A/B 测试适合处理因果方向相对清晰、干预可控、指标可观测的问题。它不适合替代产品判断,也不能自动解释所有差异产生的机制。如果实验设计本身不干净,即使统计检验显著,结论也可能没有价值。

基本流程

一个完整的 A/B 测试通常包括这些步骤:

  1. 提出业务假设:明确要改善什么问题,以及新方案为什么可能改善它。
  2. 设计实验方案:确定对照组、实验组、实验单位、分流比例和互斥关系。
  3. 设定指标体系:确定主指标、护栏指标和辅助观察指标。
  4. 估计样本量和实验时长:根据最小可检测效应、显著性水平和功效决定是否值得实验。
  5. 开发并上线实验:保证埋点、日志、分流和版本展示符合设计。
  6. 采集并分析数据:检查分流质量、样本比例、指标异常,再做统计检验。
  7. 做出决策:结合统计显著性、实际业务收益和风险决定上线、回滚或继续实验。

流程看起来线性,但真实实验常常需要回到前面修正。比如发现主指标波动远大于预期,就要重新评估样本量;发现分流不均,就要先排查实验平台,而不是直接分析效果。

实验设计

假设

实验开始前需要先写清楚假设。最基本的形式是:

  • 原假设 H0H_0:新方案与旧方案没有差异,或者新方案没有带来提升。
  • 备择假设 H1H_1:新方案相对旧方案带来了差异或提升。

在产品实验中,更实用的表述通常是:“新注册页能把注册完成率提高至少 1 个百分点,同时不降低次日留存和支付转化。”这比单纯说“新方案更好”更可操作,因为它同时定义了目标、幅度和风险边界。

实验单位

实验单位必须和干预对象一致。常见单位包括用户、设备、账号、请求、会话和商家。选择错误会导致污染:

  • 如果同一个用户在不同设备上看到不同版本,用户级体验会被污染。
  • 如果推荐排序按请求随机,而用户会反复刷新,实验组和对照组之间可能互相影响。
  • 如果社交关系或市场供需存在强干扰,单个用户随机分流可能破坏独立性。

一般来说,用户体验类实验优先用用户或设备作为实验单位;广告、搜索、推荐的底层策略实验要额外检查请求级随机化是否会造成跨组干扰。

随机分流

A/B 测试要求同时性、同质性、唯一性和均匀性:

  • 同时性:不同版本在同一时间窗口内运行,避免季节性、活动和流量结构变化造成偏差。
  • 同质性:各组用户在关键维度上相似,差异主要来自随机误差。
  • 唯一性:同一个实验单位只进入一个版本,不能重复计入多个版本。
  • 均匀性:分流比例与设计一致,不能出现样本比例失衡。

分流通常通过稳定 hash 实现。比如对用户 ID 和实验 ID 做 hash,再按区间分配到 A 或 B。这样同一用户多次访问会稳定进入同一组。

同层互斥

A/B 测试不是只能有 A 和 B 两个版本,也可以有 A/B/C 或多方案实验。但多个实验并行时要处理互斥关系。

同层互斥的意思是:在同一流量层内,一个实验单位只能进入该层的一个实验或一个版本。如果两个实验都修改注册页,一个用户同时进入两个实验,就无法判断最终变化来自哪个实验。

并行实验可以分层:例如一层处理注册页 UI,另一层处理推荐策略。前提是两层之间的交互影响可接受,或者后续分析中明确建模交互项。

A/A 与 A/A/B 检查

A/A 测试是把用户随机分成两组,但两组都展示同一个版本。它不用于验证新方案,而用于检查实验系统:

  • 分流是否均匀。
  • 埋点是否一致。
  • 指标计算是否稳定。
  • 在没有真实干预时,显著性检验的假阳性率是否接近预期。

A/A/B 测试则是在正式实验中保留两个 A 组和一个 B 组。A1 与 A2 应该没有显著差异;如果 A1 和 A2 已经差异很大,A/B 的结论也要谨慎。

指标体系

主指标

主指标是实验决策的核心依据,一次实验最好只有一个主指标。比如:

  • 注册流程实验:注册完成率。
  • 推荐策略实验:点击率、观看时长或人均有效播放。
  • 付费页实验:支付转化率或收入。

主指标必须和实验目标一致。如果目标是提升长期留存,却只看短期点击率,就可能得到错误优化方向。

护栏指标

护栏指标用于防止局部优化伤害整体系统。常见护栏包括:

  • 留存、投诉、退款、卸载率。
  • 页面性能、崩溃率、加载时延。
  • 内容质量、风控命中、用户体验反馈。

实验结论不能只看主指标显著提升。如果主指标上升但护栏指标明显恶化,通常不能直接上线。

辅助指标

辅助指标用于解释机制,而不是替代主指标做决策。比如注册完成率提升后,可以继续观察各步骤漏斗、表单错误率和页面停留时间,帮助判断新方案为什么有效。

辅助指标越多,越容易出现偶然显著,因此它们更适合用于诊断和提出新假设。

最小可检测效应

最小可检测效应(Minimum Detectable Effect, MDE)是实验希望识别的最小业务变化。它应该来自业务判断,而不是事后根据结果倒推。

如果一个按钮文案预计只能带来 0.05% 的提升,但检测这个提升需要几千万样本,那么实验可能不值得做。反过来,如果只愿意检测 5% 的大提升,就可能错过稳定但更小的真实收益。

样本量、功效与实验时长

样本量不足是 A/B 测试最常见的问题之一。样本量太小会导致两个后果:

  • 真实有效的方案也可能检验不显著。
  • 显著结果往往高估真实效果,也就是所谓 winner’s curse。

设计实验时至少要明确三个量:

  • 显著性水平 α\alpha:常用 0.05,控制一类错误,即把无效方案误判为有效。
  • 功效 1β1-\beta:常用 0.8 或 0.9,控制二类错误,即真实有效但没有检出的风险。
  • 最小可检测效应 δ\delta:业务上值得检测的最小提升。

对于均值类指标,在两组方差接近、样本量相同的粗略情形下,每组样本量可以用下面的形式理解:

n2(z1α/2+z1β)2σ2δ2 n \approx \frac{2(z_{1-\alpha/2}+z_{1-\beta})^2\sigma^2}{\delta^2}

对于比例类指标,如果基准比例为 pp,希望检测提升 δ\delta,也可以近似理解为:

n2(z1α/2+z1β)2p(1p)δ2 n \approx \frac{2(z_{1-\alpha/2}+z_{1-\beta})^2p(1-p)}{\delta^2}

这些公式的重点不是手算,而是理解关系:波动越大、想检测的提升越小、功效要求越高,所需样本量就越大。

实验时长也不能只由样本量决定。很多产品指标存在星期效应、活动效应和新奇效应,实验至少应覆盖一个完整业务周期。过早停止实验会放大偶然波动,尤其是在每天反复看 p-value 时。

统计检验

均值类指标

如果指标是连续数值,比如人均停留时长、客单价、单用户收入,可以比较两组均值。

当样本量足够大、方差已知或可以稳定估计时,可以使用 z 检验;更多情况下使用两独立样本 t 检验。实际业务中还要注意长尾分布,收入、时长这类指标经常高度偏斜,均值容易被极端值影响。

比例类指标

如果指标是转化率、点击率、留存率这类比例,可以使用两比例 z 检验。每个用户是否转化可以看作 0/1 变量,组内均值就是比例。

比例类指标解释直观,但要注意实验单位。如果一个用户产生多次点击,却把每次点击都当独立样本,标准误会被低估,显著性也会被夸大。

列联表与卡方检验

如果数据组织成列联表,例如版本 A/B 与用户是否留存、是否购买、是否投诉等分类变量,可以使用卡方独立性检验。它检验的是两个分类变量之间是否独立。

样本过小时,卡方近似可能不稳定,需要考虑精确检验或合并稀疏类别。

复杂指标与 Bootstrap

有些指标不是简单均值或比例,比如用户生命周期价值、分位数、留存曲线面积、多个行为聚合后的复合分数。此时解析方差可能很难写。

一种实用方法是 bootstrap:以实验单位为抽样单位重复重采样,构造指标差异的经验分布,再估计置信区间。它不消除实验设计问题,但能让复杂统计量的误差估计更可操作。

常见风险

多重比较

如果同时看 50 个指标,即使所有方案都无效,也很可能有几个指标偶然显著。多重比较会提高假阳性率。

解决方式包括:提前声明主指标、控制指标数量、使用多重检验校正,或者把辅助指标只作为解释材料。

窥探数据与提前停止

每天看一次结果,显著就停,不显著就继续,这会破坏原本的显著性水平。因为你实际上进行了多次检验,只是没有承认这一点。

如果必须中途监控,应提前设计序贯检验、固定检查点或只监控护栏指标,不把随时出现的显著性当最终结论。

样本比例失衡

如果设计是 50/50 分流,但最终 A 组和 B 组样本量明显不匹配,需要先排查分流、埋点、过滤条件和数据回流,而不是直接分析结果。

样本比例失衡可能来自实验平台错误,也可能来自某个版本导致用户无法完成曝光或埋点上报。

季节性与外部事件

节假日、促销、版本发布、广告投放和突发事件都会改变流量结构。A/B 测试强调同时性,就是为了降低这些因素影响。但如果外部事件对两组影响不同,实验仍然会受污染。

干扰效应

有些实验不满足“一个用户的处理不会影响另一个用户”的假设。社交网络、市场撮合、推荐生态和广告竞价都可能存在干扰效应。

此时简单用户级随机分流可能不够,需要考虑聚类随机化、市场级实验或更复杂的因果推断设计。

显著但没有业务价值

样本量极大时,很小的差异也可能统计显著。但统计显著不等于值得上线。最终仍要看收益、风险、开发成本和长期影响。

决策与上线

一个实验可以大致形成几类结论:

  • 主指标显著提升,护栏指标稳定:可以灰度扩大,并继续监控。
  • 主指标不显著,但方向稳定且业务重要:考虑增加样本量、延长时间或重新设计实验。
  • 主指标显著下降或护栏恶化:回滚或停止实验。
  • 结果互相矛盾:先分析机制,不要只挑有利指标解释。

上线也不应该是实验结束后的瞬间动作。更稳妥的方式是逐步扩大流量,观察线上稳定性,并在关键实验上保留复验能力。A/B 测试给出的不是绝对真理,而是在特定样本、特定时间和特定实验设计下,对方案效果的统计证据。

相关理论位置

A/B 测试背后的主要统计知识包括双总体均值检验、比例检验、列联表卡方检验、假设检验的功效与最小样本量。实际使用时,实验设计质量通常比具体检验公式更重要;如果分流、指标和实验单位错了,后面的统计计算再精细也只能给出错误问题的精确答案。

  • Title: A/B Testing: Experiment Design, Sample Size, and Launch Decisions
  • Author: Hyacehila
  • Created at : 2025-04-14 07:32:28
  • Link: https://hyacehila.github.io//blog/2025/04/14/ab-testing-learning-notes/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments