Page QiView

贝叶斯结构时间序列(BSTS)与 CausalImpact

贝叶斯结构时间序列(BSTS)与 CausalImpact

1. 适用场景

当无法做随机实验,但有稳定历史序列与可用对照指标时,BSTS 是强有力的政策评估工具。
典型问题:某次投放/改版上线后,指标到底增加了多少。

2. 方法本质

步骤分两层:

  1. 在干预前区间拟合“正常世界”生成机制。
  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. 关键假设

  1. 干预后对照变量不受干预反向影响。
  2. 干预前关系在干预后可外推(结构稳定)。
  3. 无同步重大冲击与干预同向混杂。

5. 常见误区

  1. 把受干预影响的变量当作对照输入。
  2. 干预前窗口太短,先验主导后验。
  3. 只报平均影响,不报不确定区间。

BSTS 的优势是把“预测不确定性”显式纳入因果结论,非常适合业务决策沟通。