0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

因果推論 Day 27/全30回 落とし穴チェックリスト、分析を出す前の15の問い

0
Last updated at Posted at 2026-09-11

この記事は、出た推定値を会議に出す前に、何をどの順で確かめるかを決める回です。因果の主張はデータからは検証できない仮定の上に立つので、「有意でした」だけでは因果効果と言い切れません。26 日分の道具を手法選定フローと 15 項目のチェックリストの 1 枚に畳み、悪い調整の事故を合成データで再現します。

登場人物

遠藤顧問: データ分析の社外顧問。答えを言わずに問いで返す/さくら: データアナリスト 1 年目。数字を出すのは速いが、相関を因果と読み違える

依頼の会話: 顧問が、これまでの分析を会議に出す前に点検したいと説明し、さくらに 1 枚のチェックリストを頼む。さくらの「手法ごとに書けばいい」という案に、顧問が「並べるのは手法の順ではなく、どの手法にも共通に効く落とし穴の順で」という観点を添える

冒頭の会話: さくら「推定値は 3.2 で、統計的に有意でした! 因果効果と言い切れます!」顧問「その 3.2 を言うために、データで確かめられない仮定をいくつ買った?」さくら「確かめたのは有意かどうか、だけです……」顧問「確かめたものと、信じたもの。分けて書けたら、会議に出せる」

冒頭の会話(翌日): 連載の数字を見返したさくらが「真値ゼロが +2.15 の有意な効果になっていた」と驚き、顧問の「対照群を取り違えたときは?」に「マッチングの回で -8,498 ドル」。顧問は「数字は間違っていても出る。だから出す前に、決まった順で問う」。それが今日の道具

1. 1 文で言うと

1 文で言うと

分析を出す前の総点検は、手法選定フローで道具を決め、設計・調整・推定・解釈の 15 項目で「確かめられるものを確かめ、確かめられないものを明示する」ことです。チェックリストは儀式ではなく「どの仮定を買ったかの申告」です。

  • 今日の数字: 無作為割付で 1.00 だった効果が、善意の調整 1 つで 0.00 に消えました。

1 枚まとめ: 問いは「出す前に、何をどの順で確かめるか」。答えは、確かめたものと信じたものを分けて申告すること。方法は、手法選定フローで道具を決め、15 項目を工程の順に当てる。仮定は、非交絡性や除外制約がデータから検証できないこと。確かめは、全部に丸が付いても因果の証明ではないこと。注意は、善意の調整 1 つで RCT の効果が 1.00 から 0.00 に消えること

2. 今日の問い

今日の問い

「推定値は3.2で、統計的に有意でした」。数字は出た。
この数字を会議に出す前に、何をどの順で確かめれば、胸を張って「因果効果」と言えるのか?

読み終えたら、15 項目のチェックリストが合格判定ではなく、買った仮定の申告になる理由を説明できます。

答えを先に言うと、「すべて確かめれば因果と言い切れる」ようなリストは存在しません。Day 6 の非交絡性も、Day 17 の除外制約も、Day 18 の平行トレンドも、データからは検証できないからです。だからこのチェックリストの目的は合格判定ではありません。自分がどの検証できない仮定を買ったのかを、自覚して申告できる状態を作ることです。飛行機の離陸前チェックが「翼は落ちない」を証明しないのと同じで、確かめられるものを確かめ、確かめられないものを明示する。それが因果推論の報告の作法です。

3.1 で道具の選び方、3.2 で 15 項目、4 で悪い調整の再現、5 で当てる順番を確かめます。前の回から使うのは次の 2 つです。

  • Day 6(非交絡性): 割付を決める変数をそろえれば比べてよい、という検証できない仮定
  • Day 11(d分離とバックドア): 調整してよい変数と悪い調整を、DAG から決める基準

3. 概念

