Syleir’s note

2020.4.1より統計検定やE資格の勉強の進捗を報告しています。統計検定準1級、E資格、G検定取得しました!当ブログへのリンクはご自由にどうぞ。

MENU

【因果と矢印】DAGの初歩を解説する【統計的因果推論】

はじめに

ここ最近、統計的因果推論の文脈で特殊なモデルとしてITSを扱ってきましたが、よくよく考えてみると初歩的なことを全く書いていないので少し整理した記事を書きます。今日はDAGという、因果推論の初歩、矢印で因果関係を表現する方法を初心者向けに解説します。

DAGとはなにか

有向非巡回グラフ(DAG)の定義と特徴

DAG:directed acyclic graph 有向非巡回グラフと言います。
DAGは因果推論の文脈でのみ使われるという訳ではなく、一般的なグラフ理論用語でもあります。因果推論のグラフィカルモデルはグラフ理論から派生した理論なので、例えば競技プログラミングなどで、DAGという言葉を聞いたことがある方は多いのではないでしょうか。
以下、本記事では「一般的なグラフ理論用語で使われるDAG」という文脈で「DAG」を用いる時は必ずこの旨を明記するようにし、断りなく「DAG」という用語を使うときは「因果推論の文脈でのDAG」という意味で書きます。DAGには以下のような特徴があります。

DAGの特徴と書き方

1. 頂点を矢印で結んで書く
2. DAGは巡回しない
3. 結ばれた矢印は変数同士の直接の因果関係を表す


1. 頂点を矢印で結んで書く
因果推論の文脈では、変数のことを頂点(あるいはnode)と言います。
そして一般的なグラフ理論では頂点を辺(edge)で結んでいきます。辺には有向辺と無向辺がありますが、グラフ理論において、DAGは、無向辺(線分)ではなく、有向辺(矢印)で結んでいきます。

2. DAGは循環、巡回しない
グラフ理論においてDAGは循環しないという原則があります。例えば、下図のような巡回するグラフはDAGではありません。

DAGではない有向グラフ

3. 結ばれた矢印は変数同士の直接の因果関係を表す
今までの2つの定義は一般的なグラフ理論におけるDAGと同様です。これを因果推論に拡張します。
因果推論におけるDAGでは、頂点は変数を表し、X→Yという矢印があったとき、それは変数Xから変数Yに直接の影響があることを意味します。
風が吹けば桶屋が儲かる」という言葉がありますが、あれはたくさんの間接的な因果関係を介在しているので風が吹く→桶屋が儲かるというDAGを書いてはいけません。

因果推論における因果グラフの役割

DAGを書くことで、検証したい因果関係に対して、いろんな変数が介在しているとき、統計モデルを作る上で、考慮すべき変数と、無視すべき変数を機械的に整理することができます。

経路が開いている、閉じているとは?


このようなDAGをまず見てみましょう。このDAGを使って、XとYの直接の因果関係を見たいとします。ただ、上で見た通り、矢印で繋がっているところはそれぞれ、直接の関連がありますから、例えば、「AとX」「AとY」がこの図では直接の関連があるということになります。そうすると、X→Yという直接の経路以外にも、Aを介した、「X←A→Y」という経路がXとYの関係に影響を与えている可能性があります。ただし、直接の関連があるもの同士が繋がっているからと言って、その相方同士に影響を及ぼしているとは限りません。あなたの知り合い2人を連想したとき、その2人がそれぞれ知り合いであることもあれば、全く繋がりがないこともあるでしょう。そんな感じです(?)

DAGにおいて、経路が開いているということは、その経路で関連が存在することを意味します。反対に、閉じている経路に関してはその経路で関連が存在しないということを意味します。

因果推論においては、知りたい因果関係以外の関連をすべて無くして、知りたい因果関係があるかを調べたいというモチベーションがあります。知りたい因果関係以外の開いている経路を把握することがまずモチベーションになります。つまり、この図では、「X→Y」以外に「X←A→Y」、「X→C→Y」、「 X→B←Y」という経路があるが、まずこれらのうちどれが開いている経路なのかを特定することがやりたいことになります。

矢印の向きで関連があるかを見る

実は、DAGを利用することで、矢印の向きを見るだけで、数学的な処理をすることなく、視覚的に開いている、閉じているが判断できます。これがDAGを利用するメリットです。ただ、最初は説明があった方が良いと思うので具体例を引きながら説明していきます。

共通の原因があるとそれを介した経路は開いている

