paper2skills Playbook

Power Analysis and Sample Size Calculation for A/B Testing

Skill-Power-Analysis-Sample-Size · 02-A_B实验

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

1. 解决的问题

A/B测试需要多少样本才能检测出真实的效应?

2. 核心算法逻辑

核心问题:A/B测试需要多少样本才能检测出真实的效应?样本太少——检验力不足,假阴性率高(漏掉真实有效的改动);样本太多——浪费流量和时间,拖慢迭代速度。

3. 业务应用场景

业务问题:产品团队想测试新版首页布局对转化率的影响。预期转化率从2.0%提升到2.2%(相对提升10%),需要多少样本?实验要跑多久?

计算流程: 1. 确定参数: - 基准转化率 $p = 0.02$ - MDE = 0.002(绝对提升0.2个百分点) - $\alpha = 0.05$(双侧) - 功效 = 0.80 2. 计算样本量: - 每组需要约 39,000 用户 - 两组共 78,000 用户 3. 计算实验时长: - 日均活跃用户(DAU)= 50,000 - 实验分流50% → 每天进入实验 25,000 人 - 所需天数 = 78,000 / 25,000 ≈ 3.1 天

决策输出: - 实验设计:50/50分流,跑4天(含1天缓冲) - 若4天后结果不显著,不要急于下结论"无效"——可能是MDE设得太小

4. 输入数据要求

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

5. 输出结果

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

6. 业务价值 / ROI

  • 数据要求:只需要历史数据的基准值和标准差
  • 技术门槛:极低,公式直接计算
  • 主要挑战:与业务方沟通MDE的设定(需要平衡统计严谨性和业务实际)
  • 所有A/B测试的前提:没有功效分析的A/B测试是不完整的
  • 实施成本极低:公式计算,1天完成
  • 避免巨大浪费:90%的实验失败源于样本量不足,而非改动无效

7. 代码模板

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

"""
Power Analysis and Sample Size Calculation for A/B Testing
用于实验前的样本量规划和功效分析
"""

import numpy as np
from scipy import stats


def sample_size_continuous(mde, sigma, alpha=0.05, power=0.8, ratio=1.0):
    """
    连续型指标的样本量计算

    Args:
        mde: 最小可检测效应(绝对值)
        sigma: 标准差
        alpha: 显著性水平
        power: 统计功效
        ratio: 实验组/对照组样本量比
    """
    z_alpha = stats.norm.ppf(1 - alpha / 2)
    z_beta = stats.norm.ppf(power)

    n = ((1 + 1 / ratio) * sigma ** 2 * (z_alpha + z_beta) ** 2) / mde ** 2
    return int(np.ceil(n))


def sample_size_proportion(p, mde, alpha=0.05, power=0.8, ratio=1.0):
    """
    比例型指标(转化率)的样本量计算

    Args:
        p: 基准转化率
        mde: 最小可检测效应(绝对值)
        alpha: 显著性水平
        power: 统计功效
    """
    z_alpha = stats.norm.ppf(1 - alpha / 2)
    z_beta = stats.norm.ppf(power)

    p1 = p
    p2 = p + mde
    p_avg = (p1 + p2) / 2

    n = (2 * p_avg * (1 - p_avg) * (z_alpha + z_beta) ** 2) / mde ** 2
    return int(np.ceil(n))


def calculate_mde(n, sigma, alpha=0.05, power=0.8):
    """
    给定样本量,计算可检测的最小效应

    Args:
        n: 每组的样本量
        sigma: 标准差
        alpha: 显著性水平
        power: 统计功效
    """
    z_alpha = stats.norm.ppf(1 - alpha / 2)
    z_beta = stats.norm.ppf(power)

8. 论文来源

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