因果推論の学びメモ
因果推論を学び始めたので、勉強のためにメモします。
間違いや拙い点がございましたら、ご指摘いただけると助かります。
因果推論とは
Wikipedia(英語)によると、因果推論は、因果関係、つまり原因と結果の関係を特定するプロセス、とのことです。
もう少しかみ砕くと、得られた結果 A が、本当に B という原因によるものなのか、ということを追求することです。
計量経済学や医療において、経済施策が本当に効果があるのか、医療行為が本当に効果があるのかの検証に使われるようです。
なぜ因果推論が必要なのか
例えば実験で新薬を投与した場合、病気が治ったとしましょう。
その効果が新薬を飲んだことによるものなのか、その人が持つ自然治癒力によるものなのか、はたまた治療中の食事によるものなのか、厳密にはわかりません。
厳密にはわからないまま、実験でこの新薬を飲んだ人は病気が治ったことを受け、患者全員に投与したとしましょう。
万が一効果がなかったら、下手すれば重大な副作用が生じたら、大変なことになります。
その効果の原因が本当にその新薬の効果によるものなのか、検証する必要があるのです。
世の中にあふれる自己啓発は因果推論による検証は行っていないと思われます。著者が語る方法論や考え方に本当に効果があったのか、著者に才能があっただけなのか、手助けしてくれる人に恵まれたのか、運が良かったのかは何とも言えませんよね。
どうやって因果推論をするのか
- (非現実的だが)施策や医療行為を同じ人・グループに実施した場合と、実施しなかった場合を比較する。
もし可能であれば一番良い比較なのですが、パラレルワールドを行ったり来たりでもしない限り無理です。
現実的ではありません。
- RCT(ランダム化比較試験)により、ランダムに抽出したサンプルの片方に施策や医療行為を実施し、もう片方のサンプルに施策や医療行為を実施せず、両者を比較する。
ランダムに抽出したサンプルを比較することで、例えば年齢や家庭環境といったバイアスを除外して比較することが可能です。
ただし、これも片方の病気の患者のグループを治療しなかったり、片方の市民を経済的に有利な施策を行わない、ということは人道的に許されないため、限界があります。
- 傾向スコアマッチング
機械学習のクラス分類で出した確率が近いものをグルーピングすることで、近い共変量同士を比較することが可能と考えられます。
これにより、共変量のバイアスの影響を除外する手法を傾向スコアマッチングというそうです。
目的変数の予測結果が近い=共変量を含む説明変数が近い と考えるのではないかと思われます。
なお、共変量と同じような用語として、交絡因子というものがあります。
共変量と交絡因子の違いがよくわからなかったのですが、「原因と結果」の経済学によると以下のように説明されています。
共変量 原因と結果でない残りすべての変数のこと
行楽因子 その共変量の中で「原因と結果の両方に影響を与えるもの」
つまり共変量の中には交絡因子であるものも、そうでないものも含まれる。
なお、傾向スコアの算出には、ロジスティック回帰が用いられることが多いそうです。
kaggleでよく使われるLightGBMや、ランダムフォレスト、サポートベクトルマシンといった手法を使うとまずいわけではないようです。
思うに、精度の高さが要求される通常の機械学習と違い、因果推論では予測結果の関係を説明しやすさを優先するためではないでしょうか。
シンプルかつランダム性を除外した学習モデルを使うことで説明変数と目的変数の予測の関係を説明しやすくなるのでしょう。
なお、参考サイトにも紹介されていますが、傾向スコアマッチングを安易に使うべきではないという論文もあるようです。
以上になります、最後までお読みいただきありがとうございました。
参考書籍
因果推論とはどういう考え方のものなのか、わかりやすく説明されています。
因果推論の内容と、Rを使った因果推論の過程が説明されています。
因果推論の内容と、Pythonを使った因果推論の過程が説明されています。
個人的な感想ですが、効果検証入門よりもくだけて解説されています。
つくりながら学ぶ! Pythonによる因果分析 ~因果推論・因果探索の実践入門
参考サイト
因果推論の理論が非常に詳細に説明されています。
私は傾向スコアマッチングがどういうもので、何のためにするのかなかなかピンと来なかったのですが、このサイトは非常に細かく説明されていてわかりやすかったです。
公開されているデータセットをもとにした傾向スコアの算定過程が詳細に説明されています。
傾向スコアマッチングを安易に使ってはならない、という論文が紹介されています。