先に、手元の道具との違いを置きます。A/B テストなら、無作為に分けた 2 群を比べれば因果効果になり、確かめる点は割付が無作為だったかに絞れます。回帰や予測モデルなら、手元の変数を入れて精度や有意性を見れば足ります。今日の場面は、出た推定値を因果効果として会議に出してよいかで、問われるのは、どの仮定を買ったかです。精度や有意性の数字は、その仮定が検証できないことまでは教えてくれません。そこで今日は、確かめる順番を決める道具を置きます。

3.1 手法選定フロー、まずどの道具かを決める

チェックリストの前に、そもそもどの道具を選ぶかです。分岐は3つしかありません。「処置を自分で割り付けられるか」「交絡をすべて観測できていると信じられるか」「信じられないなら、外生の割付の断片が転がっていないか」。この順で聞きます。

Fig 1: 手法選定フロー。題は「進むほど、買う仮定が増える」。① 処置を無作為に割り付けられるか。できるなら RCT(Day 4・5)、従わない人がいれば ITT(Day 21。LATE まで言うなら除外制約も買う)。できないなら次へ。② 交絡はすべて観測できたと信じるか。信じるなら調整で推定(Day 7・8・15・16)と、感度分析で耐性を数字に(Day 9)。信じないなら次へ。③ 外生の割付の断片はあるか。あるなら操作変数・回帰不連続・差分の差分・合成コントロール(Day 17・20・18・19)、媒介を観測できるならフロントドア(Day 13)。ないなら点推定は諦め、感度分析と境界で語る(Day 9)

このフローで大事なのは、矢印を進むたびに買う仮定が変わることです。左上の RCT は設計が仮定を保証してくれる世界、右下へ行くほど「検証できない何か」を信じる量が増えます。どの箱に着地したかは、どの仮定を買ったかの申告そのものです。

なお「誰に効くか」を問う異質効果の系譜(CATE・メタラーナー・Causal Forest・アップリフト、Day 22〜26)は、このフローで着地した識別戦略の上に乗る話です。識別が壊れていれば、どんな高級な学習器も壊れた効果を精密に推定するだけです。

3.2 チェックリスト、4 カテゴリ × 15 項目

この小節が今日の主役です。15 項目を工程の順に読み、各項目が「どの仮定を買ったかの申告」の問いになっていることを押さえます。

顧問の一言(3.2): 「チェックリストとは、一言でいうと「どの仮定を買ったかの申告書」です」。板書は、設計・調整・推定・解釈の 15 項目・破ると何が起きるかを実測で・1 番と 15 番は対になる

分析の工程順に、設計 → 調整 → 推定 → 解釈の4カテゴリに分けます。各項目の「破ると何が起きるか」は、ほぼすべて本連載で実際に数値で見せたものです。各項目の末尾に添えた該当 Day が総索引を兼ねます。先に全体を 1 枚で見ておきます。

Fig 2: チェックリストの全体像。題は「15 項目は、工程の順に 4 つの束で当てる」。設計(1〜4 番)はデータを見る前に決める。調整(5〜8 番)は何で条件付けるかを決める。推定(9〜12 番)は数字の出し方を点検する。解釈(13〜15 番)は報告の書き方を点検する。1 番で決めた推定対象を、15 番の射程で守れたか確かめる(1 番と 15 番は対)

設計(データを見る前に決める4項目)

  • 1. 推定対象(estimand)を1つ言えるか。ATE・ATT・CATE・LATE のどれの話か(該当 Day 2, 8, 21, 22)
    • 破ると: 手法ごとに違う量を答えているのに1つの「効果」として混ぜて報告する。LATE 2.07 と ATE 3.19 は同じデータの別の量
  • 2. RCT にできないか、部分的にでも実験を仕込めないか検討したか(該当 Day 4, 5)
    • 破ると: 実験できたはずの場面で、買わなくてよい仮定(非交絡性)を買う。RCT なら引き算がそのまま因果
  • 3. 処置の定義は1つか。SUTVA(干渉なし・処置のバージョン違いなし)は成り立つか(該当 Day 2, 8, 28)
    • 破ると: 「個体の処置効果」の定義自体が崩れる。隣へ効果が漏れる空間データが典型
  • 4. 割付メカニズムを言葉で説明できるか。誰が、なぜ処置を受けたのか(該当 Day 6)
    • 破ると: 交絡の当たりがつかず、調整のしようがない。自己選択を放置した素朴な引き算は 4.92(真値3.0)

