paper2skills Playbook

Sequential AB Testing(序列化 A/B 检验)

Skill-Sequential-AB-Testing · 02-A_B实验

experimentforecasting供应链与补货WF-A 智能补货WF-G Listing内容优化
年化 ROI15-30 万元
实现难度⭐⭐☆☆☆
业务优先级⭐⭐⭐☆☆
业务视角
适用角色运营负责人 / 产品经理 · 广告优化师 · 选品负责人
适用平台Amazon Listing · TikTok 广告素材 · DTC 落地页
什么情况下用改了主图/标题/价格,不确定销量变化是改动导致的还是流量波动;两个方案团队各持己见,需要数据裁决
成功是什么样的每次改动都有 ≥95% 置信度的数据结论,好的改动快速全量,坏的及时止损
业务痛点
改了主图感觉好多了但不确定小范围测试结果好全量后没效果测试周期短结论不可靠

1. 解决的问题

传统固定样本量 A/B 需要等到收集满 N 个样本才分析。Sequential Testing 允许在实验过程中多次中期分析,一旦检测到显著差异即可提前停止(节省时间和样本)。用 $\alpha$-spending function 控制整体 Type I error:每次中期分析消耗一部分 $\alpha$ 预算。

2. 核心算法逻辑

传统固定样本量 A/B 需要等到收集满 N 个样本才分析。Sequential Testing 允许在实验过程中多次中期分析,一旦检测到显著差异即可提前停止(节省时间和样本)。用 $\alpha$spending function 控制整体 Type I error:每次中期分析消耗一部分 $\alpha$ 预算。

3. 业务应用场景

吸奶器详情页 A/B:预期需要 10,000 样本/组 × 14 天。Sequential 分析在 Day 7(7,200 样本)就检测到显著差异($p < 0.005$,OF 边界),实验提前 7 天结束。年节省实验等待时间 40%,加速迭代节奏。

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • ROI:加速实验迭代 40%,年化隐性 15-30 万元
  • 难度:⭐⭐☆☆☆ | 优先级:⭐⭐⭐☆☆

7. 代码模板

代码块数量:1 · 路径:未检测到

import numpy as np
from scipy.stats import norm

def obrien_fleming_boundary(n_looks: int, alpha: float = 0.05):
    """O'Brien-Fleming 序贯边界"""
    boundaries = []
    for k in range(1, n_looks + 1):
        t = k / n_looks  # information fraction
        z_bound = norm.ppf(1 - alpha/2) / np.sqrt(t)  # OF adjustment
        boundaries.append(z_bound)
    return boundaries

def sequential_test(data_streams, boundaries):
    for k, (a_data, b_data) in enumerate(data_streams):
        diff = np.mean(a_data) - np.mean(b_data)
        se = np.sqrt(np.var(a_data)/len(a_data) + np.var(b_data)/len(b_data))
        z = abs(diff) / max(se, 1e-6)
        if z > boundaries[k]:
            return {'stop': True, 'look': k+1, 'significant': True, 'z': z}
    return {'stop': False, 'significant': False}

np.random.seed(42)
streams = [((np.random.normal(100,15,1000*i), np.random.normal(105,15,1000*i))) for i in range(1,6)]
bounds = obrien_fleming_boundary(5, 0.05)
r = sequential_test(streams, bounds)
print(f"Sequential: stop={r['stop']}, look={r.get('look','?')}")
print("[✓] Sequential AB 测试通过")

8. 论文来源

未自动抽取;请查看原始 Skill 卡片。