在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
相关产品推荐
相关产品推荐

