整理自我的早期方法笔记。公开版移除了业务背景、内部资料与真实数据,保留方法论,并修订了统计表述。文中图示为独立生成的模拟数据,不代表实际业务效果。
1. 为什么不能只看前后变化
产品功能或运营策略上线后,我们通常希望知道:指标变化中,有多少是这次干预带来的?如果能够合理地随机分组,A/B 实验通常是优先考虑的方案。但在一些整体上线、样本受限或存在体验约束的场景中,随机实验并不容易实施。
直接用“上线后减去上线前”,会把自然趋势、周期变化和同期外部事件一起算进去。我们真正需要比较的,是同一段时间内的实际表现,以及“如果没有这次干预,本来会发生什么”。后者就是反事实。
Causal Impact 通过贝叶斯结构时间序列模型(BSTS)构建这一反事实。它提供的是依赖识别假设和模型设定的效应估计,不是把一条相关性曲线自动变成因果证明。
Estimated effect(t) = Observed(t) - Counterfactual(t)
2. 先检查识别假设,再拟合模型
第一,控制序列不能被同一干预影响,也不能是干预产生的下游结果。控制序列在干预后的观测值,会参与反事实预测;如果它也被策略改变,就可能把真实效应吸收掉,或者制造一个并不存在的效果。
第二,干预前学到的目标指标与协变量之间的关系,应能合理延续到干预后。这不等于要求指标是一条平稳直线:趋势和季节性可以建模,但突发事件、统计口径变化或系统性结构变化,需要另外解释和处理。
第三,要排查同期共同干预、提前反应和外溢效应。若某个外部冲击只影响目标对象,而控制序列没有捕捉到它,模型可能把这个冲击误认成策略效果。拟合得好,只能提供诊断证据,不能证明这些假设全部成立。
3. 从候选序列到反事实预测
先明确目标指标、干预时点、训练窗口和评估窗口,再对齐时间粒度与统计口径,处理缺失值和异常值。窗口应覆盖有代表性的业务周期;“至少一个月”不是通用门槛,历史越长也不一定越好,因为关系可能已经发生变化。
筛选控制序列时,可以结合相关性、业务可比性和 DTW 等相似度方法,但相似不等于有效控制。筛选与预处理只能使用干预前信息,避免把干预后的结果泄漏进模型。DTW 可用于寻找候选序列,不应把真实日历错位后的数据直接当作同期协变量。
接着,将局部水平或趋势、适当的季节性项和控制序列纳入状态空间模型。标准化可以帮助建模,但不是人为把不同对象“拉成同一条曲线”;变换规则也应由训练期确定。
模型结构与推断算法是两个层次。原版 R CausalImpact 使用 MCMC;其他实现可能采用不同算法。HMC 是 MCMC 的一类,VI 则用可计算的分布近似后验分布,而不是近似先验。不能仅凭数据量或后验是否多峰,断言某一种算法一定更准确。
4. 如何判断模型是否值得信任
先看训练期残差是否存在持续偏移、明显异常或未解释的周期性。残差分布图和 Q-Q 图用于检查分布形态;ACF 用于观察残差的时序相关性。没有“残差绝对值小于 2 就通过”的通用规则,单个滞后项也不能独立确定季节周期。
比训练期贴合更重要的是历史留出验证:在干预发生前选一个虚拟干预点,只用更早的数据训练,再预测留出的区间。反复出现明显的“假效果”,说明模型或控制序列可能不足以支持当前结论。
还应改变合理范围内的训练窗口、控制序列和先验设定,观察方向与量级是否稳定。若结论对某一个对象或某一段时间高度敏感,应如实披露,而不是只保留最有利的一次结果。
5. 读懂三幅图和不确定性
第一幅图展示实际序列与反事实预测,用于理解两者何时开始分离。第二幅图展示逐期差值,回答影响在什么时候出现、是否持续。第三幅图累加干预后的差值,回答整个观察窗口内的总增量。
下面的图是独立生成的模拟示意:横轴使用相对天数,纵轴为虚构指标。基线由公式预先指定,没有拟合 CausalImpact 模型,也没有绘制后验区间;它仅用于说明三幅图之间的关系,不能用来证明模型准确或策略有效。
正式分析应同时报告平均或累计效应、相对效应及后验可信区间。点估计是否跨过零,不足以判断证据强弱;区间包含零,也不等于已经证明没有效果。累计效应的区间应从累计后验样本得到,不能简单累加每天区间的上下界。
软件输出的后验尾部概率,不应直接当成经典检验的 p 值来解释。即便显示为 0,也可能涉及取整或有限采样,不能据此宣称“绝不可能是随机波动”。所有这些量仍然以模型和识别假设为条件。

6. 从效应估计到决策
若目标是可加总的流量指标,可以结合一致口径的增量成本,计算单位增量效果成本。但存量、比例和人均指标通常不能直接按天累加;上面的模拟指数也不能直接代入业务成本计算。
当估计增量接近零、为负或区间跨过零时,成本比值可能极不稳定。此时应同时呈现效应区间和情景分析,而不是给出一个看似精确的钱效数字。统计证据、效果量级和实际投入,需要一起讨论。
评估长期效果时,应预先区分干预期间与结束后的观察窗口。累计曲线持续上升,不自动等于长期收益;干预结束后的差值,也可能受到其他变化影响。可以把持续性作为待检验的问题,但不能仅凭一条曲线断言留存机制已经得到验证。
Cost per incremental outcome = Incremental cost / Estimated incremental outcomes
7. 实践中的几个提醒
Causal Impact 的价值,是把反事实、控制序列和不确定性放进同一个分析框架。真正决定结论可信度的,往往不是曲线是否漂亮,而是控制序列是否合理、数据是否可比、同期是否存在其他解释,以及结论对设定是否稳健。
预测窗口延长时,不确定性可能扩大,但不是所有模型、每个时点都必然单调变差。需要用历史回测判断适用范围;也不要靠无限延长训练窗口来代替对结构变化的识别。
写结论时,把三个层次分开:观测到了什么、模型估计了什么、基于哪些假设可以作出因果解释。保留这个区分,比把一个显著性数字写得更醒目更重要。