調整(何で条件付けるかを決める4項目)

  • 5. 因果の仮定を DAG に描いて宣言したか。矢印の「無い」ところも仮定だと自覚しているか(該当 Day 10)
    • 破ると: 調整セット選びが勘と声の大きさで決まる。仮定が図になっていないと、そもそも議論も反証もできない
  • 6. 調整セットはバックドア基準を満たすか。中間変数・合流点・M字を入れていないか(該当 Day 11, 16)
    • 破ると: 中間変数で効果が 0.00 に消え、合流点で -0.75 に符号反転し、M字では真の効果ゼロが -0.40 の「効果」に化ける
  • 7. オーバーラップはあるか。傾向スコアが 0 や 1 に貼りついた領域はないか(該当 Day 6, 7, 8)
    • 破ると: 比較相手のいない領域を外挿で語る。IPW では最大重み 16.7(1人で16.7人分)のような裾が推定を支配する
  • 8. 処置後の変数で条件付け・サンプル絞り込みをしていないか(該当 Day 10, 11, 16)
    • 破ると: 選択バイアス。回帰に入れるだけでなく、「稼働中の設備だけ」「回答者だけ」と絞る操作も同じ事故を起こす

推定(数字の出し方を点検する4項目)

  • 9. 調整が効いた証拠(バランス診断、SMD 目安 0.1)を出したか(該当 Day 7, 8)
    • 破ると: 調整したつもりの数字に根拠がない。マッチングでは SMD 2.43 → 0.08 まで潰して初めて比較の土台に乗る
  • 10. 推定量やスペックを変えても答えが大きく動かないか確かめたか(該当 Day 8, 15)
    • 破ると: スペック1本の数字を握って報告する。同じマッチングでもスペック次第で +2,202 が +513 まで動いた
  • 11. 使ったデザイン固有の診断を出したか(第1段階F・プレトレンド・事前適合・バンド幅感度・密度検査)(該当 Day 17, 18, 19, 20)
    • 破ると: 弱い操作変数は F≈2 で真値1.0が中央値 1.56 に歪み、RDD はバンド幅次第で -0.03〜+0.10 まで動く。診断なしの点推定は読めない
  • 12. 機械学習を推定に使うなら、その作法(残差化・交差適合・標本分割)を踏んだか(該当 Day 16, 24, 25)
    • 破ると: 正則化と過学習の癖がそのまま効果推定のバイアスになる。FWL の「残差×残差」が作法の背骨

解釈(報告の書き方を点検する3項目)

  • 13. 検証できない仮定(非交絡性・除外制約・平行トレンド)を報告に明記したか(該当 Day 6, 17, 18)
    • 破ると: 読み手が、仮定を買ったことに気づかないまま結論だけ受け取る。真値ゼロでも X 調整後 +2.15、95%CI はゼロから遠く、見かけは「明確な効果」
  • 14. その仮定がどれだけ破れたら結論が覆るか(感度分析)を数字にしたか(該当 Day 9)
    • 破ると: 「仮定が正しければ」の但し書きが宙に浮く。E-value 2.35 のような耐性の数字が、仮定と結論の間を埋める
  • 15. その効果が「誰の・どこの」効果かを守って書いたか。射程の外へ外挿していないか(該当 Day 20, 21, 22)
    • 破ると: RDD の効果はカットオフの際だけ、LATE はコンプライヤーだけ、ATT は共通サポート内だけ。射程を超えた瞬間、根拠のない数字になる

15項目のうち、設計の1番と解釈の15番は対になっています。始める前に「どの量を推定するのか」を決め、書き終わる前に「その量の射程を守れたか」を確かめる。この往復が崩れた報告は、途中の推定がどれだけ精密でも読めません。

