You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

A/B Test样本量计算咨询:非参数检验方法能否降低所需样本量?

A/B Test样本量计算咨询:非参数检验方法能否降低所需样本量?

嗨,我来帮你理清楚这个问题~

首先明确说结论:非参数检验通常不会帮你减少所需的样本量,反而可能需要更大的样本规模才能达到同样的统计效力。原因很简单:非参数方法不依赖于数据的分布假设(比如正态分布),这确实让它适用范围更广,但也牺牲了参数检验利用已知分布特性带来的效率。要达到相同的power(80%)和显著性水平(5%),非参数检验需要更多数据来弥补这种“效率损失”。

回到你的具体场景:你做的是比例型A/B测试,基线转化率80%,要检测5%的绝对提升(到85%)。你用statsmodels的参数检验样本量计算得到每组903,这个结果是合理的——因为当样本量足够大时,二项分布(转化数据的分布)可以很好地近似正态分布,这时候用基于正态近似的参数检验(Z检验)是最高效的方法,能给出最小的样本量要求。

如果换成非参数方法,比如Fisher精确检验或者Mann-Whitney U检验,在这个场景下需要的样本量只会比903更多。比如Fisher精确检验,它完全不依赖分布近似,靠枚举所有可能的结果来计算显著性,这在样本量小的时候准确,但要达到80%的power,需要的样本量会远大于参数方法的结果。

那如果确实想减少样本量,有没有其他思路?可以考虑调整几个关键参数(但要承担对应的统计风险):

  • 降低统计效力:比如把power从0.8降到0.75,这样漏检真实效应的概率从20%升到25%,但样本量会减少。你可以修改代码里的power参数来计算具体数值。
  • 提高显著性水平:比如把alpha从0.05升到0.1,这样误判为显著的概率从5%升到10%,也能减少样本量。
  • 采用不等比例分组:比如让实验组样本量是对照组的2倍(设置ratio=2),总样本量会有所减少,但实验组的样本量会增加,对照组的会减少,整体优化幅度有限。

另外再核对下你的代码逻辑,这段代码是完全正确的,它针对两独立样本比例的Z检验计算最小样本量,结果903是参数方法下的最优解:

import statsmodels.stats.api as sms

# Proportions
p1 = 0.80
p2 = 0.85

# Calculate effect size using the proportions
effect_size = sms.proportion_effectsize(p1, p2)

# Desired power and significance level
power = 0.80
alpha = 0.05

# Calculate the required sample size per group
sample_size_per_group = sms.NormalIndPower().solve_power(effect_size, power=power, alpha=alpha, ratio=1)

print(f"Required sample size per group: {sample_size_per_group}")

备注:内容来源于stack exchange,提问作者bakun

火山引擎 最新活动