CausalImpact
Claude Code.icon
DIDは「介入群」と「対照群」の前後差をさらに引き算することで効果を測ります。ただしDIDが成り立つには 平行トレンド仮定(介入がなければ両群は同じtrendで動いたはず)が必要です。 問題は2つ:
対照群を自分で選ばないといけない(どの地域・店舗を比較対象にするか、恣意性が残る)
平行トレンド仮定が現実には怪しいことが多い
CausalImpactのアイデア
Googleが開発したRパッケージ(中身は ベイズ構造時系列モデル / BSTS)で、発想はこうです。
介入がなかったら、介入群はどう推移していたか?(=反実仮想 counterfactual)を、時系列モデルで予測して作り出す。そして実際の値との差を効果とみなす。 code:_
実測値 ──────────────● ← 介入後、実際に観測された値
╱
介入時点│
━━━━━━━━━━━━━━━━━━│┄┄┄┄┄┄┄┄ ← 予測した「介入がなかった世界」
│ ↑
│ この差分が「効果」
←── 学習期間 ──→ │←── 評価期間 ──→
どうやって反実仮想を作るか
ポイントは 共変量(コントロール系列)の使い方 です。
介入の影響を受けていない関連系列(他地域の売上、検索数など)を複数用意する
介入前の期間で「介入群 ≒ これら共変量の組み合わせ」という関係を学習する
その関係を介入後に延長して、「もし介入がなければこうなっていたはず」の線を引く
DIDが対照群を1つ(または手動で)選ぶのに対し、CausalImpactは 複数系列を重み付けで合成して仮想的な対照群を自動で作る イメージです。
table:_
DID CausalImpact
反実仮想の作り方 対照群の前後差 時系列モデルで予測
必要な前提 平行トレンド 共変量が介入の影響を受けていない
トレンド・季節性 扱いにくい モデルに組み込める
不確実性 点推定中心 ベイズで信頼区間が自然に出る
使う上での注意点(ここがエッセンス)
1. 共変量が介入の影響を受けていないこと が生命線。影響を受けた系列を入れると効果が薄まる/歪む
2. 介入前に 十分な長さの安定した履歴 が必要
3. 「うまく予測できている=因果がある」ではない。あくまで前提が正しいときに因果と解釈できる