pyhaya’s diary

プログラミング、特にPythonについての記事を書きます。Djangoや機械学習などホットな話題をわかりやすく説明していきたいと思います。

「因果推論の科学」を読んだ

最近話題になっていた「因果推論の科学」という本を読んだので感想みたいなものをつらつら書いてみました。


この本はジューディア・パールが2018年に書いた "The Book of Why: The New Science of Cause and Effect " の邦訳版です。英語圏ではすでに非常に評判が良いらしくAmazonでも1,500近くのレビューがついて平均4.4の評価となっています。

著者のジューディア・パールはベイジアンネットワークの研究で有名な方で、チューリング賞も受賞されています(ソース: Wikipedia)。

簡単にまとめると

この本がベースとしているのが「因果のはしご」という考え方です。因果のはしごは3段からなり、下から順に以下のように説明されています。

  • 関連付け:現実を観察してその中に規則性を見つけ、予測に用いる
  • 介入:ある行動をしたときに結果がどうなるか予測する
  • 反事実:現実とは異なる状況を仮定したら結果はどのようになるか予測する

最初にこのはしごに沿ってどう統計学が発展してきたかという歴史的な話がされます。その中で、現状の深層学習を使ったAIはまだはしごの1段目にいるので「強いAI」を作るには因果関係を組み込んではしごを登る必要があるということが書かれています。では因果関係はどうやって定式化されるのか?という話が続いて因果ダイヤグラムという道具が出てきます。そして因果ダイヤグラムを使って介入や反事実がどう表現されるか、具体例を多く交えながら(かつ少ない数式で)説明されています。

データは何も教えてくれない

ちょっと過激なこのセクションタイトルは第一章に出てくる言葉です。

データを見れば、たとえば、ある薬を服用した人が服用しなかった人よりも早く回復したことだけはわかるかもしれない。しかし、「なぜそうなったか」という理由はわからない。もしかすると、その薬を服用した人は、そうする金銭的余裕があったからそうしたまでで、服用しなかったとしても、結局は同じくらい早く回復したかもしれない。

わたしたちがデータを使って知りたいことは、ある行動が結果に対してどのような影響をもたらしたか、つまり因果関係であることが多いです。しかしデータ単体では因果関係を明らかにすることはできません(因果のはしごの1段目の問には答えられるが2段目以上の問には答えられない)。上の例でいうと、薬を服用した人と服用していない人のそれぞれに対する回復までにかかる時間のデータがあって、そこから「薬に効果があったか」という問に答えを出したいとき、分析者の頭の中には下のような因果ダイヤグラムがあります(本当はもっと様々な要因がダイヤグラムには現れるはずですがここでは上の引用に挙げられている要因だけを考えます)。

データに加えて上のような「モデル」を組み合わせることで「薬に効果があったか」という問に対する1つの答えを得ることができます。このモデルでは、経済力が交絡因子であると考えているので経済力を固定してバッグドアを閉じという分析をすることになります。

このように、データから因果のはしごの2段目の問に答えるにはデータの背後にある因果関係をどのようにモデリングするかが重要になります。

データの生成過程を知ることの重要性

データそのものよりもその生成過程が重要であるという事実を、本ではモンティー・ホールのパラドックスを使ってわかりやすく説明しています。モンティー・ホールのパラドックスは一種のくじ引き的な状況で生じるパラドックスです。3つの扉がありそのうち1つの後ろには新車が置かれていて、参加者はその扉を選べば新車がもらえるという状況です。参加者が開ける扉を選択したあとにくじを作った主催者は参加者が選ばなかった扉の中から新車の扉以外を開き、参加者に選択した扉を変更できることを告げます。このとき参加者は選択した扉を変えるべきかというのが問題です。

直感的に考えると選択を変更しても変更しなくても確率は変わらない気がしますが、実際には変更しない場合に新車がもらえる確率は1/3、変更した場合には2/3となります。本の中ではこの状況を少し変えたバージョンも挙げて比較しています。参加者が最初に扉を選んだあとに主催者が扉を開けるとき、開ける扉は完全にランダムで新車がある扉も開ける可能性があるというバージョンです。実はこちらのバージョンでは参加者が選択を変更してもしなくても新車がもらえる確率は1/3です。

この2つの状況からデータを取ろうとすると両方とも「参加者の選択した扉」、「新車の位置」、「主催者の開いたドア」に関するデータが取れます。データを比較すればアレンジバージョンの方では参加者が選択を変えても新車を得られる確率が変わらないという事実はわかりますが、なぜそうなっているのかはわかりません。両者の状況では実は、データの生成過程が異なります。両者で因果ダイヤグラムを書くと前者では新車の位置と主催者の扉選択の間に因果関係がありますが後者ではありません。つまり、本の中の一節を引用するならば

情報をどのようにして得たかは、情報そのものと同じくらい重要

ということです。

モデルを作る難しさ

一方で「モデルを正しく作る」という作業も簡単なものではありません。本の中で

因果関係の存在は、因果関係が存在するという前提で状況を見ていないと発見できない

と書いてあるように、正しい分析のためにはデータが生成される過程を理解し、不確かな部分には仮説を立てることが重要です。余談ですが、本の中では因果推論の研究が長い間統計学で敬遠されてきた理由を述べていて下のような一節が出てきます。

クローは、無視された理由をこう推測している。パス解析は、「あらかじめ用意された手順にただ従えばいい、というものではなかった。パス解析を行う者は、まず自分で仮説を立て、複数の因果関係をまとめた適切なダイヤグラムを作成する必要があった」。クローの指摘は本質を突いている。あらゆる因果推論がそうであるように、パス解析にもまた科学的思考が不可欠だ。ところが統計学では、科学的思考は敬遠され、むしろ決められた手順に従うことをよしとする場合が多い。自らの科学的知識が試されるような手法は敬遠され、データの数値を使って決まった手順で計算すればいいという手法が好まれるのである。

「科学的知識」はデータサイエンスの文脈では「ドメイン知識」と言われることが多いかもしれません。やはり適切なモデルを作るための手順書のようなものは存在しないので粘り強く仮説検証をすることが重要ということがわかりますね。

感想

自分は因果推論に関しては初心者で、入門書としてこの本を読んでみました。中身は数学書のように数式がいっぱい出て来るというわけでもなく(そもそも縦書きですし)、様々な実例を挙げて説明がなされているのでとてもわかり易かったです。

実は過去にPythonを使った因果推論の参考書をちょこっと読んだことがあったのですが、その中ではバックドア基準はこういうもんだから受け入れろという感じの書き方だったのでいまいち理解できていませんでした。しかしこの本では文章でですが重要な部分がちゃんと説明されていたので、消化不良を起こさずに理解できた気がしています。