问题出现得很突然,日志倒是留得挺全。新模型灰度 20%,一周后对比转化率提升了 3.2%,业务准备全量。复盘发现灰度组大多是本周新注册用户,对照组里混了四成老用户,两组下单频次本来就不同。把同期同渠道的用户拉出来重算,提升只剩 0.4%。
刚开始盯着「转化口径按当天活跃算,两组活跃分布差别很大」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。分流只按用户 id 取模,没有按注册时间分层。另一种情况是对照组包含了灰度开启前的历史流量。
另外,没有做显著性检验,3.2% 落在置信区间内。
第一件事是按注册时间与渠道拆开两组样本
python -c "import json,collections;print(collections.Counter(json.loads(l)['cohort'] for l in open('exp.jsonl')))"
只保留同一时间窗内的同期用户重算
python -c "print('same-week cohort only')"
然后用卡方检验判断差异是否显著
python -c "from scipy.stats import chi2_contingency;print(chi2_contingency([[320,680],[300,700]])[1])"
末了按渠道分别出对比表
python -c "print('lift by channel')"
改完先别撤,确认这几项。同期同渠道对比下两组差异的 p 值大于 0.05,真实提升在 0.5% 以内,结论改成继续观察。
这里还有个坑。灰度对比最容易忽略样本构成,流量结构一变指标差异就可能是辛普森悖论,先分层再谈提升。这类问题最好一次改到位,反复小改反而容易把原因搅混。
