先别急着推翻总体结论,也别急着相信分组结论。出现辛普森式反转时,查分母的顺序是:确认每个分组的“分子事件”和“分母机会”是否来自同一批访问、同一时间窗、同一过滤规则;再检查分组变量本身是否与流量来源或设备强绑定。多数反转不是算法变了,而是分母被换掉了。
两种情况的处理方式完全不同。分母错配指各分组用了不同的统计口径,比如总体用“全部请求”做分母,分组却只保留“成功返回的请求”;真实反转指口径一致,但分组变量确实改变了结果方向。区分依据有三条:
三条里只要有一条不成立,就先按分母错配处理,不要下“某分组性能更差”的结论。
适用条件是你能拿到原始事件表,且各分组的时间戳、请求标识、过滤标记都在。实施动作是把总体和分组都重算到同一分母上:
如果方向消失,说明原来的反转来自口径差异,下一步应把统一口径写成检测模板,而不是继续分析“为什么某分组更慢”。如果方向仍在,才进入选择二。
适用条件是你只有汇总报表,拿不到原始事件,无法重建分母。此时不要横向比较各分组的绝对值,改为比较“同一分母结构下的配比”。例如把各分组的请求按设备类型拆成相同比例,再比较加权后的指标。假设某分组移动端占比八成、另一分组只占两成,直接比平均值必然失真;按同一设备配比加权后,差异会收窄或消失。这个动作的结果决定下一步:配比后差异消失,说明原反转由结构差异造成;配比后差异仍大,才值得继续追查该分组本身的实现。
第一类是缓存命中。命中缓存的请求耗时极短,若某分组缓存命中率天然更高,它的分母里混入了大量“快样本”,平均值被拉低。第二类是重试与预加载。一次用户访问可能产生多次请求,若分组间重试率不同,分母被重复计数。第三类是失败请求的去留。超时请求若在总体里计入分母、在分组里被剔除,分组看起来更快,但这只是把最慢的样本藏起来了。处理办法是:在分母定义里显式写明这三类请求算不算、按什么规则算,并让总体和分组共用同一份定义。
当多个角色对同一事实理解不同时,不要争论结论,先各自写出自己的分母定义:时间范围、过滤条件、去重字段、失败请求处理方式。把四栏并排列出,差异通常立刻可见。然后约定一个最小可核对动作:抽取同一时间窗的原始记录,按四栏逐一核对,记录每一步剩多少条。若某一步骤后数量骤降,那个步骤就是反转的来源。这个动作不承诺查出根因,但能把“谁对谁错”转成“哪一步口径不同”,后续修复才有落点。
需要提醒的是,请求量或某项统计归零,并不能单独证明口径已经正确;它也可能来自采集中断、过滤过严或时间窗错位。判断口径是否可靠,要看它能否同时解释总体和分组的数量关系,而不是看某个数字是否好看。