1. 题目
新引导页进行 A/B 测试。按用户类型拆分后,实验组在新用户和回访用户两个分层的转化率都高于对照组;把两层合并后,实验组总体转化率却更低。产品负责人要求当天决定是否全量发布。
请构造一个具体的计数例子说明这种反转如何发生,并给出从原始分母、随机化平衡、分层估计量到异质性检验的分析流程。最后说明在什么证据下应全量发布、按分层发布、暂停实验或继续收集数据。
2. 约束与澄清
- 这是随机分配的在线实验;“新用户”和“回访用户”是实验开始前已定义的分层变量。
- 主要指标是每位用户在固定窗口内是否完成核心转化,不能把同一用户的多次事件当成多个独立样本。
- 题目中的数字是练习数据,不代表任何公司的真实结果或上线阈值。
- 必须先确认两组观察窗口、去重规则、曝光定义和数据水位一致;分层变量若受实验影响,不能直接按它切分因果效果。
3. 核心推理:分母构成可以制造反转
总体转化率是各分层转化率按样本量加权的结果。若两组的分层占比不同,即使实验组在每一层都更好,权重差异仍可能让总体结果反转。
一个极端但清晰的例子:高基线分层中,对照组为 990/1000 = 99%,实验组为 100/100 = 100%;低基线分层中,对照组为 1/100 = 1%,实验组为 20/1000 = 2%。实验组在两个分层都提高了 1 个百分点,但总体对照组为 991/1100 = 90.1%,实验组为 120/1100 = 10.9%。差异来自两组把大量样本分配到了不同基线分层,而非页面在任何一个分层中变差。
真实分析中,这么大的构成差异通常提示随机化、曝光、采样或时间窗口存在问题。它不是“总体平均永远错误”的证明;当分层比例由设计保证平衡,或者使用预先规定的标准化权重时,总体估计仍然可以代表目标人群的平均处理效果。
4. 诊断与参考伪代码
先按实验组、分层、转化标记汇总用户级分母和分子,再比较分层占比、效果和置信区间。不要先看一个漂亮的总体百分比,再为了寻找解释任意尝试十几个切片。
for arm in [control, treatment]:
for stratum in [new, returning]:
n[arm, stratum] = count_distinct_users(arm, stratum)
y[arm, stratum] = count_users_with_conversion(arm, stratum)
rate[arm, stratum] = y[arm, stratum] / n[arm, stratum]
share[arm, stratum] = n[arm, stratum] / sum_s(n[arm, s])
check_exposure_and_assignment_balance()
check_missing_users_duplicates_and_window()
report_stratum_effects_and_confidence_intervals()
weights = preregistered_target_population_shares()
standardized_effect = sum_s(weights[s] * (rate[treatment, s] - rate[control, s]))
test_arm_by_stratum_interaction()如果随机化前的分层变量可用,应在实验设计阶段按层随机或至少监控每层分配比例。分析计划中预先写下主要分层、目标人群权重、主要指标和停止规则,避免看见结果后选择最有利的切片。
5. 正确性、统计与上线决策
分层估计量把每层的处理效果放回同一目标人群权重,因此不会把样本构成差异误当成处理效果。权重必须来自实验前的业务人群定义或随机化设计,不能根据实验结果倒推。
还要检验处理组与分层变量的交互项,判断效果差异是否超过抽样误差。交互显著且方向稳定时,可以为新用户和回访用户采用不同发布策略;交互不显著时,应优先报告预注册的总体估计,而不是挑选最好的分层。
统计显著不等于值得发布。上线决策还要结合最小可接受效果、护栏指标、实验持续时间、样本量、延迟转化和数据完整性。若发现曝光漏记、跨组污染、随机化失衡或窗口尚未成熟,应暂停决策并修复数据,而不是用更多切片掩盖问题。
6. 追问与陷阱
- 分层变量何时会造成因果问题? 如果变量在曝光之后才产生,按它分层可能引入碰撞偏差;应改用曝光前变量或预先定义的机制分析。
- 为什么不能无限切片? 每尝试一个未预注册分层,就增加偶然发现显著结果的机会;需要控制多重比较,并把探索性结果标为假设。
- 总体比例差异一定是 Simpson 悖论吗? 不一定。先检查两组分母、曝光资格、时间窗口、去重和缺失,再确认每个分层方向确实相反。
- 实验组分层比例不同怎么办? 先调查随机化和流量路由;若目标人群权重已明确,可用预注册的标准化估计,但不能事后选择权重。
7. 参考资料
- Google for Developers 的 Good Data Analysis 与 Analysis traps 指南。
- Optimizely 对实验中 Simpson 悖论和分层结果的说明。
- 公开数据科学面试题中的 A/B 测试反转场景。
8. 面试评分点
能算清分母与权重
候选人应能用计数展示“每层都赢、总体却输”,并指出两组分层占比不同是必要线索。
能区分诊断与决策
应先检查随机化、曝光、窗口和数据质量,再讨论分层估计量、交互检验和上线规则。
能说清因果边界
应识别曝光后的分层变量、碰撞偏差和多重比较风险,避免把所有切片都当作独立结论。
能给出可执行方案
应提出按层随机、预注册权重、护栏指标和分层发布/继续实验的条件,而不是只说“看更多数据”。