贝叶斯结构时间序列(BSTS)与 CausalImpact
1. 适用场景
当无法做随机实验,但有稳定历史序列与可用对照指标时,BSTS 是强有力的政策评估工具。
典型问题:某次投放/改版上线后,指标到底增加了多少。
2. 方法本质
步骤分两层:
- 在干预前区间拟合“正常世界”生成机制。
- 在干预后预测反事实路径,与真实值比较得到增量。
可写作:
$$ \tau_t = y_t^{obs} - y_t^{cf} $$
其中 $y_t^{cf}$ 是无干预时的后验预测。
3. Python 实现思路
import pandas as pd
from orbit.models import DLT
# y: 被解释指标, X: 对照变量
train = df.loc[:"2025-06-30"]
test = df.loc["2025-07-01":]
model = DLT(
response_col="y",
date_col="ds",
regressor_col=["x1", "x2", "x3"],
seasonality=7,
)
model.fit(train)
cf = model.predict(test) # 反事实预测
impact = test["y"].values - cf["prediction"].values
print(impact.mean())
4. 关键假设
- 干预后对照变量不受干预反向影响。
- 干预前关系在干预后可外推(结构稳定)。
- 无同步重大冲击与干预同向混杂。
5. 常见误区
- 把受干预影响的变量当作对照输入。
- 干预前窗口太短,先验主导后验。
- 只报平均影响,不报不确定区间。
BSTS 的优势是把“预测不确定性”显式纳入因果结论,非常适合业务决策沟通。