Boy Meets ML

機械工出身者が機械学習やその界隈の知識を考える

統計的因果探索について #3:構造方程式の導入

はじめに

前回の続きです。
mlengineer.hatenablog.com 前回は、観測した変数間に相関が見られても、観測できていない未観測共通原因というものによって擬似相関が発生する可能性について述べました。 今回は因果関係についてと、構造方程式といわれる考え方の導入について話します。

因果関係とはなんぞや

前回と同様にscikit-learnのboston toyデータセットで考えてみます。 なんだかんだ、bostonデータセットだとわかりにくい気もしますので、わかりやすいサイトを貼っておきます。 dataに入っている13種類の特徴量に対して、targetには各地域の住宅価格(中央値)が入っていました。 このdataの各特徴量をtargetに対する原因と考え、targetを結果と考えます。

An example of Causal relationship
An example of Causal relationship
こんなイメージです。 ???は未観測共通原因で、今のところdata(の一部でもいいですが)とtargetの両者に影響を与えているものです。 何でもいいですが、そのときの各市の市長さんが誰なのか?や諸外国とアメリカの経済関係性などなど、沢山考えることができます。 このように、何かが原因となり、何かが結果として現れる関係性を因果関係といいます。

bostonデータセットの13種類の変数の中でも、各変数は独立ではないでしょう。 前回見たように変数間のなかでもいくつかの相関が見られたので、特徴量は絡み合っている気がします。 そこで、前回あげたDIS、NOX、INDUSの3変数の関係を考えてみます。 このうちINDUSを未観測共通原因であるとみなしてみると、原因と結果は次のパターンがありそうです。

Three patterns Casual relation
Three patterns Casual relation

Pattern(1)はDISが原因で、NOXが結果の場合、 Pattern(2)はNOXが原因で、DISが結果の場合、 Pattern(3)はINDUSがDISとNOXの原因であり、NOXとDIS間には因果関係がない場合です。 しかし、本当にINDUSがDISとNOXの未観測共通原因と言えるのでしょうか? 各変数の因果関係の向き、ありなしというパターンを網羅していこうとすると、3変数間の関係だけで、27通り存在します。 bostonデータセットは13種類の変数があり、相関があるもの同士はさらに少なくはなりますが、それでもかなりの組み合わせ数になります。 しかもどの組み合わせであろうと、変数間に現れる相関値は変わりません。 それでは、どうやって本当の因果関係を探し出すのでしょうか。。

因果関係の大きさとはなんぞや

色々なパターンの組み合わせがありそうですが、どの組み合わせが正しくて、それは他の組み合わせとどうやって比べればいいのでしょうか?

因果推論の根本問題(fundamental problem of causal inference)

bostonデータセットのうち1サンプル、つまり1つの地域(街)を考えます。 これをひとまずA街と名付けます。 ボストンはかなり昔から雇用施設があったとして、それはA街ができる前からであるとします。 つまり、A街をつくればDISが決まります。 しかし、A街の特徴のうちDISを変えたいとします。 もしA街を別の場所にまるごと移動することができたとして、DISを変えることができたなら、NOXはどう変化するでしょうか? DISとNOXは正の相関があったので、DISを小さくできたらならばNOXは小さくなりそうです。 逆にNOXを小さくしたらDISは小さくなるのでしょうか? しかし今A街はDISという距離にあるわけで、NOXを動かしても今さらDISの変化を確認することは事実上不可能ですが、 実は因果関係の向きは、このように2変数のうち片方aを動かす(介入:interventionという)ことで、 もう片方bも変化したらばaはbの原因といえ、bはaの結果と言えるため、その方向がわかります。 このように実際起きていることと逆の状況を考えて、比較するという考えを反事実モデルと呼びます。

でもやはり、DISはA街を今の位置から動かすことができなく、今観測できる情報はA街がDISにあるときのA街のNOXだけです。 もう街の位置は決めてしまったもので、戻せませんので、観測できるデータは因果関係の1側面だけです。 このような問題を因果推論の根本問題という驚きの呼び方をするようです。

A街だけ考えても因果関係の向きはわからない、ということです。 このように1サンプルだけで考えていることを、個体レベルの因果関係といいます。

さて、1サンプルでは因果関係の根本問題によって、その因果関係わかりませんので、 他の街を情報を使って考えてみたくなります。 これを集団レベルの因果と呼びます。

たくさんの街のDISによって、各街のNOXの様子をみるのです。 このときDISが小さい場合のNOXと、DISが大きい場合のNOXのように分けて比べることで、 因果関係がわかりそうです。 しかし、もしたくさんの街が同じDISに位置するのであれば、個体レベルの因果関係と同じように 因果関係の根本問題にハマります。

構造方程式(structural equation)

集団の因果関係を考えて、原因によって結果が生じているとすれば、どれくらい原因が結果に寄与しているのか?とその大きさを測りたくなってきます。 そこで構造方程式といわれるモデルを構築して、各変数に対する介入を、条件付き確率で表現していくイメージです。 細かい話はまた次回にしますが、構造方程式とは次のようなものです。

An example of structural equation
An example of structural equation

変数 xは、撹乱変数(または誤差変数)と呼ぶe_xによって定められているとします。 また x yの原因であるとして、 yにも e_yという撹乱変数の影響があるとします。 これをまた未観測共通原因はないとして、構造方程式で表したものが上図の右側に記載した式となります。 左側にある書き方は因果グラフといいます。  y x e_yの関係が線形であるならば、  f_yは例えば、 y=x+e_yとも書くことができます。 実はこの図では、 e_x e_yは独立であることを仮定していて、 従属関係にある場合は e_x e_yを矢印でつなぐことになります。 目的変数である変数 x yは内生変数(endogenous variable)といい、 説明変数である e_x e_yは外生変数(exogenous variable)とも呼ばれ、 内生変数は外生変数が絡み合い、影響を与えることで生成されています。

先ほどのDIS、NOX、INDUSを因果グラフと構造方程式で記載してみると次のようなものになります。

An example of structural causal model
An example of structural causal model
ここでは未観測共通原因をINDUSとしています。 このような構造方程式を立てて、複数の因果関係の妥当性を測っていくことになるわけです。 文献1の著者である清水先生がわかりやすい資料を公表2していますので、こちらも非常に参考になるかと思います。

まとめ

今回は、因果関係を探るためには複数の可能性があることを考え、 構造方程式という表現方法について触れました。 次回はbostonのデータセットに対して実際に因果関係を探ってみたいと思います。

文献