共通原因(common cause)としてよくある例は、毛髪量と年収の例です。毛髪量が少ないほど年収が高いというデータがあったとします。直感的には散髪をして毛髪量を減らしたら年収が増える、植毛をしたら年収が減る、ということはなさそうです。ということはこれらには因果関係はなさそうです。これの「妥当な」説明としては、裏に「年齢」という共通原因があり、これがそれぞれに影響を与えているというようなことができます。これをDAGで書くとこのようになります。

共通原因を介した経路、すなわち「毛髪量←年齢→年収」という経路がありますが、毛髪量と年齢は関連があるので、この経路は「開いている」という言い方をすることができます。
このような年齢のような、共通の原因をもたらす変数を「交絡因子」と言います。

共通の結果があるとそれを介した経路は閉じている

共通効果(common effect)の具体的な例として、肥満を挙げます。肥満は遺伝的要因と、運動不足などの環境要因の相乗効果で生じていると考えられます。

しかし、一般的には遺伝的要因と環境要因は関係がないので、例えば、より運動量が減ったからと言って、遺伝的要因に影響を及ぼす訳ではありません。
共通の結果を介した経路、すなわち「遺伝的要因←肥満→環境的要因」という経路がありますが、遺伝的要因と環境要因は関連がないので、この経路は「閉じている」という言い方をすることができます。
このような肥満のような、共通の結果となるような変数を「合流点(collider)」と言います。

中間因子があるとその経路は開いている

一般に、糖尿病があると死亡リスクは高くなると考えられます。糖尿病と死亡リスクの関係を知りたいです。糖尿病というのは糖の代謝異常などにより高血糖が生じるような病態ですが、高血糖だけで死ぬことは(糖尿病性ケトアシドーシスのような一部の例外疾患を除けば)死ぬことはありません。糖尿病で死亡リスクが上がるのは、糖尿病による高血糖が血管を損傷し、心筋梗塞のような心血管疾患リスクが上昇することで、死亡率の上昇につながります。
このDAGを書くと次のようになります。

このDAGでは、媒介因子である心血管疾患を介する因果経路、すなわち「糖尿病→心血管リスク→死亡率」という経路がありますが、これは糖尿病と死亡率には関連があるので、この経路は「開いている」という言い方をすることができます。
このような心血管リスクのような、因果関係を媒介するような変数を「媒介因子(mediator)」と言います。

上で見た経路3つを整理するとこのようになります。

XからYへの因果関係を見たい時、X→Y以外に「X←A→Y」、「X→C→Y」、「 X→B←Y」という経路があります。上で見たように、「開いている」経路としては「X←A→Y」、「X→C→Y」が当てはまり、「閉じている」経路としては「 X→B←Y」があることがわかります。

フロントドアパスとバックドアパス

ここで、フロントドアパスとバックドアパスという概念を導入します。フロントドア、バックドアというのは野球の変化球でも使われる概念でパスはサッカーとかバスケで使う概念でなんのスポーツなのかよくわかりませんね。
フロントドア、バックドアというのは表道、裏道という意味、パスは経路のことですから、直訳すると表道経路、裏道経路ということになりますね。
フロントドアパス、バックドアパスというのは開いている経路を区別するための概念になります。本来は厳密な定義がありますが、初歩記事なので概念のとしての導入をします。厳密な定義はバックドア基準、フロントドア基準などでググってみてください。余力があれば記事を書きます。
先ほどから多用しているDAGから開いている経路だけを抽出します。

さて、どっちがフロントドアパス(表道)っぽいでしょうか。そう、「X→C→Y」ですね。XからYへの影響を考えたいとき、この流れの向きに矢印が向いている経路を「フロントドアパス」と言い、そうでないものを表道とは反対方向に行く裏道経路、バックドアパス」と言います。

経路は開くこともできるし閉じることもできる

「ある操作」をすると経路は開くこともできるし、閉じることもできます。経路が「開いている」というのはその経路を介した関連がある、ということでしたから、経路を閉じることができれば、その経路を介した関連を無視することができます。因果推論のモチベーションは、ある変数から、ある変数に及ぼす直接影響を知りたいということでした。ですから、この経路を閉じるという操作が、因果推論のモチベーションと親和性があることはお分かりでしょうか。余計な影響を与える影響を閉じることで、直接的な影響を知ることができます。
しかし、余計な経路を閉じてしまうと、本来知りたかった関連も見れないことになってしまうし、余計な経路を開いてしまうと余計な影響が入ってしまうことになります。この「ある操作」を適切な経路に対して行っていくことが大事です。

「ある操作」って?

