要识别样本污染,先不要看总访问量涨跌,而是确认同一批访客是否被稳定地分到同一版本。判断依据是分流标识与版本标识是否在会话内保持一致:如果同一访客在多次访问中反复切换版本,或者统计系统把不同版本的数据混进同一个口径,那么后续的对比就不成立,保留、改写还是退出这个实验,取决于污染是发生在分流环节还是统计环节。
样本污染通常有两个来源,处理方式完全不同。第一种是分流层污染:访客第一次进入时被分到A版,后续访问却因为缓存、跳转链路或标识丢失被重新分配,于是同一批人被两个版本各记录了一部分。第二种是统计层污染:分流本身没问题,但统计脚本、日志解析或报表口径把两个版本的会话合并统计,导致单个版本的数据里混入了另一版本的访客。
区分方法很直接:在分流标识上附加一个版本字段,并让它随每次请求一起写入日志。如果日志里同一标识出现多个版本,问题在分流层;如果日志里标识与版本一一对应,但报表里同一标识被算进两个版本,问题在统计层。这个动作的产出决定了下一步:分流层问题要改分配逻辑,统计层问题要改口径,两者不能混着修。
总量对比无法识别污染,因为两个版本的访问量此消彼长时,总量可能看起来平稳。更可靠的做法是抽查一批标识,逐个看它们在观察窗口内访问了哪些版本。假设把观察窗口设为七天,抽取最近七天内有两次以上访问的标识,统计每个标识涉及的版本数量。如果大量标识同时出现在两个版本,污染已经发生;如果绝大多数标识只对应一个版本,样本分配基本可信。
这里要注明假设:抽取比例和窗口长度会影响结论,样本太小时个别异常标识会被放大。因此不要只用一次抽查下结论,而应在不同日期重复同样的抽查动作。如果连续几次抽查都出现同样比例的跨版本标识,说明这是稳定存在的分配缺陷,而不是偶发噪声。
三种取舍各有适用条件,不必都选。
如果业务的关键前提已经变化,比如入口来源结构或访客构成与实验开始时不同,那么即使污染比例不高,旧窗口的结论也未必适用于新前提。这种情况下更接近退出而非保留。
这三类数据的口径不同,不能互相替代。第三方估算通常基于抽样和模型,搜索报告反映的是平台侧记录,站内统计反映的是你自己埋点和日志能捕捉到的部分。当三者对同一版本给出不一致的访问量时,先不要判断谁对谁错,而要检查它们各自统计的是哪一段链路。样本污染往往只在其中一类数据里明显,因为污染发生在埋点之后、报表之前。
一个实际动作是:选一个已知被分到单一版本的标识,分别在日志、站内报表和第三方估算里追踪它的记录。如果站内报表把它算进了两个版本,而日志显示它只访问了一个版本,那么污染在统计层,第三方估算的偏差则属于另一类口径问题,不应混为一谈。这个追踪结果直接决定你修的是埋点、报表逻辑还是分流逻辑。
修复分流或统计逻辑后,某个版本的访问量可能骤降甚至归零。这不能单独证明问题已经解决。合理解释至少有三种:原本混入的访客被正确剔除、统计口径变更导致历史对比断裂、或者修复动作本身引入了新的过滤条件。要区分它们,需要保留修复前后的原始日志片段,并确认同一批标识在新口径下的归属是否稳定。
只有当标识与版本的对应关系在修复后保持稳定,且这种稳定能重复观察到,才能认为样本污染已被控制。在此之前,任何基于访问量变化的结论都只是待验证的假设。