因果推論の構造化
このページの目的
因果推論を構造化して、自分の理解をまとめるためのページです。どこまでわかっていてどこからわかっていないのかを明確にします。
因果推論の構造
機械学習も前処理→学習→評価のようにステップに構造化できますよね。因果推論でもできるかもと思ってるのでやってみます。それぞれでのステップでの問題点と対処法も合わせてまとめていきます。次のようなステップに分解していきます。
因果グラフの構築
目的
因果グラフを作成するのがこのステップの目的です。 「相関は因果ではない」は有名な言葉ですね。例えば、入門統計的因果推論では、シンプソンのパラドックスを用いてこれがわかりやすく説明されています。少しだけ紹介します。ある薬が病気を回復させるかどうかを知りたく、投薬するグループとしないグループに分け、病気から快復した割合を集計しました。(出典:入門統計的因果推論)
薬投与 | 薬投与なし | |
---|---|---|
男性 | 81/87人が回復(93%) | 234/270人が回復(87%) |
女性 | 192/263人が回復(73%) | 55/80人が回復(69%) |
前代 | 273/350人が回復(78%) | 289/350人が回復(83%) |
男性をみると、投薬すると93%回復して、投薬しないと87%回復するので、投薬することは病気の回復に効果がありそうです。女性をみても同じく効果がありそう。
全体をみると、、、あれ?回復率が減ってる???
結局投薬は効果があるのでしょうかないのでしょうか、少なくとも相関を見るだけでは因果がわからないということが理解できる例ですね。面白そうだと思った方は是非出典をご参照ください。
もう一つ例として、国ごとのチョコレートの消費量とノーベル受賞者数を挙げたいです。(出典:チョコレート摂取量が多いほどノーベル賞受賞者が増える : 呼吸器内科医)
p値もばっちりだし、強い相関があると言えますね!さて、これはチョコレートを消費することによって、ノーベル受賞者数が増えることを意味するのでしょうか?直感的にはNOですね。もしかしたら、ノーベル賞を受賞するとチョコレートをたくさん食べるようになるということもあるかもしれません :) しかし、相関を見るだけでは上記のどちらの因果関係があるかは議論することができないですね。
以上からデータ以外に何かを仮定しないと、因果を推定することはできなさそうです。因果を推定するためには、因果グラフを用いて変数間の関係を表現する必要があります。例えば、チョコレートの例では次のような因果グラフを書くことができます。
では因果グラフをどのように構築するのでしょうか。正しい因果グラフはどれでしょうか。
どのように因果グラフを構築していくか?
専門家知識による構築
この方法は人間の頭で考えながら作成するという方法です。例においては、「チョコレートを消費することで頭がよくなるはずがない。よってチョコレートの消費量からノーベル受賞者数への矢印は伸ばさない。」「GDPが高ければ、教育にかける費用も大きくなり質の高い研究者が排出され、ノーベル受賞者数が増えると考えられる。よって、GDPからノーベル受賞者数へ矢印を引く。」などどいうように、納得できる理由をもって因果グラフを構築していきます。
有用な点
人間が考えていくので、納得感を反映した因果グラフができる。
データを実際に取る前に因果グラフを構築することができるので、これからどのデータを取るべきか議論できる。
アルゴリズムによる構築
データが与えられている場合、アルゴリズムによりそれらの変数間の因果グラフを自動で構築することもできます。次のようなアルゴリズムがあります。
ですが、もちろんそれぞれのアルゴリズムについて満たすべき仮定が増えるので、注意が必要です。
有用な点
- 比較的因果グラフを構築するコストが小さい。
作成した因果グラフは正しいのか?
第一に、常識で判断するというのが有力な手法であると思います。チョコレートを食べて頭がよくなることはないでしょう。 また、因果グラフが正しいかどうかを直接考えてはいませんが、分析が一通り終わった後、いろいろな観点から、結論に影響がでるかどうかを確認することが多いようです。これを感度分析といいます。これは、評価のステップに後回ししたいと思います。
因果効果の推定
目的
因果グラフが与えられると、どの変数を測定すれば因果効果を測定できるか導けます。そのうえで、それらの変数のバランスを介入・非介入グループでバランスを取らせるのがこのステップの目的です。
たとえば、治験で、投薬、年齢が発病の原因となりうると考えられている場合、次の因果グラフが与えられます。
このとき、バックドア基準によって因果効果の推定に必要な変数は投薬の有無、年齢と証明できます。
しかし、まだ問題があります。得られたデータが次のようになっている場合を考えましょう。
これでは、目的変数への影響が、介入によるものなのか年齢によるものなのかわからない、ということは直感的に理解できますね。 では、それぞれのグループで年齢がバランスするように整えればよいのではないでしょうか。
では、どのようにして整えればよいのでしょうか。この整え方もいろいろあるのでいくつか紹介したいと思います。
最近傍マッチング
「似ているグループをつくるには、似ているペアを作っていけばよい。」というのがアイデアです。あるサンプルを選んで、それと一番似ているサンプルをペアにします。これを繰り返してグループをバランスさせます。 問題点としては、サンプル数が少なくなってしまうことが挙げられます。
傾向スコアマッチング
「データの数が少ない層を疑似的に増やす。」というのがアイデアです。例えば、60代男性が、介入グループには数人しかいないけど、非介入グループには数十人いる場合、介入グループの20代男性を10倍ぐらいにコピーして水増しすればバランスが取れそうですね!それをすべてのサンプルに対して行います。 これならば、サンプル数を減らさずにグループをバランスさせることができそうです。具体的にどのような計算で増やすかは、こちらの講座をご覧ください。
評価
目的
ここでは次の疑問に対して示唆を得ることが目的です。
結論はどれほど確からしいか?
グループ間のバランスはとれているか?
感度分析
様々な観点から、分析結果がどれほど信頼できるかを考察します。
* 一部のデータに対して同じ分析をして、推定値がばらけないか見る。
* 観測できなかった原因を追加する
* プラセボ効果だったとしてシミュレーションする
などなど様々な方法があります。
(因果推論ライブラリdowhyに実装はあるのですが、理論的なところはまだ勉強中です。。。)
グループ間のバランスを見る
二つのグループの分布が似ているかどうかを測れればなんでも良いとは思うのですが、一般的には、指標として、Standerlized Defferenceというものを見るようです(この講座による)。グループ感の差が大きくなるほど、値が大きくなります。これをマッチング前後で比較して小さくなっていることを確かめます。0.1より小さくなっていればバランスしているといってよいです。
具体的なデータを使って動かしてみる
上記のステップを実際のデータを分析しながら確認していきたいと思います。 が、量が多くなったので、この部分は後日にしようと思います。