中間の会話(続き): 「15 項目、上から順に丸を付けていけばいい」と言うさくらに、顧問が「1 番で決めた推定対象を、15 番でもう一度見るのはなぜ?」。LATE を出したのに全員の効果のように書けば射程の外。始める前に決め、書き終わる前に守れたか確かめる往復

読み違いの図: よくある読み違いは「15 項目に全部丸が付けば、因果が証明された」。実際は、確かめたのは手続きと診断だけで、買った仮定は検証できない。全部に丸が付いても、因果の証明ではなく仮定の申告


4. 手を動かす

4.1 悪い調整は 3 行で起きる

コードは今日はこれだけです。チェックリスト6番(悪い調整)が、どれほどあっけなく起きるかを見ます。処置はコイン投げ、つまり完全な RCT で、真の効果は 1.0 です。そこに「処置と結果の両方から矢印が刺さる変数 $c$」を1つ、善意で調整に加えます。

コード
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf

rng = np.random.default_rng(27)
N = 100_000
w = rng.binomial(1, 0.5, N)              # 処置はコイン投げ(RCT相当)
y = 1.0 * w + rng.normal(0, 1, N)        # 真の効果 τ = 1.0
c = w + y + rng.normal(0, 1, N)          # 合流点:処置と結果の両方から矢印が刺さる

d = pd.DataFrame({"w": w, "y": y, "c": c})
print("そのまま = %.2f  (真値 1.00)" % smf.ols("y ~ w", d).fit().params["w"])
print("cを調整  = %.2f" % smf.ols("y ~ w + c", d).fit().params["w"])
出力
そのまま = 1.00  (真値 1.00)
cを調整  = 0.00

RCT のきれいな 1.00 が、変数を1つ足しただけで 0.00 に消えました。せっかくの無作為割付も、合流点(Day 10・11)への条件付け1つで台なしです(チェックリスト 6 番の −0.75 は Day 11 の別データでの値で、壊れ方の大きさはデータしだいです)。「とりあえず手元の変数を全部入れる」が因果推論で通用しない理由が、この数行に詰まっています。チェックリストの調整カテゴリは、この事故を出荷前に捕まえるためにあります。

対比の図: 題は「合流点を足すと、RCT の効果が消える」。上は、そのままの推定が 1.00 で、処置はコイン投げ、真値 1.00 と一致。下は、c を調整すると 0.00 で、処置と結果の両方から矢印が刺さる c を入れたために消える

中間の会話: 「c を入れたら 0.00、処置は本当は効いていなかった」と早合点するさくらに、顧問が「そのままだと 1.00 だった。c にはどこから矢印が刺さってる?」。処置と結果の両方から刺さる合流点で、足したせいで消えた。調整は DAG を描いてから決める

成り立つ場合と成り立たない場合

調整の仮定(バックドア基準) データに出るもの 今日の数字の読み方
成り立つ(c を入れない) そのままの推定が 1.00 で、真値 1.00 と一致する 1.00 を効果と読める
成り立たない(合流点 c を入れた) 調整すると推定が 0.00 に消える 0.00 は「効果が無い」ではなく、調整の事故と読む

5. 判断の基準

15 項目は、分析の最後に同じ重さで一度に当てるものではありません。どこから当てるかを、工程の順に 3 つの問いに絞りました。上から順にたどり、最初に右へ出たところが、いまやることです。

