🎓 レベル:基礎 | 重要度:A(必須)
📎 前提:相関と因果の違い | 次に読む:識別の仮定 | 数理:確率変数(離散・連続)と期待値・分散(統計)・推定量の評価(MSE・フィッシャー情報量・クラメール・ラオの不等式)(統計)
要点(BLUF)
- 因果効果は 反事実(potential outcome) —「もし処置したら/しなかったらの結果」— の差で定義します。個体ごとの差 が 個体処置効果(ITE) です。
- 因果推論の根本問題:1個体については と の片方しか観測できない(処置したら しか見えない)。ITE は原理的に観測不能で、私たちが狙うのは平均 ATE = や処置群平均 ATT です。
- シミュレーションなら神の視点で両方を生成でき、真の ATE を計算できます。これを使って「処置の割り当てに偏りがあると素朴比較が ATE とも ATT ともズレる」を数値で示します。
1. 反事実で因果を定義する
「この薬を飲んだから治った」と言えるのは、「もし飲まなかったら治らなかった」場合です。因果は、実際に起きた事実と、起きなかった反事実(counterfactual)の比較として定義されます。
各個体 に対し2つの 潜在結果(potential outcomes) を考えます。
- … 個体 を処置したときの結果
- … 個体 を処置しなかったときの結果
個体処置効果(Individual Treatment Effect, ITE) は両者の差です。
実際に観測される結果 は、処置 に応じてどちらか一方が「現実化」したものです(一致性 consistency、識別の仮定)。
2. ATE と ATT:私たちが狙える量
は個体ごとに違ってよい(異質処置効果、異質処置効果とメタ学習器(S/T/X-learner))。母集団全体で平均したものが 平均処置効果(Average Treatment Effect, ATE) です。
処置を受けた人たちに限った平均が 処置群における平均処置効果(ATT) です。
両者は一致するとは限りません。「処置されやすい人ほど効果が大きい」なら になります。狙う推定対象(estimand)が ATE か ATT かを最初に決めるのが因果分析の作法です。
3. 因果推論の根本問題:片方しか見えない
決定的な困難は、 と の片方しか観測できないことです。処置した人の (処置しなかったらどうだったか)は永遠に欠測します。Holland (1986) はこれを 因果推論の根本問題(Fundamental Problem of Causal Inference) と呼びました。ITE は個体レベルでは決して観測できません。
シミュレーションの教育的な強みはここにあります。自分でデータを作るなら両方の潜在結果を生成でき、真の ATE が分かるのです。まず神の視点で全部作り、そのうち現実に見える「片方」を取り出してみます。
import numpy as np
import pandas as pd
# === シミュレーションの強み:両方の潜在結果 Y(1), Y(0) を「神の視点」で生成 ===
rng = np.random.default_rng(7)
n = 20000
# 個体の基礎変数 U(例:体力。高いほど結果も良い)
U = rng.normal(0, 1, size=n)
# 潜在結果:処置しなければ Y0、処置すれば Y1
noise0 = rng.normal(0, 1, size=n)
Y0 = 10.0 + 3.0 * U + noise0
ITE = 2.0 + 1.0 * U # 個体処置効果(U が高いほど効果大=異質)
Y1 = Y0 + ITE
ATE_true = ITE.mean() # 神の視点でだけ計算できる真の ATE
print(f"真の ATE = E[Y1 - Y0] = {ATE_true:.3f}\n")
# 処置選択:U が高い個体ほど処置されやすい(選択バイアスの種)
prob_treat = 1.0 / (1.0 + np.exp(-U))
X = rng.binomial(1, prob_treat)
# 現実に観測できるのは片方だけ(一致性 consistency: Y = X*Y1 + (1-X)*Y0)
Y_obs = np.where(X == 1, Y1, Y0)
# 先頭6個体だけ表で見る(反事実は本来「?」で観測不能)
table = pd.DataFrame({
"U": U[:6].round(2), "X": X[:6],
"Y0": Y0[:6].round(2), "Y1": Y1[:6].round(2),
"ITE=Y1-Y0": ITE[:6].round(2), "Y_obs": Y_obs[:6].round(2),
})
table["観測できた方"] = np.where(X[:6] == 1, "Y1", "Y0")
table["反事実(欠測)"] = np.where(X[:6] == 1, "Y0=?", "Y1=?")
print(table.to_string(index=False))
出力:
真の ATE = E[Y1 - Y0] = 1.994
U X Y0 Y1 ITE=Y1-Y0 Y_obs 観測できた方 反事実(欠測)
0.00 0 11.00 13.00 2.00 11.00 Y0 Y1=?
0.30 1 10.36 12.66 2.30 12.66 Y1 Y0=?
-0.27 1 8.95 10.68 1.73 10.68 Y1 Y0=?
-0.89 0 7.44 8.55 1.11 7.44 Y0 Y1=?
-0.45 1 8.72 10.26 1.55 10.26 Y1 Y0=?
-0.99 0 6.88 7.88 1.01 6.88 Y0 Y1=?
出力の意味:神の視点では各個体の が両方そろい、ITE も計算でき、真の ATE は です。しかし右2列が現実の制約を表します。 の人は だけが観測でき は「Y0=?」、 の人は逆。表の「?」列は永遠に埋まらない——これが根本問題です。私たちは欠測した反事実を、仮定と他人のデータで**埋め合わせ(識別)**するしかありません。
4. 処置選択に偏りがあると素朴比較は ATE を外す
観測できる素朴な平均差 を、真の ATE・ATT と並べてみます。同じ擬似データで、処置の割り当てを「 が高い人ほど受けやすい(選択あり)」場合と「完全ランダム」の場合で比べます。
import numpy as np
# === 選択バイアス:素朴比較は ATE とも ATT ともズレる。ランダム化だと ATE に一致 ===
rng = np.random.default_rng(7)
n = 20000
U = rng.normal(0, 1, size=n)
noise0 = rng.normal(0, 1, size=n)
Y0 = 10.0 + 3.0 * U + noise0
ITE = 2.0 + 1.0 * U
Y1 = Y0 + ITE
ATE_true = ITE.mean()
# (1) 選択ありの観察データ:U が高いほど処置されやすい
prob_treat = 1.0 / (1.0 + np.exp(-U))
X = rng.binomial(1, prob_treat)
Y_obs = np.where(X == 1, Y1, Y0)
naive_obs = Y_obs[X == 1].mean() - Y_obs[X == 0].mean()
ATT_true = ITE[X == 1].mean() # 処置群での真の平均効果
# (2) もし処置を完全ランダム化したら
X_rct = rng.binomial(1, 0.5, size=n)
Y_rct = np.where(X_rct == 1, Y1, Y0)
naive_rct = Y_rct[X_rct == 1].mean() - Y_rct[X_rct == 0].mean()
print(f"真の ATE = {ATE_true:.3f}")
print(f"真の ATT (処置群の効果) = {ATT_true:.3f}")
print(f"観察データの素朴比較 = {naive_obs:.3f} ← ATE とも ATT ともズレる")
print(f"ランダム化の素朴比較 = {naive_rct:.3f} ← ATE に一致")
出力:
真の ATE = 1.994
真の ATT (処置群の効果) = 2.415
観察データの素朴比較 = 4.923 ← ATE とも ATT ともズレる
ランダム化の素朴比較 = 2.005 ← ATE に一致
出力の意味:観察データの素朴比較 は、真の ATE()からも ATT()からも大きく上に外れました。素朴比較を分解すると
となり、第2項の 選択バイアス(処置群と対照群の「もともとの結果 の差」)が乗っています。ここでは が高い人ほど処置され、 が高いほど も高い(体力がある)ので、選択バイアスが正方向に効いて過大評価になりました。一方ランダム化すると処置は と独立になり、選択バイアスが消えて素朴比較 がそのまま ATE に一致します。これが「なぜ RCT が黄金律か」(なぜRCTが黄金律か)の数理的な理由です。
5. 仮定の直観的意味:欠測を埋める条件
素朴比較が ATE に一致する条件は、上の分解の選択バイアス項がゼロ、すなわち
「処置群と対照群が、処置しなかった世界では同じ平均結果を持つ」ことです。これは 交換可能性(exchangeability) の帰結で、ランダム化が保証します。観察データでは無条件には成り立たないので、交絡 を条件づけた 条件付き交換可能性 に弱め、 で調整して埋め合わせます(バックドア基準と識別・識別の仮定)。潜在結果という言葉があって初めて「何が欠測していて、どんな仮定で埋めるのか」を厳密に語れる——これが潜在結果モデルの効用です。
⚠️ よくある誤解・落とし穴
- 「ITE を推定したい」と思いがちだが、個体処置効果は原理的に観測不能。データから狙えるのは平均(ATE・ATT・条件付き平均 CATE)です。「この人に効くか」を当てたいときも、実際に推定するのは共変量で条件づけた平均 CATE です(異質処置効果とメタ学習器(S/T/X-learner))。
- ATE と ATT を混同しない。効果が異質なら両者は違います。RCT は(処置群=母集団の縮図なので)ATE と ATT が一致しますが、観察データでは区別が要ります。
- 「平均すれば反事実は要らない」ではない。 は「処置された人の観測結果の平均」であって (全員を処置した世界の平均)ではありません。両者が一致するには交換可能性が要ります。記号 と の違いが因果推論の文法の要です。
- 一致性(consistency)も仮定。「観測結果=割り当てられた処置の潜在結果」 は自明に見えて、処置に複数のバージョンがあると崩れます(識別の仮定 の SUTVA)。
関連ノート
- 第1章 因果推論の枠組み 目次
- 相関と因果の違い(前提・交絡と素朴比較の失敗)
- 識別の仮定(交換可能性・正値性・SUTVA・一致性)
- バックドア基準と識別(条件付き交換可能性を満たす調整集合)
- なぜRCTが黄金律か(ランダム化が選択バイアスを消す)
- 確率変数(離散・連続)と期待値・分散(統計・期待値の定義)
- 推定量の評価(MSE・フィッシャー情報量・クラメール・ラオの不等式)(統計・バイアスと一致性)
- 処置効果・繰り返し測定(統計・処置効果の指標)
- 因果推論テキスト 全体目次