先给结论:识别样本污染,不能只看两组转化率差了多少,而要先证明“分流之后,两组人接触到的版本是否真的不同”。如果日志里同一访客ID先后命中A、B两个版本,或者分流规则在实验中途改过而旧Cookie仍被计入,那么这轮数据应视为污染,优先废弃或隔离,而不是继续用它做决策。下面用一个假设情境把判断过程串起来。
假设某站把注册按钮的文案做了A/B测试。A组为原版,B组为新版。上线三天后,B组转化率明显更高。此时运营想把B版全量。但技术同事发现,第二天下午调整过一次分流脚本,把原来按用户ID取模改成按会话随机。这个改动本身就值得警惕:同一个用户在旧规则下进入A组,在新规则下可能再次进入B组。
要做的是先别急着看转化率,而是去查这三类证据:
如果这三类证据里出现任意一类,转化率差异就不能直接归因于版本本身。
面对疑似污染,常见有两种取舍。第一种是立即停止实验、废弃全部数据、重新分流。第二种是保留数据,但把疑似污染样本剔除后再比较。两者都成立,区别在于污染范围能否被清晰界定。
如果污染发生在分流规则层面,比如规则中途改过、同ID跨组、入口不唯一,那么剔除样本往往不可靠,因为你无法确定被剔除的是否恰好是全部被污染的人。这种情况下,废弃本轮更稳妥,代价是损失三天数据和一次上线窗口。
如果污染只来自一个可识别的局部来源,比如某个活动页的旧链接会绕过分流,而该来源的流量可以从日志中按来源标记完整切分,那么可以先隔离这部分流量,再用剩余样本判断。代价是剩余样本量变小,结论的置信度下降,可能需要延长实验周期。
选择哪种,不取决于哪种听起来更严谨,而取决于你能否用日志把污染边界画出来。画不出来,就废弃;画得出来,才谈隔离。
要支撑“废弃”或“隔离”的决定,至少需要一条可核查的证据链。建议按下面顺序排查:
这四类证据里,只要分配日志和曝光日志对不上,就说明“分流”这件事本身没有按预期执行,此时任何转化率比较都失去意义。
具体动作是:在实验配置里固定分流键,并在服务端记录每次分配时的键值与组别,同时在前端曝光时回传同一个键值。上线后先跑一天,只检查分配与曝光的一致性,不急于看转化。
这个动作的结果会直接影响下一步:如果一致性接近全量匹配,说明分流可信,可以继续积累数据;如果出现明显不匹配,说明存在缓存、重复渲染或入口绕过,此时应暂停实验,先修分流链路,再重新开始。把这一步前置,比事后争论“数据能不能用”更省成本。
有些现象看起来像污染,其实另有合理解释,不能单凭一个指标就下结论。
这些情况都提示:不能用一个指标的异常直接证明污染存在。统计上的差异和相关,不能单独当作因果。要回到分流日志和曝光日志,确认“用户实际看到的是不是他被分配的那个版本”。
如果决定废弃本轮,下一步是修复分流链路并重新开始,同时把这次污染的时间范围和原因记录在实验档案里,避免下次重复。如果决定隔离,下一步是明确隔离规则、重新计算剩余样本,并在报告中注明样本范围和假设条件。
无论选哪种,都不要在污染未澄清的情况下直接全量上线。样本污染的核心风险不是数据不好看,而是它会让一个实际上无效甚至有害的版本被误判为有效。先确认分流可信,再谈转化率高低,这个顺序不能颠倒。