Fig 3: 判断フロー「会議に出してよいか、3 つ問う」。① 設計の 4 項目を結果の前に書いたか(いいえなら、結果を見る前に戻って書く。後から選ぶとサブグループ漁り)。② 調整の 4 項目は DAG で決めたか(いいえなら、DAG から決め直す。善意の 1 変数で効果が消える、4.1)。③ 推定と解釈の 7 項目を書いたか(いいえなら、診断・仮定・射程を書き足す。デザインの命綱を深く点検する)。全部通ったら、買った仮定と耐性の申告として会議に出す

  • Q1 は設計の 4 項目で、データを見る前にしか書けません。 チェックは分析の後にやるものではありません。推定値を見てから estimand を選び直すのは、Day 22 で扱ったサブグループ漁りと同型の事故を、分析の入口で起こしていることになります。Imbens & Rubin が「設計は結果を見ずに済ませよ」と繰り返すのは、まさにこの順序の話です。
  • Q2 は調整の 4 項目で、DAG を描いてから決めます。 調整セットを手元の変数から選ぶと、4.1 のように善意の 1 変数が RCT の効果まで消します。矢印の「無い」ところまで仮定として図にしておけば(5番)、バックドア基準(6番)も処置後の変数(8番)も図の上で点検できます。オーバーラップ(7番)だけは、傾向スコアの分布を描いてデータで確かめます。
  • Q3 は推定と解釈の 7 項目で、報告に書くものです。 項目の重みは均等ではありません。デザインごとに命綱が違います。操作変数なら除外制約(13番)、DID なら平行トレンド(13番と11番のプレトレンド)、RDD なら操作の痕跡(11番の密度検査)、傾向スコア系ならオーバーラップ(7番)。15項目を薄くなぞるより、自分のデザインの命綱1本を深く点検するほうが、報告の質は上がります。

注記 「15項目すべてに合格=因果の証明」ではありません。チェックリストが確かめられるのは手続きと診断だけで、芯にある非交絡性(Day 6)や除外制約(Day 17)は原理的に検証できません。全項目に丸が付いた状態は「因果が証明された」ではなく、「どの仮定を買ったかを自覚し、耐性まで開示した」という状態です。それでも、そこまで書かれた報告と書かれていない報告の間には、実務上大きな差があります。

自分の仕事に当てるなら、次の問いから始められます。いま報告しようとしている推定値のうち、設計の 4 項目をデータを見る前に書き残してあるものはどれでしょうか。


6. 確認問題

問 1(自分の言葉で説明する) チェックリストの 15 項目に全部丸が付いたとき、言えることと言えないことを、本文を見ずに 2 文で説明してください。

答えと解説

模範解答: 因果の主張は、非交絡性・除外制約・平行トレンドのような、データからは検証できない仮定の上に立つので、15 項目が確かめられるのは手続きと診断までです。全部に丸が付いても因果の証明ではなく、どの仮定を買ったかを自覚し、耐性まで開示した状態だと言えます。

次の 2 点のどちらかが抜けたら不十分です。

  • 検証できない仮定が、全部に丸が付いたあとも残ること
  • 丸が付いた状態は証明ではなく、買った仮定の申告であること

詰まったら 2 の答えの段落と 3.2 に戻ってください。

問 2(別の場面へ移す) ある小売アプリで、割引券を無作為に半数の会員へ配りました。ところが券を実際に使った会員は、配られた会員の 40% だけでした。券を使った会員について、購入額が 1 人あたり +500 円増えたと推定し、報告に「この施策は、全会員に平均 +500 円の効果がある」と書きました。チェックリストの観点で、最も適切な直し方はどれでしょうか。

  • ア 無作為割付なので、全会員に平均 +500 円と書いてよい
  • イ 標本が小さいので、+500 円は偶然と書き直す
  • ウ +500 円は券を使った会員の効果なので、「誰の効果か」を限って書き直す(15 番)
  • エ 券を使った会員を分析から除いて、推定し直す(8 番)
答えと解説

ウ。+500 円は、割付どおりに券を使った会員だけの効果で、全会員の効果ではありません。15 番の「射程の外へ外挿していないか」に当たり、始める前に推定対象を決める 1 番とも対になっています。

  • ア(割付を効果の射程と読む読み違い): 無作為に割り付けても、効果が届く範囲は券を使った会員までです。
  • イ(根拠のない読み違い): 標本の大きさは問題文のどこにも出ていません。直すべきは大きさではなく、書き方です。
  • エ(絞り込みと取り違える読み違い): 8 番は処置後の変数で絞り込む事故の項目で、問題の核は誰の効果かの書き方です。

問 3(出力を読む) 4.1 のコードは、処置をコイン投げで割り付けた合成データ(真の効果 1.0)です。出力は次のとおりでした。読み方として正しいものはどれでしょうか。

