You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在CausalImpact中使用自定义bsts模型:对照组的模型定位疑问

嘿,我来给你把这个问题掰扯明白——当你在CausalImpact里用自定义bsts模型时,对照组的定位其实非常清晰:它们是用来预测测试组目标指标(也就是你的sessions)的预测变量。核心逻辑是先构建一个「反事实模型」:用干预前的测试组数据(因变量)+同期对照组数据(自变量)训练模型,以此预测「如果没有干预,测试组的sessions会是什么走势」,再和实际干预后的sessions对比得到因果影响。

具体步骤&代码示例

假设你的时间序列数据是这样的:

  • 测试组:y(要分析的sessions,作为因变量)
  • 对照组:x1、x2(比如其他类似渠道的sessions,作为自变量)
  • 明确划分了干预前和干预后阶段

1. 先构建自定义bsts模型

# 加载依赖包
library(bsts)
library(CausalImpact)

# 假设df是你的时间序列数据集,包含y、x1、x2和时间索引
# 定义干预前/后时间段(示例:前100个时间点是干预前,后50个是干预后)
pre_period <- c(1, 100)
post_period <- c(101, 150)

# 核心公式:用对照组x1、x2来预测测试组y
model_formula <- y ~ x1 + x2

# 训练bsts模型(仅用干预前的数据)
bsts_model <- bsts(
  formula = model_formula,
  data = df[pre_period[1]:pre_period[2], ],
  niter = 1000, # 迭代次数可根据数据规模调整
  # 可选:加入时间趋势项,让模型捕捉整体增长/下降规律
  state.specification = AddLocalLinearTrend(list(), df$y[pre_period[1]:pre_period[2]]),
  expected.model.size = 2 # 可选:控制变量选择的稀疏性,避免过拟合
)

2. 将自定义模型传入CausalImpact

# 创建CausalImpact分析对象
impact <- CausalImpact(
  data = df,
  pre.period = pre_period,
  post.period = post_period,
  model = bsts_model # 这里直接传入我们自定义的bsts模型
)

# 查看分析结果
summary(impact)
plot(impact) # 可视化反事实预测与实际值的差异
关键细节提醒
  • 对照组的核心作用:帮模型学习测试组的波动规律。比如如果对照组是和测试组高度相关的渠道,模型会掌握「当对照组x1上涨时,测试组y通常也会上涨」的关联,从而在干预后精准预测出无干预情况下的y走势。
  • 模型可扩展性:你可以根据业务场景调整bsts的参数,比如加入季节项(AddSeasonal)处理周期性波动,或者自相关项(AddAutoAr)捕捉序列自身的相关性,只要公式里保留对照组变量即可。
  • 数据对齐:必须保证对照组和测试组的时间序列严格对齐,每个时间点都有对应的y、x1、x2值,否则模型会报错。
直观场景举例

假设你要衡量某营销活动对官网测试组sessions的影响,对照组选同公司的APP sessions、社交媒体引流sessions。你的bsts模型就会用APP和社交媒体的sessions来预测官网sessions——干预前模型学会三者的关联,干预后用APP和社交媒体的实际数据,预测出官网「本该有的」sessions,再和实际sessions对比,就能算出营销活动带来的增量。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:03:44