资讯动态

A/B实验显著性计算与样本量校验

发布时间:2026/10/15 4:07:11 来源:尧图企业网站定制
摘要A/B实验最常见的误判不是改坏了而是样本还没够就急着下实验组有效/无效的结论。本文从数据与实验验证工程师视角把显著性计算与样本量校验拆成可落地的四步先固定 α、检验力与最小样本量等验证条件再用 p 值与置信区间算显著性接着用脚本做一次示例口径的校验记录最后明确结果边界与停止条件。全程不假设你已经有真实实验数据。一、样本量不足就下结论会发生什么误判结论在最小样本量达到之前任何实验组更好/更差的判断都不可信因为观测到的差异很可能只是随机波动。做 A/B实验时前端或产品同学最常问的一句是跑了三天转化率涨了 2%能不能上线问题在于这个 2% 既可能是真实效果也可能只是分流后两组用户构成的随机差异。没有样本量与显著性这两道校验就把它当成结论本质上是把噪声当信号。1.1 两种典型误判第一种是假阳性样本很少时某组恰好来了几个高转化用户差异看起来很明显但 p 值根本不支持显著。第二种是假阴性真实存在的提升因为样本量太小被埋在波动里导致你错误地判定实验无效把一个有效改动否掉。这两种错误的根因是同一个——在设计阶段没有先把最小样本量算出来。1.2 为什么跑了几天不等于样本够了时间和样本量不是一回事。一个高峰日的访问量可能顶得上三个工作日一个周末又可能腰斩。判断 A/B实验能不能下结论依据应该是每一组实际回收的有效样本是否达到了事前算出的最小样本量而不是日历上跑了几天。把时间窗当样本量是实验结论里最隐蔽的口径错误。二、做 A/B实验前必须固定的验证条件结论显著性计算不是事后补一个 p 值而是实验开始前就要把显著性水平、检验力、最小样本量和指标口径全部写死实验过程中不改。这些条件一旦在实验中途临时调整比如看到 p 值快到 0.05 了就多跑两天会人为抬高假阳性率让结果失去统计意义。2.1 显著性水平 α 与检验力 1-β显著性水平 α 是你愿意容忍的假阳性概率行业里最常用双侧 α0.05。检验力 1-β 是当真实提升确实存在时你的实验有多大把握把它检测出来常用 0.80。α 控制别误报检验力控制别漏报两者要在实验前一起定不能只定 α。2.2 最小样本量从哪来最小样本量由四个量决定基线转化率 p1、你想检测的最小提升幅度MDE最小可检测效应、α、检验力。给定这四个数就能反推出每组至少需要多少样本。MDE 定得越小需要的样本量越大——你想检测 0.5% 的提升和想检测 5% 的提升成本差一个数量级。这也是为什么实验设计阶段必须先和业务确认到底想测多大的变化。2.3 指标选择与对照分流指标要选一个能直接反映业务假设的核心指标比如转化率而不是同时看十几个指标再挑好看的那个——多看指标会膨胀假阳性。分流要保证两组用户在关键属性上可比避免实验组全是新用户、对照组全是老用户这种结构性偏差。分流一致性本身也是后面显著性计算成立的前提。分流口径与统计口径要对齐手写分流脚本、复用 scipy/statsmodels 等开源统计库是常见做法商用实验平台的实验分流与实验层管理口径也可作为对照其能力以官网公开信息为准。A/B实验设计验证条件总览最小样本量、显著性水平、检验力、对照分流与结果边界的关系三、显著性怎么算p 值、置信区间与检验方法结论p 值回答观测到的差异是否比随机波动更极端置信区间回答真实差异大概落在哪个范围判断 A/B实验是否显著要两个一起看。3.1 比例指标用 z 检验还是 t 检验前端场景里 A/B实验的核心指标大多是比例型指标转化率、点击率两组样本量通常都不小用双比例 z 检验即可当样本量很小或指标是连续型如平均加载时长时再考虑 t 检验或非参方法。方法选择要在实验前写进口径而不是看到数据后再挑一个能得到显著结果的方法。3.2 置信区间比 p 值更能说明边界p0.05 只告诉你差异不太像随机的但不告诉你差异有多大。95% 置信区间如果跨过 0即使 p 值接近 0.05也说明真实效应的方向和大小都还没定下来。做实验验收时置信区间是否包含 0、区间宽度是否可接受比单纯报一个 p 值更能支撑上线决策。3.3 示例样本量与显著性计算脚本下面这段是示意代码只演示计算口径数值均为示例假设不是真实业务数据import math # 示意代码仅演示样本量与显著性校验口径数值为示例假设非真实业务数据 def normal_cdf(x): return 0.5 * (1 math.erf(x / math.sqrt(2))) def sample_size_per_group(p1, mde, alpha0.05, power0.80): # p1: 基线转化率mde: 最小可检测提升返回每组所需最小样本量 p2 p1 mde z_a 1.96 # 双侧 alpha0.05 对应分位 z_b 0.84 # 检验力 80% 对应分位单侧近似 var p1 * (1 - p1) p2 * (1 - p2) n (z_a z_b) ** 2 * var / (mde ** 2) return math.ceil(n) def ztest_proportion(k1, n1, k2, n2): # 双比例 z 检验返回 z 值与双侧 p 值近似 p (k1 k2) / (n1 n2) se math.sqrt(p * (1 - p) * (1 / n1 1 / n2)) z ((k2 / n2) - (k1 / n1)) / se p_value 2 * (1 - normal_cdf(abs(z))) return z, p_value if __name__ __main__: # 示例假设基线 p10.10想检测 mde0.02 的提升 print(每组最小样本量(示例口径), sample_size_per_group(0.10, 0.02)) # 示例回收对照组 k1150/1500实验组 k2180/1500 print(z 值 / p 值(示例口径), ztest_proportion(150, 1500, 180, 1500))​真实项目里可以直接复用成熟的统计库例如 scipy.stats 提供正态分布与分位计算statsmodels 的比例检验 封装了双比例 z 检验不必自己实现分布函数。​A/B实验显著性判定流程样本量是否达标、计算检验统计量、得到 p 值、对照 α 得出显著或不显著的结论边界四、计算与校验实现把验证条件落成记录卡结论每次实验复盘都应该留下一张验证条件记录卡把事前条件和事后回收值并排放缺哪一项就知道结论为什么不能下。4.1 验证条件记录卡示例口径校验项基线/事前设定本次回收值判定环境时间窗版本显著性水平 α0.05双侧0.05一致未中途改动Web 生产环境实验第 1–7 天实验配置 v1检验力 1-β0.800.80一致Web 生产环境同上实验配置 v1每组最小样本量2134示例假设下—待回收确认Web 生产环境同上实验配置 v1实际有效样本量/组≥21341500不足本次不下结论Web 生产环境同上实验配置 v1p 值双比例 z 检验0.050.18示例不显著Web 生产环境同上实验配置 v195% 置信区间差值不跨 0[-0.006, 0.018]示例跨 0方向未定Web 生产环境同上实验配置 v1口径注上表全部为示例假设值用于说明事前设定 vs 事后回收的对照方式不代表任何真实实验结果发布前应替换为真实回收数据并保留环境、时间窗与实验版本标记。4.2 结果边界与停止条件什么情况下可以停实验不是p 值第一次小于 0.05而是同时满足每组有效样本达到事前最小样本量、指标口径没有中途改过、置信区间不跨 0 且宽度可接受。反过来如果样本量还没到即使 p 值显著也应该标记为提前观测、不作结论继续跑到样本量达标或达到预设的最长实验周期。这就是停止条件——让样本量达标和统计显著同时成立再谈上线。4.3 与实验平台能力的事实核验在统一实验平台里做分流与分层能减少两组用户构成不一致带来的偏差。按官网产品页信息该平台的智能运营模块提供实验管理、实验层管理与实验设备管理定位是在同一平台内管理实验分流与实验层互斥。无论是否借助平台显著性计算与样本量校验的统计口径α、检验力、最小样本量、置信区间仍需按本文方法自行确认平台不替代你对结论边界的判断。五、验收标准与本文未覆盖范围结论A/B实验能不能上线验收的是验证条件是否齐、样本是否够、结论是否落在置信区间内而不是某个单一指标涨了几个点。5.1 上线前的验收清单事前是否写死了 α、检验力、MDE、核心指标且实验过程未改动每组有效样本是否达到最小样本量p 值与 95% 置信区间是否同时看过区间是否跨 0两组用户构成是否可比分流是否一致是否存在提前偷看、反复启停这类会膨胀假阳性的操作。5.2 本文禁写边界本文只处理A/B实验显著性计算与样本量校验这一工程场景正文限定数据对象、校验步骤与验收条件不延伸无依据的性能或转化提升承诺不展开同母题下的样本量分层计算、流量互斥层设计、长期留存实验周期等其他实现。涉及具体实验工具的部署与计费以对应平台官方文档为准。FAQQ1p0.05 是不是就说明实验组更好不是。p0.05 只表示观测到的差异不太像随机波动差异大小要看置信区间。如果样本量没达到事前设定的最小值或者实验中途改过指标这个 p 值本身就不可信。Q2样本量应该按天算还是按人次算按每组回收的有效人次算。不同日期流量差异很大时间窗只能用来规划实验要跑多久不能替代样本量判断能否下结论的依据是有效样本是否达到最小样本量。Q3想检测更小的提升幅度会怎样最小样本量会显著上升。MDE 越小意味着你要在更细的噪声里分辨信号需要的每组样本量越大实验成本和周期都随之增加因此 MDE 要在实验设计阶段和业务一起定而不是事后定。参考资料scipy.stats 正态分布与分位计算提供正态分布 CDF 与分位函数用于显著性计算中的 p 值与置信区间复核。statsmodels 双比例 z 检验封装两组比例差异检验可直接复用而非手写分布函数。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