Slide 1

Slide 1 text

LiNGAM Pythonパッケージでできること 清水昌平 滋賀大学データサイエンス学系 理化学研究所革新知能統合研究センター 2021年11月13日

Slide 2

Slide 2 text

LiNGAM Python package • https://github.com/cdt15/lingam 2 ぜひstarを! 池内さん SCREEN AS

Slide 3

Slide 3 text

Documentation • https://lingam.readthedocs.io/en/latest/# 3

Slide 4

Slide 4 text

LiNGAMモデル (Shimizu, Hyvarinen, Hoyer & Kerminen, 2006) • Linear Non-Gaussian Acyclic Model (線形非ガウス非巡回モデル): – 𝑘 𝑖 : 𝑥! の因果的(半)順序 (topological order) – 誤差変数 𝑒! は • 非ガウス連続 • 互いに独立 • データ𝑋から係数𝑏!" と順序𝑘 𝑖 が識別可能(一意に推定可能) • https://lingam.readthedocs.io/en/latest/tutorial/lingam.html 4 or 𝑥# 𝑥$ 𝑥% 因果グラフ 𝑥' = # ( ) *((') 𝑏') 𝑥) + 𝑒) 𝒙 = 𝐵𝒙 + 𝒆 𝑒% 𝑒# 𝑒$ 𝑏$# 𝑏$% 𝑏#%

Slide 5

Slide 5 text

統計的信頼性評価 • 有向道や有向辺のブートストラップ確率 • 例えば、閾値0.05を越えるものを解釈 5 x3 x1 … … x3 x1 x0 x3 x1 x2 x3 x1 99% 96% 総合効果: 20.9 10% https://lingam.readthedocs.io/en/latest/tutorial/bootstrap.html

Slide 6

Slide 6 text

モデル仮定の評価 • 分析前 – Gaussianity test – ヒストグラム • 連続変数? – 多重共線性 – 領域知識 • 分析後 – 誤差(残差)の独立性評価 • 例えば、HSIC (Gretton et al., 2005) – マルコフバウンダリーによる予測の良さで評価 (Biza et al., 2020) (未実装) – 複数のデータセットでの結果を比較 – 領域知識による評価 6 Wikipediaより

Slide 7

Slide 7 text

DirectLiNGAMアルゴリズム https://lingam.readthedocs.io/en/latest/tutorial/lingam.html (Shimizu et al., 2011) • 因果的順序𝑘(𝑖)の上から下へ順に推定 – 1番上を見つけて、残差を計算 – 残差もLiNGAMモデル: 因果関係は変わらない • p>nの場合への拡張 (Wang & Drton, 2020) – https://github.com/ysamwang/highDNG 7 ú ú ú û ù ê ê ê ë é + ú ú ú û ù ê ê ê ë é ú ú ú û ù ê ê ê ë é - = ú ú ú û ù ê ê ê ë é 2 1 3 2 1 3 2 1 3 0 3 . 1 0 0 0 5 . 1 0 0 0 e e e x x x x x x 0 0 0 0 0 0 0 0 ú û ù ê ë é + ú û ù ê ë é ú û ù ê ë é - = ú û ù ê ë é 2 1 ) 3 ( 2 ) 3 ( 1 ) 3 ( 2 ) 3 ( 1 0 3 . 1 0 0 e e r r r r 0 0 ) 3 ( 2 r ) 3 ( 1 r x3 x1 x2 0

Slide 8

Slide 8 text

