因果を推定する ── 実験できないときの考え方
前章で見たように、A/B テストは因果推定の王道である。しかし現場では、実験できないケースのほうが多い。
- リリースが全ユーザーに即時展開される施策
- 外部イベント(キャンペーン、メディア露出、法改正)の影響
- 価格変更のように「片方だけ実施」が難しい施策
- 小規模プロダクトで n が足りない
- 過去のデータから後追いで評価したい
こうした状況で、観察データから因果に近づく技法が存在する。本章では厳密な数式ではなく、それぞれの技法がどういう状況で何を仮定しているかの直感を掘る。
観察データの根本的な限界
まず、前章の反実仮想の議論に戻る。
観察データで「機能 X を使ったユーザー vs 使わないユーザー」を比較すると:
機能 X 使用者:継続率 70%
非使用者:継続率 40%
→ 機能 X が 30pt 改善する!
ここに潜む罠:
❌ 機能 X を「使うような人」と「使わない人」は元々違う
❌ アクティブな人ほど機能を色々試す
❌ 熱心なユーザーほど継続する
❌ 機能 X の効果 + 選択バイアスが混ざっている
つまり:機能 X のおかげか、元々アクティブだったかを分離できない
これが選択バイアス(Selection Bias)。観察データから因果を読むときの最大の敵である。
観察データから因果に近づく道のり:
❌ 素朴に比較する
→ 選択バイアス、交絡要因で歪む
✅ 何らかの「自然な実験」的状況を探す
✅ 何らかの「統計的な補正」を入れる
✅ どちらもできないなら、限界を認めて慎重に解釈する
技法 ①:差分の差分法(Difference-in-Differences, DiD)
最も汎用性が高く、現場で使える。
直感
「施策を受けた群」と「受けなかった群」の
施策前後での変化幅を比較する。
| 施策前 施策後 変化
|--------------------------------
| 介入群 100 130 +30
| 対照群 100 110 +10
|--------------------------------
| DiD +30 - +10 = +20
→ 施策の純粋な効果は +20(と推定)
なぜ効くか
施策前に既に差があっても、施策後の変化幅の差を見ることで「施策に起因する変化」を取り出せる。
仮定:パラレルトレンド(Parallel Trends)
DiD の核となる仮定:
「もし施策がなかったら、介入群と対照群は
平行に動いていたはず」
↓ この仮定が成立するとき、DiD は機能する
パラレルトレンドを確かめる
施策の「前」の期間で、両群がだいたい平行に動いていたかを確認する
✅ 施策前 3〜6 ヶ月で、介入群と対照群のトレンドが並行
→ パラレルトレンド成立の可能性高い、DiD 信頼できる
❌ 施策前から両群のトレンドが開き続けている
→ パラレルトレンド不成立、DiD は信用できない
ユースケース
✅ 地域・プラン別で段階的にリリースした機能の効果測定
介入:先に機能が入った地域、対照:後から入った地域
✅ 外部イベントの影響評価
介入:イベント対象者、対照:非対象者
✅ キャンペーン効果の推定
介入:キャンペーン対象、対照:非対象
典型的な失敗
⚠️ 「介入群と対照群がそもそも違いすぎる」
例:大企業と中小企業を比べて DiD
→ 施策前のトレンドが違う、パラレル仮定が壊れる
⚠️ 「施策と同時に別の変化が起きた」
例:施策リリースと同時に競合が値上げした
→ どちらの効果か分離できない
技法 ②:断続回帰デザイン(Regression Discontinuity, RDD)
「ある閾値の前後」で処遇が変わる設計がある場合に使える。
直感
例:点数 80 点以上に奨学金を出す制度
79 点の学生と 80 点の学生はほぼ同じ
でも 80 点の学生だけ奨学金を受ける
→ この閾値前後の卒業後の成績差を見ると
奨学金の効果が推定できる
プロダクト実務での例
例 1:「ユーザー登録から 30 日以上のユーザーに特典メール」
29 日目のユーザーと 31 日目のユーザーは似ている
→ 31 日目のユーザーの行動変化から、特典メールの効果を推定
例 2:「スコア上位 10% のユーザーに限定機能」
上位 10.1% と 9.9% のユーザーはほぼ同じ
→ 境界近傍で比較して効果推定
例 3:「ロイヤリティプログラムの Gold 会員(年間購入 10 万円以上)」
9.9 万円購入者と 10.1 万円購入者は似ている
→ Gold になったユーザーだけ行動が変わるか
仮定
RDD の核となる仮定:
閾値の「すぐ上」と「すぐ下」のユーザーは
処遇以外の点でほぼ同じ
✅ 成立しやすい条件:
- 閾値が行動で操作しにくい
- ユーザーが閾値を意識していない
- 閾値近傍で十分な n がある
❌ 成立しにくい条件:
- ユーザーが閾値を狙って行動を変える(sharpness)
- 閾値近傍の n が少ない
使える場面は限られるが、使えるときは強力
RDD が光るシナリオ:
- 既存の制度・ルールに閾値がある
- その閾値を動かせない理由がある
- 境界近傍に十分なユーザーがいる
実務的には DiD ほど汎用ではないが、
「閾値がある運用」では強力な武器になる
技法 ③:操作変数法(Instrumental Variables, IV)
もっと巧妙な道具。因果を直接測れないが、「因果の引き金」として使える別の変数がある場合に使う。
直感
知りたいこと:機能 X の利用が継続率を上げるか?
問題:利用するかどうかは自己選択(選択バイアス)
アイデア:
「機能 X の利用を外的に引き起こす」何かがないか?
例:「機能 X の認知度を高めるキャンペーンの対象地域」
→ キャンペーン対象は機能 X の利用率が高まる
→ 対象 vs 非対象の継続率を比較
→ キャンペーン地域の継続率差 ÷ 利用率の差 = 効果
プロダクトでの例
例 1:「アプリ内 tutorial の効果」
問題:tutorial を見るのは能動的な人に偏る
操作変数:「tutorial が表示される画面に到達したか」
→ 到達は人の属性より偶発的に近い
→ 到達 × 継続率の関係から、tutorial の効果を推定
例 2:「プレミアム機能の解約率への影響」
問題:プレミアムに入る人は元々継続的
操作変数:「プレミアム割引キャンペーンの有無」
→ キャンペーン期間のプレミアム加入は「割引」起因
→ その群の解約率を、そうでない群と比較
使いこなしは難しい
IV の「良い操作変数」の条件:
① 対象の行動(機能 X の利用)に影響する
② 結果(継続率)に「利用を通じてしか」影響しない
②の「排他性制約」を満たすかの判断が実務では困難
→ 高度な技法、専門家の助けが必要なことが多い
本書では存在だけ知っておけば十分。「IV が使えそう」と気付けるだけでも価値がある。
技法 ④:マッチング(Propensity Score Matching)
選択バイアスを「似た者同士で比較することで」減らす。
直感
機能 X 使用者(利用群)に似た「非使用者」を探す:
利用者 A:25歳、東京、プラン Pro、登録 6ヶ月
↓ 似た非使用者を探す
非使用者 Z:25歳、東京、プラン Pro、登録 6ヶ月
→ この A と Z で継続率を比較
→ 全ての利用者についてマッチを取り、差を集計
Propensity Score(傾向スコア)
「全属性 → 機能 X を使う確率」を予測モデルで推定し、その確率でマッチする。
手順:
① ロジスティック回帰などで「機能 X を使う確率」を推定
② 利用者と非利用者を、確率が近い者同士でペア化
③ ペアごとに結果を比較
限界
⚠️ 観測できない交絡要因はマッチでも消せない
例:「熱心さ」「意欲」のような内面的な要素
⚠️ 「似た者」の定義が難しい
どの変数でマッチするかで結果が変わる
⚠️ 「共通サポート」の問題
ある属性の組み合わせでは、片方の群にしか人がいない
→ 「実験よりは弱いが、素朴な比較よりはマシ」
技法 ⑤:コホート分析
時系列での群の追跡。因果推定というより、現象の分解に近い。
直感
「全体で継続率が下がった」
↓
どのコホート(登録月)が下がっているのか?
2026 年 1 月登録:継続率 60%
2026 年 2 月登録:継続率 55%
2026 年 3 月登録:継続率 40% ← ここで何かが起きた
→ 3 月に何が起きたかを調べる
コホート分析の役割
✅ 何が起きたかの「発見」
全体平均では見えない変化を見つける
✅ セグメント効果の分離(部分的な因果推定)
「3 月のコホートだけ悪い」→ 3 月にリリースしたものの疑い
⚠️ ただし、これは因果そのものではない
「3 月リリース機能のせい」と断定するには追加調査が必要
Ch.5 の Simpson パラドックスと接続
Ch.5 で見たように、全体の数字は個別コホートの真実を隠す
コホート分析は:
「全体の変化」を「コホート構成の変化」と「コホート内挙動の変化」に
分解する技法
→ どちらが主因かが見えるだけで、判断の質が大きく変わる
技法 ⑥:合成対照法(Synthetic Control)
比較的新しい技法。「対照群がない」状況で、人工的に作る。
直感
例:
ある都市で新機能をリリース(東京だけ)
比較対照:他の大都市(大阪、名古屋、福岡、札幌 ...)
東京の「もし新機能がなかったら」の軌跡を:
他都市の実データを重み付けして合成する
合成東京:大阪 × 0.3 + 名古屋 × 0.4 + 福岡 × 0.2 + ...
→ これを「もしなかったら東京」とする
→ 実際の東京との差が施策効果
ユースケース
✅ 地域単位、企業単位、チーム単位のロールアウト
1 単位だけ施策が入った場合
✅ マーケティングキャンペーンの地域効果測定
✅ 価格変更の地域実験
使える状況は限られる
前提:
- 対照候補が複数ある(都市なら他都市、企業なら他企業)
- 施策前のデータが十分長い(重みを学習する期間)
- 施策前のトレンドで合成が上手く当てはまる
技法の選び方
どの技法を使うかは状況次第。以下のフローで判断できる。
graph TD
A[因果を知りたい] --> B{ランダム割当で<br/>実験できる?}
B -->|Yes| C[A/B テスト(Ch.6)]
B -->|No| D{閾値を超えると<br/>処遇が変わる?}
D -->|Yes| E[RDD]
D -->|No| F{介入の前後 ×<br/>介入・対照群<br/>の 2x2 で比較可?}
F -->|Yes| G[DiD]
F -->|No| H{介入を引き起こす<br/>外的変数ある?}
H -->|Yes| I[IV]
H -->|No| J{1 単位だけ施策<br/>他の類似単位あり?}
J -->|Yes| K[合成対照法]
J -->|No| L{似た者マッチ<br/>で比較可能?}
L -->|Yes| M[Propensity Score Matching]
L -->|No| N[観察にとどめ<br/>限界を明示して解釈]
style C fill:#9f9,stroke:#333
style N fill:#fcc,stroke:#333
現場ではほとんどの場合、A/B テスト or DiD or コホート分析 + 解釈で回る。RDD・IV・合成対照は「使えるときに思い出す」レベルで十分。
「因果を語る」の倫理
最後に、本章全体を貫く大事な話。
断言の重さ
❌ 「機能 X のおかげで継続率が上がった」
→ 実験・DiD などなしに断言してはいけない
✅ 「機能 X を使ったユーザーは、使わなかったユーザーより継続率が高い。
ただし選択バイアスが排除できないため、機能 X の効果か
ユーザー特性の違いかは分離できない。」
長いが、こちらが誠実。
短く言いたいなら:
✅ 「機能 X と継続率に関連が見られる」
(関連 ≠ 因果)
不確実性の明示
分析結果を共有するときに添える言葉:
✅ 「この分析で言えるのは XX まで」
✅ 「これは相関であり、因果ではない」
✅ 「交絡要因 Y を排除できていない」
✅ 「本来なら A/B テストが必要だが、以下の理由でできない」
✅ 「この n ではこの効果量は検出できない」
こうした但し書きが、組織のデータリテラシーを底上げする
「知っていることの境界」を引く勇気
最も強いデータアナリスト:
分析できることと、できないことを正確に区別する
最も危ういデータアナリスト:
何でも因果で語って、分析の限界を隠す
前者は信頼を積む、後者は事故を生む
「実験できないときこそ、慎重に」
最後に強調しておくと、実験できない状況で因果を議論するときは、複数の技法で同じ方向の結果が出ることを確かめるのが重要である。
✅ 強い結論を出したいとき:
DiD で +20pt、Matching で +18pt、コホート分析でも同方向
→ 3 つの独立した技法が同じ方向に示唆
→ 信頼度が上がる
⚠️ 弱い結論しか出せないとき:
DiD では +20pt、Matching では -5pt、コホート分析ではノイズ
→ どれかが間違っている
→ 「効果の方向すら言えない」
本章のまとめ
✅ 観察データの敵は選択バイアス
素朴な比較は歪む
✅ 因果推定の主要な技法:
- A/B テスト:実験できるなら最強(Ch.6)
- DiD:前後 × 介入対照の 2x2 で推定。最も汎用
- RDD:閾値の前後で比較。限定的だが強力
- IV:因果の引き金として外的変数を使う。高度
- Matching:似た者同士で比較。観測不能な交絡には弱い
- コホート分析:現象の分解、因果そのものではない
- 合成対照法:「もし施策がなかったら」を合成
✅ 技法の選び方はフローで決める
実験可 → RDD → DiD → IV → 合成 → Matching → 観察
✅ 強い結論は複数技法で裏を取る
1 つの技法だけで因果を語らない
✅ 「因果を語る」の倫理:
断言の重さ、不確実性の明示、知っていることの境界
因果が(ある程度)推定できたら、最後に残るのは判断を下す段階である。次章では、データが揃った/揃っていない中で、続けるか・撤退するか・ピボットするかをどう決めるか ── 判断の論理を扱う。