この経路上にある変数に対し、統計学的に処理を行うことです。例えば、その変数で層別化することや多変量回帰分析に変数を入れることです。例えば、交絡因子を介するパスは交絡因子で層別化することにより交絡因子の影響を取り除いた解析ができます。これはすなわち、交絡因子を介した関連がなくなるということであり、つまり「交絡因子を統計学的に処理したことにより開いていたパスが閉じた」、ということになります。また、合流点で層別化をしてしまうと、全く関係がなかった2つの変数があたかも関連があるように見えることがあります(合流点バイアスと言います。知らない方は検索してみてください)。有名な選択バイアスなどもこれに該当することがあります。つまり、合流点で層別化をしてしまうことは閉じていたパスを介して、関連が生じてしまうということになります。これはすなわち、「合流点での統計学的処理によって閉じていたパスが開いた」ということに他なりません。これらの例からパス上にある変数に統計学的処理を行うと閉じていたパスは開き、開いていたパスは閉じるということがわかります。

結局どの経路を閉じたらいいの?

結論から言うとバックドアパス経路を閉じたら良いです。余談ですが、ドア、閉じるというと某映画を思い出しますね。あの映画は出現する全部の開いているドアを閉じればいいので簡単ですが、DAG上ではバックドアだけしか閉じてはならない意味でさらに難しいです。
バックドアを閉じるのは交絡因子の影響を取り除きたいと言うことを考えるとわかりやすいと思うんですが、フロントドアを閉じてはいけないのは非直感的な気がします。結局知りたいのはXからYへの影響なので、中間因子を介した影響も加味したい、と言うのが直感的な説明かなと思います。

交絡因子の古典的定義

・交絡因子は原因と関連する
・交絡因子は原因がなくとも結果に関連する
・交絡因子は原因や結果の上流にある


例えばこの例では、年齢は毛髪量と言う原因と関連し、毛髪量という要素がなくても年収と関連し、毛髪量と年収の上流にあることから交絡因子ということができます。
これだけでは対処できない交絡因子が存在する事がわかってきました。

交絡の定義を拡張

→因果推論の文脈では、交絡因子は統計学的に処理する事でバックドアパスを閉じられるかどうか?と言う解釈で捉えられています。バックドアパスを形成していて、その変数を処理することでバックドアパスを閉じられるものが交絡因子となります。

例えば、X→Yの影響を知りたい上のモデルで、CはXの上流にないので、古典的な交絡因子の定義を満たしませんが、Cは「X←A→C→Y」というバックドアパスを形成しており、Cは交絡因子ということができます。直感的には交絡因子とは捉えにくいものでもDAGを書くことで交絡因子を特定しやすくなることがDAGを使う良いところです。

モデルによって何が交絡因子なのかが違う


このDAGを見てみましょう。X→Yの因果を見たい時はAは交絡因子ですが、A→Yの因果を見たい時はXは中間因子です。A→Xの因果を見たい時はYはYは合流点です。
見たい因果関係によって構築するモデルは違うし、採用しなければいけない変数も変わってくることがわかります。

予測と因果推論は違う

因果推論においては選択的に因果を見たいので統計学的処理をする、しないなどがありますが、予測においては、よっぽどそれがノイズにならない限り変数を採用します。全然頭の使い方が違うことは少し頭の片隅に置いておいても良いでしょう。
Deep Learningの予測タスクなんかはデータ量、変数量こそ正義みたいなところもあり、いい感じの特徴量を持つ変数を追加で生み出すみたいな乱暴なこともするので、そういうものとは少し違うということは知っておいても良いと思います。

おわりに

本日は因果推論の初歩、DAGで因果関係を表現することを扱いました。今後はモデル化も扱っていきたいところです。

references

Pearl流の因果推論の基礎の本です。

これは数式を使わずにPearlが因果推論のお気持ちを読み物として書いてくれています。いい本ですが、めちゃくちゃ分厚いので、数式がないわりに気合を入れて読まなきゃいけないのがややしんどいです笑

初心者向けに因果推論のやりたいことを易しく書きながらPythonでの実装も書いてくれています。やや例が冗長化かつわかりにくい気もしますが・・・
Pythonが得意な機械学習、Deep Leaningの文脈で因果推論、因果探索について触れてくれていて良いです。

Rでの実装を書いてくれています。時代の変遷や根拠となる論文を引きながら説明してくれている良い本です。細かいモデルごとの実装も説明してくれています。僕は間違えて2冊買ってしまいました。

英語が得意な方はこちらでしょうか。体系的に書いてくれています。なかなか他の章まで手が回っていません。