そのまま = 1.00  (真値 1.00)
cを調整  = 0.00

ア $c$ は交絡なので、調整後の 0.00 が本当の効果である イ 標本が小さいので、偶然 0.00 になった ウ RCT では調整しても推定値は変わらないはずなので、計算の誤りである エ $c$ は処置と結果の両方から矢印が刺さる合流点で、そこで条件付けたせいで効果が消えた

答えと解説

エ。$c$ は処置と結果の両方のあとに決まる変数です。そこで条件付けると、処置と結果の間に見かけの関係が入り込み、真の効果 1.0 が 0.00 に消えます(チェックリスト 6 番、Day 10・11)。

ア: 処置はコイン投げなので交絡はありません。そのままの 1.00 が真値と一致しています。イ: N は 100,000 で、偶然でここまでずれる大きさではありません。ウ: RCT でも、処置のあとに決まる変数で調整すれば推定値は壊れます。だから「とりあえず手元の変数を全部入れる」が通用しません。


7. おわりに

末尾の会話: 「報告書に、最初に推定対象、最後に買った仮定とその耐性の欄を作った」と報告するさくらに、顧問が「チェックリストは合格判定じゃなく、買った仮定の申告」。さくらは「家の冷蔵庫にも貼って、夕飯の献立もまず推定対象から決める」と張り切り、顧問は「夕飯なら、推定対象はたぶん空腹の解消だね」

分析を出す前の総点検は、手法選定フローで道具を決め、設計・調整・推定・解釈の 15 項目で「確かめられるものを確かめ、確かめられないものを明示する」ことです。チェックリストは儀式ではなく「どの仮定を買ったかの申告」です。全部に丸が付いても証明ではなく、確かめたものと信じたものを分けて書いた、という印です。最後に確かめます。15 項目に全部丸が付いたとき言えることと言えないことを、本文を見ずに 2 文で言えますか。詰まったら 2 の答えの段落と 3.2 に戻ってください。


8. 参考(本棚)

  • Imbens & Rubin『Causal Inference for Statistics, Social, and Biomedical Sciences』。設計を推定に先行させる思想で、設計カテゴリの下敷き
  • Pearl『入門 統計的因果推論』。DAG・バックドア・悪い調整で、調整カテゴリの下敷き
  • Matheus Facure『Causal Inference in Python』。デザイン固有の診断の実務で、推定カテゴリの下敷き
  • 安井翔太『効果検証入門』。セレクションバイアスと報告の実務視点
  • T・エドワード・デイマー『誤謬論入門』。良い議論の条件。チェックリストを「相手を落とす道具」でなく「自分の議論を強くする道具」として使う姿勢はここから
  • 本文のコードは合成データです。乱数シードを含めコピペで再現できます

この記事の位置づけ

因果推論を「本を読んだ」で終わらせず、自分の言葉で説明でき、コードで再現できる状態まで落とす 30 日連載の Day 27 です。

Fig 0: 因果推論の地図。今回は「④ 検証して報告する」の共通の土台「落とし穴チェックリスト」

図は縦が分析の工程、横が流派です。この記事は 5 つの系統に共通する土台「落とし穴チェックリスト」で、工程は「④ 検証して報告する(仮定の耐性と見せ方)」です(図の横長の黒い札)。前提になるのは Day 9(感度分析)・Day 11(d分離とバックドア)・Day 15(DoWhyの4ステップ)。ここで覚える考え方や道具は Day 30(総括と地図の描き直し) で再登場します。

9. 次回予告(Day 28)

Day 28(空間データ)

チェックリストの3番(SUTVA)と7番(オーバーラップ)が同時に壊れる場所が、私の主戦場である空間データです。隣り合う自治体は似た未観測要因を共有し(空間交絡)、施策の効果は境界を越えて漏れます(空間干渉)。そのとき「個体の処置効果」という定義自体がどう書き直しになるのか。次回Day 28は、仕上げの3日間の初日として、格子状の合成空間データで何がどう壊れ、どこまで救えるのかを真値を握った状態で確かめます。この連載の独自性の核になる回です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?