假设你是城市交通指挥中心的总指挥,面前的大屏上,密密麻麻的车辆在城市路网中流动。为了验证一条新修的立交桥匝道是否真的能缓解拥堵,你不会全体车辆直接试用,而是会做一个聪明又理性的动作:让一部分车辆继续走老路,另一部分车辆驶入新匝道,然后在同一段时间里比较两条路的平均通行时长。这个动作,就是一次在线实验;而支撑你完成这个动作的整套系统,就是在线实验平台。 不过,真实城市远比这个比喻复杂:同一辆车可能同时被多个改造项目选中,老路、新路、辅道的车流可能互相干扰。你必须建立统一导流岗亭、立交分层、稳定车牌识别等机制,才能让实验结论可信。这正是本篇文章要讲的核心——大型互联网公司如何为“同时进行的上千个实验”设计一套科学的流量分配架构,让每个实验都拿到干净、独立的样本,从而在数据治理与 MLOps 的链条上做出可靠决策。
学完本文,你将掌握在线实验平台的架构设计与流量分配方法论,理解分层正交、一致性哈希、样本量评估与 CUPED 等核心机制,能结合 MLOps 与数据治理场景评估实验设计,为算法决策提供可信依据。
可视化演示
动态演示在线实验平台架构设计的核心机制,通过基础/核心/应用/扩展四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
在线实验平台架构设计:在线实验 在线实验平台整体架构与核心模块 流量分配引擎与一致哈希分流机制 核心机制可视化 在线实验平台架构设计整体架构与关键组件
平台架构总览
城市交通指挥中心里,大屏上无数车辆汇成流动的车河。指挥员眼前的每一个道路改造,都像一次“道路手术”:为了让新铺的柏油路被客观评价,他就把车辆分成两股,一股继续走老路、一股走新路,最后对比两股车流的平均耗时。这个动作,就叫一个在线实验。
互联网平台的“新路”可能是首页改版、推荐算法换新、价格策略调整。科学验证需要实验,而实验需要先回答三个问题:让哪些用户进来?进来后分到哪个组?最后怎么算结果?对应到系统里,就是接入、分流、分析三件事。而承载这三件事的系统,就是在线实验平台。
在线实验平台通常由四层组成。接入层负责接收用户请求并把 user_id 传给分流器;分流器按实验配置把用户切进不同实验组;实验层承载具体业务逻辑;数据层通过埋点把行为事件落到数仓,再交给分析引擎计算显著性。这层“从埋点到报表”的数据链路,正是数据可信层的职责——保证流量标签和行为数据可信,分析结果才敢用于决策。
指挥中心要先画好“哪些车走哪条路”的流量地图,实验平台则用配置中心定义这个地图。地图下发后,导流岗亭(分流器)才开始工作——下一节,我们看看它怎么认车。
- 全量流量平台在某段时间内进入实验分流的全部用户,相当于所有被观察的车辆。
- 实验流量比例实验配置的 traffic_ratio,表示只有这么多比例的用户会进入本实验。
- 实验组比例实验内部再把流量按 treat_ratio 分出一部分作为实验组,通常是一半。
- 结果三项相乘得到最终进入实验桶的用户数,控制台按这个数去划桶。
流量分配原理
立交桥入口处,岗亭里有一面巨大的分格墙,墙上有一万个小格子。每来一辆车,收费员盯着车牌号心算几秒,就把车引向“实验车道”或“常规车道”。奇怪的是:同一辆车,今天来、明天来,都被引去同一个格子。收费员不是抽签,也不是看心情,他靠的是一套固定的心算规则。
这个“心算”在系统里叫哈希函数(hash)。它把 user_id 这样的长标识,映射成一个落在 0~9999 之间的整数。这一万个整数就是一万个桶(bucket)。配置实验时,实验管理员说“给我 20% 流量”,分流器就把 0~1999 号桶划给这个实验,其余 2000~9999 号桶里的用户与本次实验无关。
实际分流时会引入 salt(盐值)。同一个 user_id 在不同实验使用不同 salt,得到的桶号看起来完全不同,这正是不同实验能互不干扰使用同一批用户的前提。流量分配的核心运算可以概括为“桶比较”:先算出用户命中的桶号,再和配置阈值比较,决定他进入实验组还是对照组。
岗亭的“心算规则”是死的、稳定的,管理员改的只是“划多少桶给实验”,所以流量调整就像在分格墙上挪一道栅栏,简单又可解释。不过,要理解为什么不同实验互不打架,还需要看盐值背后的“一致性”秘密。
- 哈希函数把任意长度的 user_id 压缩成一个“看起来随机”的整数,这是分桶的第一步。
- 取模对 10000 取余,保证桶号永远落在 0 到 9999,对应墙上一万个格子。
- 阈值比较流量比例 r 映射成阈值 r×10000,例如 20% 对应 2000。
- 分组判定若桶号小于阈值,用户进入实验组;否则进入对照组。
一致性哈希
高架桥上有一个枢纽站,车辆在此进入不同匝道。枢纽站从不抓阄,它用的规则是:车牌号加上当天的计划编号,通过固定算法算出出口。同一天内,车牌号不变,出口就永远不变。哪怕车辆来回跑十趟,都在同一条匝道进、同一条匝道出。
实验平台里的“固定算法”就是一致性哈希。一致性不是指“均匀映射”这么简单,而是指:当同一个用户反复请求时,只要实验配置没有变化,他每次都会被分到同一个实验组。这一特性对追踪用户长期转化至关重要——如果用户第一次请求在实验组、第二次请求跑到对照组,实验组里积累的点击、购买行为就不完整,指标计算必然失真。
生产的实现会在哈希前把 user_id 与 salt 拼接,salt 是实验或层级的唯一编号。一致性哈希有三个关键性质:确定性(相同输入必然相同输出)、均匀性(输出近似均匀分布)、盐变性(换一个 salt,输出彻底改变)。第三个性质直接支撑了分层正交的可行性——让不同层共享同一个用户时,分配结果互不相关。
枢纽站的规则让同一辆车的路径永远可预测,实验平台的一致性哈希则让同一个用户永远待在同一实验组。有了这个基础,多个实验才能“叠”在同一个用户身上互不干扰——这正是下一节分层正交的出发点。
- 分组函数分流器内部把 user_id 与 salt 拼接后执行哈希,得到该次请求的组别。
- 两个时刻t₁ 与 t₂ 代表同一个用户的任意两次访问,标识本身没有改变。
- 稳定命中等式成立意味着多次请求结果恒定,这是长期转化指标可计算的前提。
分层与正交
立交桥把两条方向的车流叠在不同高度:上层跑快速路,下层跑辅道。一辆出租车同时出现在两层并不奇怪,因为“被上层摄像头识别”和“行驶在下层道路”是两件事。聪明的立交设计,让这两件事互不干扰、同时发生。
实验平台把流量按业务方向切分成若干层(Layer)。推荐方向一层、搜索方向一层、定价方向一层。同一个用户可以同时进入推荐层的某个实验和搜索层的某个实验,因为在两层中,他得到的“待遇”由各自独立的随机化决定。两层之间互不挤占流量、互不影响结论,这个性质叫做正交。
正交靠“每层独立随机化”实现:每一层使用独立 salt,用户在该层内的哈希结果均匀分布。由于层与层之间的哈希近似独立,用户进入推荐层实验 A 的概率与进入搜索层实验 B 的概率相乘,就得到同时进入两个实验的概率。更重要的是,每层都能拥有全量流量,实现了流量复用——不同业务不用互相抢 10% 的流量名额,而是各自在整条道路上做自己的实验。
立交桥之所以高效,是因为每一层都拥有全量车流且互不占用。工程上也要严格控制:同一层内不能并行多个未互斥的实验,否则同一用户可能被两个实验同时“改造”,造成干扰。接下来要回答一个问题:既然同一个用户能参与多个实验,那“一个用户”到底该怎么定义?
- 单层概率P(A) 表示用户进入推荐层实验 A 的概率,它等于该实验分配的流量比例。
- 另一层概率P(B) 表示用户进入搜索层实验 B 的概率,它同样由该层配置决定。
- 独立乘积两层正交时,同时命中两实验的概率等于两个概率的乘积;若实测明显不等,说明两层存在干扰。
实验单元划分
统计路口通行时间时,如果一辆车的前轮和后轮被分别计时,同一个人的转弯时间会被拆成两半,数据必然乱成一团。所以指挥中心的规则是“一辆车只记一次”。实验平台也有同样的规则:一个随机单元只能属于一个组。
随机单元(randomization unit)是流量分配的原子单位。最常见的单元是用户(user_id)。以 user_id 为单元,意味着同一个用户无论访问多少次、换几个设备,永远落在同一个实验组里。这在分析转化率、留存率等身份级指标时尤为重要,因为用户的行为必须被完整归属于某一个组,不能被拆开。
有的场景会考虑 device_id 或 session_id 作为单元,例如纯客户端 UI 实验。但单元越细,越容易把同一个真实用户的多次行为分散到两侧,导致实验组被“稀释”——效果被污染。业界经验是优先选用户级单元;若必须使用设备级,就要在分析时做身份归因,并警惕同一用户多设备造成的交叉影响。每个用户都是独立的“车”,不要让他变成两个“车轮”。
“一辆车只记一次”保证了每个单元的行为数据完整。单元的大小决定了实验能观测到的灵敏度——用户太少看不清楚差异,用户太多又浪费流量。那么,多少用户才够?这就到了样本量评估的地盘。
- 随机单元Yᵢ 代表第 i 个用户(或设备)最终被分配到的组别。
- 实验组概率进入实验组的概率等于流量比例 p,例如 10% 流量则 p=0.1。
- 对照组概率其余 1-p 概率的用户自然落在对照组。
样本量评估
修一座新桥前,工程师要算清楚:要观测到早晚高峰平均车速提升 5%,需要统计多少辆车才不会被随机波动骗到?如果只记录十辆车,一辆车踩个刹车就可能让均值完全变样。观测的车太少,真实的提升会被淹没在噪声里。
这个“观测多少车”对应实验中的样本量。样本量不足,跑完一周也得不到显著结论;样本量过大,则浪费宝贵流量、拖长实验周期。行业用功效分析(power analysis)在实验上线前估算最小样本量,确保实验有足够的灵敏度捕获目标效果。
样本量由四个关键量决定:显著性水平 α(通常 0.05)、统计功效 1-β(通常 0.8)、指标方差 σ²、最小可检测提升 δ(也叫 MDE)。公式右侧每一项都对应一个直觉:要求越严格、噪声越大、想捕捉的效果越小,需要的样本就越多。
就像修桥要预留安全富余,样本量评估为实验准备了“能看清差异的观测长度”。不过,即使样本量算够了,指标本身的波动仍然可能太大。有没有办法不增加流量,就让实验更灵敏?CUPED 提供了一种借历史数据的巧劲。
- 显著性分位点z_{1-α/2} 与假阳性上限有关,α=0.05 时约为 1.96,对应 95% 置信度。
- 功效分位点z_{1-β} 与检验灵敏度有关,功效 0.8 时约为 0.84。
- 方差合计2σ² 是实验组与对照组两组波动之和,波动越大越难看清楚差异。
- 最小提升δ² 是希望捕捉到的最小效果的平方;提升越小,需要样本越多。
方差削减与护栏
早高峰测速时,指挥中心发现当天恰好有半程马拉松占道,数据乱跳。聪明的做法是:用过去两周同一时段的平均车速做基准线,把今天的实测值减去“预测偏差”,剩下的波动就小多了。这个思路,正是 CUPED 的核心。
CUPED(Controlled-experiment Using Pre-Experiment Data,使用实验前数据的对照实验)是业界最常用的方差削减技术。它在实验上线前,用用户的历史指标(如历史点击率)作为协变量 X,对实验期的指标 Y 做线性校正,把与 X 相关的噪声剥掉,从而让实验组与对照组的差异更容易被检测出来。
CUPED 的估计量由两部分组成:实验期指标均值减去“历史偏差的加权”。权重 θ 是协变量 X 与结果 Y 的协方差除以 X 的方差,它刻画了历史表现与当前表现的关联强度。关联越强,削减的噪声越多,实验灵敏度越高;如果 X 与 Y 几乎不相关,则 θ 接近 0,CUPED 也就没什么效果。
实验平台还需要“防护罩”机制:指标抖动阈值、实时监控看板、自动熔断回滚。这些类比交通护栏与限速带——实验不是放开跑就完事,而是边跑边守着安全线。方差削减让实验更灵敏,护栏让推全更安全,两者一起支撑可靠的在线决策。
- 当前估计\bar{Y} 是实验期指标样本均值,例如实验组的平均点击率。
- 历史偏差\bar{X}-E[X] 表示这批用户历史表现与整体均值的差距。
- 回归系数θ 是协方差与方差之比,衡量 X 对 Y 的预测能力。
- 校正结果从当前均值中减去加权历史偏差,得到方差更小的估计量。
AI 应用场景
推荐算法灰度上线
阶段:模型上线与评估(MLOps 生命周期)
解决的问题:新推荐模型直接全量上线风险极高,一旦效果劣化会影响所有用户。传统做法是离线评测一通过就上线,无法捕捉线上真实交互变化。实验平台通过分层流量分配,把新模型仅暴露给一小部分用户,线上 A/B 对照出真实效果后再决定是否推全。
具体案例:某内容平台准备将推荐模型 v2 上线,通过统一分流器把 20% 流量分配给实验组,对照组保留 v1,观察点击率、人均时长、留存率三个核心指标。两周后实验组点击率提升 1.2%,且无显著负向指标,平台才逐步把流量扩大到 50% 直至全量。
跨部门实验流量治理
阶段:数据治理与数据可信层
解决的问题:营销、推荐、搜索多个团队各自发实验,如果都从同一个流量池里随意切分,用户会被多个实验重复命中,结论互相污染。统一分流器配合分层正交架构,让每个业务拥有自己的层,各层独立随机化、互不挤占,从源头治理实验流量。
具体案例:某电商平台原来每个业务各切 10% 流量,结果营销实验和推荐实验在 1% 的用户身上重叠,两边的效果指标都出现异常。改造为八层正交架构后,每个业务在各自层内使用全量 100% 流量,重叠问题消失,实验评审效率提升三倍。
实验风险熔断与监控
阶段:实验上线监控与异常处理
解决的问题:实验上线后若出现严重负面指标(如投诉率飙升、核心转化骤降),人工发现往往滞后。通过防护罩机制设定护栏阈值,实时监控核心指标,一旦越过红线立即自动暂停实验并回滚配置。
具体案例:某金融 App 测试新的弹窗策略,实验上线两小时后投诉率超过护栏阈值 2 倍,平台自动暂停实验组流量,并把 70% 用户立刻切回对照组,避免负面体验扩散。故障复盘后,团队将弹窗样式调整,重新以小流量验证。
Python 演示
import mathimport random def consistent_hash(user_id, salt, buckets=10000): # 模拟一致性哈希: 相同输入永远得到相同桶号 h = 7 s = "{}:{}".format(user_id, salt) for ch in s: h = (h * 31 + ord(ch)) % 100003 return h % buckets class Experiment: # 在线实验平台的单个实验, 负责流量分配与统计 def __init__(self, name, traffic_ratio, treat_ratio, control_conv, treat_conv): self.name = name self.traffic_ratio = traffic_ratio self.treat_ratio = treat_ratio self.control_conv = control_conv self.treat_conv = treat_conv self.control_cnt = 0 self.treat_cnt = 0 self.control_ok = 0 self.treat_ok = 0 def assign(self, user_id): # 先判断用户是否进入本实验流量池 hit = consistent_hash(user_id, self.name + ":traffic") if hit >= self.traffic_ratio * 10000: return # 再在实验内部按 treat_ratio 分到实验组或对照组 g = consistent_hash(user_id, self.name + ":group") if g < self.treat_ratio * 10000: self.treat_cnt += 1 if random.random() < self.treat_conv: self.treat_ok += 1 else: self.control_cnt += 1 if random.random() < self.control_conv: self.control_ok += 1 def summary(self): pa = self.control_ok / self.control_cnt if self.control_cnt else 0 pb = self.treat_ok / self.treat_cnt if self.treat_cnt else 0 se = math.sqrt(pa * (1 - pa) / self.control_cnt + pb * (1 - pb) / self.treat_cnt) if self.control_cnt and self.treat_cnt else 0 z = (pb - pa) / se if se else 0 return { "control_conv": pa, "treat_conv": pb, "uplift": (pb - pa) / pa if pa else 0, "z": z, "n": self.control_cnt + self.treat_cnt, } def main(): random.seed(42) exp = Experiment( name="首页改版实验", traffic_ratio=0.8, treat_ratio=0.5, control_conv=0.050, treat_conv=0.055, ) for uid in range(1, 20001): exp.assign(uid) r = exp.summary() print("进入实验的用户数: {:,}".format(r["n"])) print("对照组转化率: {:.4f}".format(r["control_conv"])) print("实验组转化率: {:.4f}".format(r["treat_conv"])) print("相对提升: {:.2f}%".format(r["uplift"] * 100)) print("z 统计量: {:.3f}".format(r["z"])) print("结论:", "差异显著, 可推全" if abs(r["z"]) > 1.96 else "差异不显著, 继续观察") if __name__ == "__main__": main()
def consistent_hash(user_id, salt, buckets=10000):一致性哈希函数,相同 user_id + salt 永远返回同一个桶号。s = "{}:{}".format(user_id, salt)把用户标识与盐值拼接,保证不同实验使用不同随机序列。if hit >= self.traffic_ratio * 10000:流量占比由阈值决定,超过阈值的用户不进入实验。g = consistent_hash(user_id, self.name + ":group")实验内部再次哈希,完成实验组与对照组的正交划分。if random.random() < self.treat_conv:模拟实验组用户的真实转化行为,转化率由配置决定。z = (pb - pa) / se if se else 0计算 z 统计量,判断两组差异是否显著。
常见误区
误区用户一进平台就随机打标,想给哪个实验用就抽多少,感觉很方便。既然都是随机分组,为什么还要分层?
正解大量实验同时在跑,如果不分层,实验 A 和实验 B 会把同一个用户拉扯到不同组里,结论互相污染。平台必须用“分层 + 独立盐值”让不同实验各取所需,而不是把流量池搅成一锅粥。
为何常见:小团队实验少时看不到冲突,确实能运转;实验一多,层内互斥和跨层正交的问题立刻暴露。
误区多跑几天、多进点用户,结果肯定更可信,没必要做功效分析。反正实验时长都是产品定的。
正解样本量直接影响实验周期与流量成本;实验一直不显著,就一直占着流量,拖慢其他实验。提前计算最小样本量,才能确定最短可用的实验时长,快速做出推全或弃用的决策。
为何常见:直觉上 n 越大越好,忽略了“时间成本”和“流量成本”这两只看不见的手。
误区CUPED 用实验前的数据替换实验中的数据,这样就不用等新数据了,实验当天就能出结论。
正解CUPED 的估计量是 \bar{Y} - θ(\bar{X}-E[X]),只是用历史数据当协变量来“去噪”,最终还是以实验期数据为主体。如果 X 与 Y 相关性低,削减效果很有限,并不能缩短实验周期。
为何常见:名字里有“pre-experiment data”,容易让人误以为是直接用旧数据代替新数据。
误区用 device_id 做随机单元,样本切得更碎,单元数量更多,统计功效应该更强,结果也更精细。
正解若同一用户拥有手机、平板、网页三个设备,三个设备各自独立随机后可能落在不同组,用户被“切成两半”,转化、留存等身份级指标都会被污染。实验单元必须与分析单元保持一致,用户级指标必须用 user_id。
为何常见:只看到“粒度小 = 样本多”,忽视了“单元一致性”这一隐藏前提。
面试题
Q1. 在线实验中最常用的流量分配随机单元是哪一项?
- A.后端服务节点
- B.用户ID编号← 正确答案
- C.数据库记录行
- D.前端组件对象
答案:B。实验平台以“人头”为单位开展流量分配,因为转化、留存等指标都跟着用户走。后端节点、数据库记录、前端组件都不能代表真实的人,只有 user_id 能跨设备关联同一用户。就像立交桥只给“整车”发通行证,不让车轮单独过桥。
Q2. 统一分流器在实验平台中的核心职责是什么?
- A.按实验配置分流用户到各实验组← 正确答案
- B.把流量平分给所有后端服务实例
- C.实时生成实验效果分析报表
- D.自动修复线上系统运行故障
答案:A。分流器相当于交通指挥中心的导流岗亭,它根据 user_id、salt 和实验配置计算用户进入哪个实验的哪个组。负载均衡属于基础设施调度,报表是分析引擎的职责,故障修复更与实验分流无关。
Q3. 实验平台中“salt(盐值)”的主要作用是什么?
- A.让不同实验使用互不干扰的随机序列← 正确答案
- B.加密用户的登录密码和敏感信息
- C.给每次用户请求打上时间戳标记
- D.压缩实验日志的存储占用空间
答案:A。盐值拼接进哈希计算,使同一 user_id 在不同实验得到不同桶号,从而让两个实验分别随机化、互不干扰。这是分层正交的底层实现,与密码加密、时间戳、压缩存储都没有关系。它就像立交桥上不同层的路线编码,让同一辆车在每一层走完全不同的道。
Q4. 一致性哈希保证的核心性质是哪一项?
- A.同一用户反复请求稳定进入同一实验组← 正确答案
- B.不同用户必定进入完全不同的实验组
- C.实验流量比例可以超过百分之一百
- D.所有实验共享同一个分层流量池
答案:A。一致性哈希强调“确定性”:相同 user_id 加相同 salt,每次请求算出的桶号都一致,所以同一用户稳定在同一组。B 不成立,不同用户可能落入同一组;C 违反流量约束;D 分层共享没问题,但如果共享同一层又互斥,需要额外保护。
Q5. 分层正交实验中,同一用户进入推荐层实验 A 与搜索层实验 B 的概率应满足哪种关系?
- A.P(A∩B)=P(A)+P(B)
- B.P(A∩B)=P(A)×P(B)← 正确答案
- C.P(A∩B)=P(A)-P(B)
- D.P(A∩B)=P(A)÷P(B)
答案:B。两层独立随机化时,同时进入两个实验的概率等于各自概率的乘积。加法是“互斥事件”的关系,减法和除法没有概率含义。就像立交桥上、下层同时通车,两件事同时发生的概率就是各自发生率的乘积。
Q6. CUPED 方差削减最终是用什么指标进行实验判断的?
- A.直接使用实验前的历史数据平均值
- B.经协变量偏差校正后的实验期估计值← 正确答案
- C.对照组指标直接外推到全量总体的结果
- D.用户对实验版本的主观评分结果
答案:B。CUPED 的估计量是实验期均值减去加权历史偏差,它没有直接替换数据,而是借助历史协变量降低噪声。历史数据平均值本身不包含实验效果,外推和主观评分更不是 CUPED 的做法。
Q7. 功效分析中,其他条件不变,只把最小可检测提升 δ 从 2% 改到 1%,所需样本量会怎样变化?
- A.大小保持不变
- B.变为原来的两倍
- C.变为原来的四倍← 正确答案
- D.变为原来的一半
答案:C。样本量公式中 δ 以平方形式出现在分母,δ 减半后 δ² 变为原来的四分之一,所需样本量因此变为原来的四倍。这就像要用游标卡尺测更细的差异,就必须测量更多物件才能稳定分辨。
Q8. 哪些情况容易造成在线实验间互相污染?
- A.两个实验共用同一层且未做互斥保护← 正确答案
- B.不同层使用不同盐值分别做哈希分配
- C.同一用户的多个设备被不同设备ID分到不同组← 正确答案
- D.实验单元统一采用 user_id 进行稳定分配
答案:AC。A 中同层未互斥时,用户可能同时进入两个实验,效果无法归因;C 中用户跨设备被切分,身份级指标被污染。B 和 D 都是防止污染的正确做法,相当于立交桥的分层隔离与车牌统一识别。
Q9. 在线实验平台中,以下哪些属于核心组件?
- A.实验配置中心← 正确答案
- B.统一分流器← 正确答案
- C.埋点与数据管道← 正确答案
- D.数据库索引优化器
答案:ABC。配置中心声明实验与参数,分流器执行用户分桶,埋点与数据管道把行为事件送到数仓,三者构成实验闭环的骨架。数据库索引优化器与实验平台无关,它属于底层存储性能调优范畴。
Q10. 关于样本量评估公式,以下说法正确的有哪些?
- A.指标方差越大,所需样本量越大← 正确答案
- B.想捕捉的提升效果越小,所需样本量越大← 正确答案
- C.显著性水平要求越高,所需样本量越大← 正确答案
- D.统计功效要求越高,所需样本量越大← 正确答案
答案:ABCD。公式 n=2σ²(z₁₋α/₂+z₁₋β)²/δ² 中,σ² 位于分子,δ² 位于分母,z 分位数随显著性提高与功效提高而增大,所以四项全部正确。这就像把测量精度的每个旋钮都拧得更严,需要的观测自然更多。