LiNGAMを使う前に確認したい前提
LiNGAM は、かなり魅力的に見える。
観測データから因果方向を推定できる。
しかも、DAGを人間が全部描かなくても、変数間の向きをデータから探せる。
この説明だけを聞くと、相関分析の次にすぐ使いたくなる。
しかし、LiNGAM は「データを入れれば因果が出る箱」ではない。
強い前提を置いたうえで、その前提の下なら因果構造を識別できる、という道具である。[1][2]
この記事では、LiNGAM を使う前に確認したい前提を整理する。
結論から言うと、最低限見るべきなのは次の4つである。
- 線形で近似してよいか
- 誤差が非ガウス的か
- 因果関係を非巡回として扱ってよいか
- 隠れた共通原因を無視してよいか
この4つを確認しないまま出力された矢印を読むと、因果探索をした というより、強い仮定を置いた相関の向きづけ に近くなる。
先に結論
LiNGAM は、次のような構造を仮定する。
ここで x は観測変数、B は変数間の係数、e は外から入る誤差である。
基本的な LiNGAM では、次の前提を置く。[1:1][3]
| 前提 | ざっくり言うと | 破ると何が起きるか |
|---|---|---|
| 線形性 | 原因から結果への関係を線形で書ける | 非線形の曲がりを、別の因果方向として読んでしまう |
| 非ガウス誤差 | 外から入るノイズがガウス分布だけではない | 向きを区別する手掛かりが弱くなる |
| 非巡回 |
X -> Y -> X のような循環がない |
順序づけそのものが合わない |
| 隠れた共通原因なし | 観測していない変数が2つの変数を同時に動かしていない | 共通原因による相関を、直接因果と読んでしまう |
LiNGAM の強みは、非ガウス性を使うことで、線形ガウスモデルでは区別しにくい因果方向まで識別しようとする点にある。[1:2][2:1]
ただし、この強みは前提とセットである。
前提が崩れると、出てきた矢印は「発見された因果」ではなく、「そのモデルを仮定したときの候補」として読むべきである。
LiNGAMは何をしているのか
最小の2変数で考える。
真の構造が X -> Y だとする。
線形モデルなら、たとえば次のように書ける。
このとき、正しい向きで回帰すれば、残差 e_Y は原因 X から独立になるはずである。
逆に、間違った向き Y -> X で書こうとすると、残差に Y の情報が残りやすい。
LiNGAM は、このような非対称性を使って因果順序を探す。
特に、誤差が非ガウスであることが重要になる。[1:3][2:2]
ここで大事なのは、LiNGAM が「相関が強い方から弱い方へ矢印を引く」手法ではないことだ。
線形構造、外部ノイズ、独立性、非ガウス性を仮定したうえで、どの順序ならモデルとして自然かを見ている。
前提1: 線形で近似してよいか
LiNGAM の L は Linear の L である。
つまり、基本形では変数間の関係を線形構造として扱う。
実務データでは、関係が完全に線形であることは少ない。
それでも、狭い範囲では線形近似で十分なこともある。
問題は、非線形性が強いのに、線形モデルで無理に因果方向を出そうとする場合である。
たとえば、広告接触回数と購入確率の関係は、最初は増えるが途中で頭打ちになるかもしれない。
このような関係を直線だけで扱うと、残差に構造が残る。
その残差構造を、因果方向の手掛かりと誤読する危険がある。
確認すべきことは単純である。
- 散布図を見たか
- 変数変換や対数変換で関係が安定するか
- 外れ値だけで向きが決まっていないか
- 非線形モデルを検討すべき状況ではないか
LiNGAM を使う前に、まず線形近似がどの程度許されるかを見る必要がある。
前提2: 非ガウス性があるか
LiNGAM の名前に入っている Non-Gaussian は飾りではない。
非ガウス性は、因果方向の識別に関わる中核である。[1:4]
線形ガウスモデルでは、同じ観測分布を説明できる向きが複数残りやすい。
一方、誤差が非ガウスであれば、正しい方向と逆方向で、残差の独立性に差が出る。
その差を使うことで、因果順序を識別しやすくなる。
もちろん、現実のデータで「十分に非ガウス」と断言するのは簡単ではない。
したがって、少なくとも次は確認したい。
- 各変数の分布を見たか
- 標準化や変換の後も非ガウス性が残るか
- 外れ値だけが非ガウス性を作っていないか
- ガウスに近い変数ばかりで方向を断定していないか
非ガウス性が弱いなら、LiNGAM の出力は「強い証拠」ではなく「候補」の重みに落とすべきである。
前提3: 非巡回として扱ってよいか
LiNGAM は Acyclic、つまり非巡回を仮定する。[1:5][3:1]
これは、変数をある順序に並べると、原因から結果へ一方向に流れるという前提である。
たとえば、X -> Y -> Z のような構造は扱いやすい。
一方で、次のような状況では注意が必要になる。
- 価格が需要に影響し、需要が次の価格改定に影響する
- ユーザー行動が推薦に影響し、推薦が次のユーザー行動に影響する
- 健康状態が行動に影響し、行動が次の健康状態に影響する
これは同時点で見ると循環しているように見える。
時間を明示して X_t -> Y_{t+1} のように分ければ扱えることもあるが、単純な一時点データに押し込むと危ない。
非巡回の前提は、図にすると次のように違う。
循環がありそうなら、時間軸を分けるか、別のモデルを検討する方がよい。
前提4: 隠れた共通原因を無視してよいか
LiNGAM で特に危ないのが、隠れた共通原因である。
たとえば、X と Y の両方を動かす未観測変数 U があるとする。
このとき、X と Y は強く関連する。
しかし、それは X -> Y でも Y -> X でもなく、U が両方を動かしているだけかもしれない。
基本的な LiNGAM は、隠れた共通原因がないことを前提にする。[1:6][3:2]
この前提を置けないなら、出てきた矢印を直接因果として読むのは危険である。
実務では、隠れた共通原因を完全に消すことは難しい。
だからこそ、次を確認する。
- ドメイン知識上、共通原因になりそうな変数は何か
- それらは観測されているか
- 観測されていないなら、結果の解釈をどこまで弱めるか
- 既知の時間順や介入情報で補えるか
因果探索は、観測していないものを魔法のように消してはくれない。
小さなシミュレーションで見る
ここでは、LiNGAMそのものを実装するのではなく、前提が崩れると向きの手掛かりがどう弱くなるかを見る。
使うのは、単純な線形回帰の残差依存スコアである。
方法は次の通り。
-
X -> YとY -> Xの両方向で線形回帰する - それぞれの残差が説明変数とどれくらい依存しているかを見る
- スコアが低いほど、残差が説明変数から独立に近いと読む
これは LiNGAM の完全な診断ではない。
あくまで、前提の意味を見せるための小さな実験である。
手元では、同じ処理を再実行できる小さなスクリプトで結果を作った。
乱数シードは 540、標本サイズは 6000 で固定している。
結果は次のようになった。
| ケース | 条件 |
X -> Y の残差依存スコア |
Y -> X の残差依存スコア |
読み方 |
|---|---|---|---|---|
| 前提をおおむね満たす例 | 線形・非ガウス・隠れ共通原因なし | 0.017 | 0.314 | 真の向きだけスコアが低い |
| 誤差がガウス | 線形だが誤差がガウス | 0.006 | 0.008 | 両方向が同じように低く、向きの手掛かりが弱い |
| 隠れ共通原因あり |
U が X と Y を同時に動かす |
0.144 | 0.073 | 強い関連は出るが、直接因果とは限らない |
| 非線形 | Y = X^2 + e |
0.448 | 0.714 | 向き以前に線形近似が崩れている |
見るべき点は、1行目だけではない。
前提を満たす例では、真の向き X -> Y のスコアが低く、逆向きのスコアが高い。
これは、方向の手掛かりがある状態である。
しかし、誤差をガウスにすると、両方向のスコアがほとんど同じになる。
隠れた共通原因があると、そもそも X -> Y か Y -> X かという二択が間違っている。
非線形では、線形モデルの残差に構造が残り、方向を読む前にモデルの形を疑う必要がある。
この小さな表だけでも、LiNGAM を使う前に確認すべきことは見えてくる。
実務でのチェックリスト
LiNGAM を使う前に、少なくとも次を確認する。
| 確認項目 | 見るもの | 危ない兆候 |
|---|---|---|
| 変数の意味 | 変数定義、測定タイミング、単位 | 同じ概念の代理変数が混ざっている |
| 時間順 | データ取得時点、発生順序 | 結果の後に測られた変数を原因候補に入れている |
| 線形性 | 散布図、残差図、変換後の関係 | 曲線、しきい値、頭打ちが強い |
| 非ガウス性 | ヒストグラム、歪度、外れ値確認 | 外れ値だけが非ガウス性を作っている |
| 隠れ共通原因 | 業務知識、観測漏れ、設計上の制約 | 明らかな共通原因が未観測 |
| 安定性 | 変数追加、標本分割、前処理変更 | 少し変えるだけで矢印が反転する |
特に最後の安定性は重要である。
前処理、標本期間、外れ値処理、変数セットを少し変えただけで因果順序が大きく変わるなら、その結果を強く読んではいけない。
LiNGAM の出力は、単独で結論にするよりも、次のように使う方が安全である。
- 仮説候補を作る
- ドメイン知識と矛盾しないか確認する
- 既存の時間順や制度変更と照合する
- 必要なら実験や準実験の設計につなげる
つまり、因果探索は意思決定の代わりではなく、意思決定前の仮説整理として使う。
よくある誤読
LiNGAM について、特に避けたい誤読が3つある。
1つ目は、非ガウスなら因果が分かる という読み方である。
非ガウス性は重要だが、それだけで十分ではない。
線形性、非巡回、隠れた共通原因なしも必要である。
2つ目は、出力された矢印はそのまま施策の優先順位になる という読み方である。
矢印は構造仮説であって、施策効果の大きさや費用対効果ではない。
意思決定には、介入可能性、効果量、不確実性、コスト、リスクが必要になる。
3つ目は、ドメイン知識を入れるとデータ駆動ではなくなる という読み方である。
因果探索では、ドメイン知識は邪魔ではない。
時間順、測定設計、ありえない矢印、観測漏れを確認するために必要である。
データだけで閉じるほど、見えない前提が強くなる。
前提を言語化するほど、結果は読みやすくなる。
まとめ
LiNGAM は、因果探索の強力な道具である。
ただし、強力なのは、前提が弱いからではない。
むしろ、線形性、非ガウス性、非巡回、隠れた共通原因なしという前提を明示し、その下で識別を狙うから強い。
使う前に確認したいことは、次の4つである。
- 線形で近似してよいか
- 非ガウス性が方向識別に使える程度にあるか
- 非巡回として扱ってよいか
- 隠れた共通原因をどこまで無視できるか
この確認をせずに矢印だけを見ると、因果探索は簡単に過大解釈される。
一方で、前提を明示して使えば、LiNGAM は仮説生成や構造整理に役立つ。
-
Shimizu S, Hoyer PO, Hyvärinen A, Kerminen A. A Linear Non-Gaussian Acyclic Model for Causal Discovery. Journal of Machine Learning Research. 2006;7(72):2003-2030. https://www.jmlr.org/papers/v7/shimizu06a.html ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
-
Shimizu S, Inazumi T, Sogawa Y, Hyvärinen A, Kawahara Y, Washio T, Hoyer PO, Bollen K. DirectLiNGAM: A Direct Method for Learning a Linear Non-Gaussian Structural Equation Model. Journal of Machine Learning Research. 2011;12(33):1225-1248. https://jmlr.csail.mit.edu/papers/v12/shimizu11a.html ↩︎ ↩︎ ↩︎
-
DirectLiNGAM. LiNGAM 1.12.2 documentation. https://lingam.readthedocs.io/en/latest/tutorial/lingam.html ↩︎ ↩︎ ↩︎
Discussion