• 𝑥! は最初(𝑘 𝑥! = 1): どの変数の子にもならない • どの回帰残差とも独立な変数が最初の変数 因果的順序が最初の変数の同定 8 定理1: 「 は その残差 のどれとも独立 (𝑖は𝑗以外全部)」⟺ 「𝑥) は最初」 ( ) j j j i i j i x x x x x r ) var( ) cov( , - = j x x3 x1 x2 x3 x1 x2

Slide 9

Slide 9 text

背景知識の利用 https://lingam.readthedocs.io/en/latest/tutorial/pk_direct.html • 因果的(半)順序の推定における利用 – 例: 背景知識が 𝑘 𝑥' < 𝑘 𝑥) なら𝑥' が選ばれるまで𝑥) は選ばない • 枝刈りにおける利用 – 𝑘 𝑥' < 𝑘 𝑥) なら 𝑥) を𝑥' の親候補にしない 9 å å + - の親候補 の親候補 i i x j ij ij x j j ij i ols b b x b x : 2 : ) ( ˆ l ) 3 ( 2 r ) 3 ( 1 r x3 x1 x2

Slide 10

Slide 10 text

複数データセット1 (Ramsey et al. 2011, Shimizu, 2012) • c個の集団に対するモデル: – 共通の生成順序:分布とパス係数は違ってもよい • 類似性を利用して精度向上 • https://lingam.readthedocs.io/en/latest/tutorial/multiple_dataset.html ( ) c g e x b x g i i k j k g j g ij g i ,..., 1 ) ( ) ( ) ( ) ( ) ( ) ( = + = å < x3 x1 x2 e1 e2 e3 4 -3 2 x3 x1 x2 e1 e2 e3 -0.5 5 集団1 集団2 10

Slide 11

Slide 11 text

複数データセット2: 経時データ • 同じ人から継続してデータを取っている複数データセット (対応のあるデータ) (Kadowaki et al., 2013) • https://lingam.readthedocs.io/en/latest/tutorial/longitudinal.html 11

Slide 12

Slide 12 text

機械学習モデルの予測メカニズムの解析 (Blobaum & Shimizu, 2017) • 介入して説明変数X1の値を変えると機械学習モデルの予測' 𝑌はどう変わる? – X1を変えればX2, X3, X4も変わる – X1だけ違う値を入力してもダメ 12 𝑥! 𝑥" ' 𝑌 𝑥# 𝑥$ 𝑥! 𝑥" 𝑥# 𝑥$ 𝑦 予測モデル * 𝑦 予測メカニズムのモデル 𝑥! 𝑥" 𝑥# 𝑥$ 因果モデル 𝑥! = 𝑓!(𝑥! の親, 𝑒!) 0 𝑦 = 𝑓 (𝑥", 𝑥#, 𝑥$, 𝑥%) 𝐸(0 𝑦|𝑑𝑜 𝑥! = 𝑐 ) https://lingam.readthedocs.io/en/latest/tutorial/causal_effect.html#identification-of-feature-with-greatest-causal- influence-on-prediction

Slide 13

Slide 13 text

Illustrative example • Auto-MPG (miles per gallon) dataset • MPGの予測値への介入効果が最も大きい変数はど れ? • 特定のMPGの予測値を得るにはどの変数に介入す べきか?(制御) 13 Cylinders Displacement Weight Horsepower Acceleration MPG ! 𝑀𝑃𝐺 Desired MPG prediction Suggested intervention on cylinders 15 8 21 6 30 4

Slide 14

Slide 14 text

時系列 • サブサンプリング: 「低解像度」データ – SVAR: 構造型自己回帰モデル (Swanson & Granger, 1997) – 非ガウス独立なら識別可能 (Hyvarinen et al., 2010) – https://lingam.readthedocs.io/en/latest/tutorial/var.html – VARMAもできる: 過去の誤差からの影響を追加 (Kawahara et al., 2011) • https://lingam.readthedocs.io/en/latest/tutorial/varma.html • 非定常 – 差分が定常と仮定 (Moneta et al., 2013) 14 ) ( ) ( ) ( 0 t t t k e x B x + - = å = t t t x1(t) x1(t-1) x2(t-1) x2(t) e1(t-1) e2(t-1) e1(t) e2(t)

Slide 15

Slide 15 text

未観測共通原因1 15 • 終点変数: (モデル内に)子を持たない変数の同定 「 𝑥" は終点変数かつ潜在交絡変数を親に持たない」 定理 3: 「 𝑥" をその他の変数全てに線形回帰した時の残差と 𝑥" が独立」 x2 x3 x1 x2 x3 x1 生成順序を 下から推定 真 f1 Û https://lingam.readthedocs.io/en/latest/tutorial/bottom_up_parce.html

Slide 16

Slide 16 text

未観測共通原因の存在を許すLiNGAM (Maeda & Shimizu, AISTATS2020) • 未観測共通原因のありそうな変数ペア • 未観測共通原因がない変数ペアの因果の向き 16 𝑥$ 𝑥# 𝑓# 𝑥% 真 出力 𝑥+ 𝑥$ 𝑥# 𝑥% 𝑥+ 𝑓$ https://lingam.readthedocs.io/en/latest/tutorial/rcd.html

Slide 17

Slide 17 text

時系列 • 未観測共通原因ありのSVAR – Malinsky and Spirtes (2018) – Gerhardus and Runge (2020) – ノンパラ – 条件付き独立性 – Python: https://github.com/jakobrunge/tigramite 17

Slide 18

Slide 18 text

非線形モデル 18 x1 x2 e1 e2 正しいモデル 結果𝑥$ を原因𝑥# に非線形回帰 原因𝑥# を結果𝑥$ に非線形回帰 説明変数𝑥7 (= 𝑒7 )と残差は独立 ガウスだと 無相関=独立 𝑥7 = 𝑒7 𝑥8 = 𝑓(𝑥7 ) + 𝑒8 𝑏#" ≠ 0 説明変数𝑥8 と残差は従属 非線形回帰して説明変数と残差が独立か調べる

Slide 19

Slide 19 text

因果的順序を下から推定: 終点変数の同定 • 終点変数: (モデル内に)子を持たない変数 • 終点変数を目的変数にしたときのみ、説明変数と残差が独立になる 19 x2 x3 x1 x2 x3 因果的順序を 下から推定 真 x3 因果的順序を 下から推定 𝑥$ = 𝑒$ 𝑥# = 𝑓#(𝑥$ )+ 𝑒# 𝑥" = 𝑓"(𝑥#, 𝑥$ )+ 𝑒" 見つけた終点変数 𝑥! は分析から除く 見つけた終点変数 𝑥" は分析から除く 一つだけ残ったので終了 𝑥$ = 𝑒$ 𝑥# = 𝑓#(𝑥$ )+ 𝑒# 𝑥$ = 𝑒$ 𝑟# = 𝑥# − 𝑔# (𝑥$ , 𝑥% )と𝑥$ , 𝑥% は独立だが、 𝑟$ = 𝑥$ − 𝑔$ (𝑥# , 𝑥% )と𝑥# , 𝑥% は独立でない… 𝑘 𝑥! < 𝑘 𝑥" < 𝑘 𝑥#

Slide 20

Slide 20 text

R code • http://web.math.ku.dk/~peters/code.html 20

Slide 21

Slide 21 text

条件付き独立性に基づく方法 • GUI: Tetrad – https://github.com/cmu-phil/tetrad • Python: causal-learn (including LiNGAM variants) – https://github.com/cmu-phil/causal-learn • R: pcalg – https://cran.r-project.org/web/packages/pcalg/index.html 21

Slide 22

Slide 22 text

今後の予定 • RCDの非線形版CAM-UV • 潜在因子 • 離散変数との混在 • Overcomplete ICAベースはもう少し先 (開発中) 22

Slide 23

Slide 23 text

潜在因子のLiNGAM (Shimizu et al., 2009) • モデル: – 測定モデルの識別のために各潜在因子に 2つは“ピュア”な観測変数が必要 (Silva et al., 2006; Xie et al., 2020) – このような潜在因子モデルをCausal representationと呼ぶ人もいる • “因子得点”を推定して因果グラフを推測 23 𝒇 = 𝐵𝒇+𝝐 𝒙 = 𝐺𝒇+𝒆 𝑥# 𝑥" ( 𝑓# ( 𝑓" 𝑥! 𝑥$ ? 𝑥# 𝑥" ( 𝑓# ( 𝑓" 𝑥! 𝑥$ 𝑦 + 𝒇 = 𝒈(𝒙) それっぽい??

Slide 24

Slide 24 text

潜在因子のLiNGAM (Shimizu et al., 2009) • モデル: – 測定モデルの識別のために各潜在因子に 2つは“ピュア”な観測変数が必要 (Silva et al., 2006; Xie et al., 2020) – このような潜在因子モデルをCausal representationと呼ぶ人もいる • “因子得点”を推定して因果グラフを推測 24 𝒇 = 𝐵𝒇+𝝐 𝒙 = 𝐺𝒇+𝒆 𝑥# 𝑥" ( 𝑓# ( 𝑓" 𝑥! 𝑥$ ? 𝑥# 𝑥" ( 𝑓# ( 𝑓" 𝑥! 𝑥$ 𝑦 + 𝒇 = 𝒈(𝒙) それっぽい??