これまでの統計学や機械学習の多くが、相関を元に関係性を把握してきました。
ただし、何が原因でそうなっているかという本当に知りたいことは不明でした。
因果探索とは、データから因果構造を推定する方法を指します。
それは、因果の方向性や大きさを含み、これまでの統計学や機械学習とは違った原因とは何かを探していく方法です。
ここでは、統計的因果探索の代表的なアプローチであるLiNGAM(Linear Non-Gaussian Acyclic Model)を紹介します。
数理的なアプローチは他の資料に譲るとして、実用にはどういった点を注意すべきか、どんな応用モデルがあるかについて中心に説明します。
前提条件
LiNGAMを適用する前に、適用するデータの前提条件が4つあります。
(1)Linear
線形な(足し合わせで表現できる)構造方程式で示すことができるとする。
構造方程式とは、下記のような式です。
簡略化するとxは何で、yは何で表されるかを示すことができる式です。
(2)Non-Gaussian
構造方程式の誤差項は非正規(ガウス)分布である。
(3)Acyclic
非循環な因果グラフ(Directed Acyclic Graph)で表すことができるとする。
(4)構造方程式
未観測の要因が存在しない。つまり、構造方程式で因果構造全てを表すことが可能であるとする。
各誤差項は互いに独立であり、各変数は連続値であるとする。
*各誤差項はxやyなどで表せていない値の動きを全て表現できるとする。
調べていて、かなり強い前提を置いているのでは?というところが分かりました。
前提条件の理由
前提は4つありますが、一番気になるのはなぜ「構造方程式の誤差項は非正規(ガウス)分布である。」のかでしょう。
*変数の独立性や分布のガウス性の成否は、一般的な方法で求めることができるので割愛します。
少し調べてみるとLiNGAMを、セミパラメトリックアプローチとされています。
セミパラメトリックアプローチとは、関数型には仮定を置くものの、構造方程式の誤差項(外生変数ともいう)の分布には仮定を置きません。
LiNGAMは誤差項を「正規分布以外」という仮定であるので、それ以外の分布はすべて取りうる(=仮定を置いていないのと同じ)というスタンスを取っているため、セミパラメトリックアプローチに分類されています。
そうすると、何が嬉しいのでしょうか?
そうしなければ、何に困るのでしょうか?
答えは、誤差項が正規分布であると因果の方向が推定できないのです。
(因果探索: 基本から最近の発展までを概説 P.30)
平均や分散が同じで、正規分布であるとx1かx2どちらがどちらか判断がつきません。
そのため、誤差項は非正規分布であるという仮定を置いています。
実用時の懸念点
4つの前提で気になる点は複数あります。
(1)Linear
線形な(足し合わせで表現できる)構造方程式で示すことができるとする。
→ 本当に因果関係は線形で表せるのか?
例えば、コンビニで購入する経験を初めてすることと、2回目にすることの1回の差は同じだろうか?
(2)Non-Gaussian
構造方程式の誤差項は非正規(ガウス)分布である。
→ 正規分布は実世界のデータではなかなか見かけない(特に購買関係)ので問題ないか。
もし存在した場合はその変数は抜くのか?加工するのか?
(3)Acyclic
非循環な因果グラフ(Directed Acyclic Graph)で表すことができるとする。
→ 一般的に因果は循環しうるのでは?
例えば、購買活動でいい体験が得られた場合は、もう1度経験しようとする動機が生まれるのではないか?
(4)構造方程式
未観測の要因が存在しない。つまり、構造方程式で因果構造全てを表すことが可能であるとする。
各誤差項は互いに独立であり、各変数は連続値であるとする。
→ すべての要因を観測できていることはありうるのか?
*統計的因果推論の傾向スコアマッチングでも問題になりますね。
・・・のように、いろいろな疑問点が浮かんできますね。
そのまま推定すると、前提条件から外れているため、因果構造の推定精度は落ちることが予想されますね。
その対処には、複数の応用モデルが存在します。
応用モデルおよびPythonモジュール
下記で簡単にインストールが可能です。
pip install lingam
テストコードはLiNGAM – Githubのexampleディレクトリで利用可能です。
下記で紹介しているモデルの他にもさまざまなモデルが存在します。
DirectLiNGAMはよく使いそうなので、解説を追加しておきました。
DirectLiNGAM
回帰分析の残差を利用したモデル。LiNGAMより性能が良いとされている。(ビッグデータに基づくモデリング -生体・医療への適用を例として-より)
DirectLiNGAM アルゴリズム
日本語で良い資料がなかったので同資料をコピーしています。
回帰分析を行い、その残差をさらに回帰分析することを繰り返す方法です。意外と簡単ですね。
非線形モデル
巡回モデル
未観測の要因ありモデル
離散変数モデル
時系列モデル
その他にも多くのモデルが提唱されていますので、ぜひ試して記事を書いてみてください!
おまけ:LiNGAMの解き方
1. 独立成分分析(ICA)
DirectLiNGAMと比較してICALiNGAM呼ばれる理由でもある。
2. 復元行列WをAの逆行列から求める
3. ハンガリアン法による最小化
4. 行の順序入れ替え
ICAは行の識別性がないので、入れ替える必要がある。
5. 単位行列Iを除く
6. 因果方向・効果量を特定する
結果. 構造方程式で示すことができる形となる
おまけ:評価指標について
全体的な適合度はカイ二乗値。つまり、期待値からどれくらい値が外れているか(=有意な差があるか)の指標で判断します。
(因果探索: 基本から最近の発展までを概説 P.37)
最後に
今回は、統計的因果探索のLiNGAMを紹介しました。
「因果構造を把握することで、何をすれば購買につながるのか?」ということは全世界のマーケターをはじめ、購買に関係する社会人は知りたいでしょう。
ただ、実データで利用するとしても問題点があります。
科学的なデータとは違い、そもそもの答えが分からないのです。
心理的な背景がどうなっているか、それがどうなるかは私たちの知りうる範囲ではありません。
そのため、中々試されないという問題があります。
なぜなら、時間を掛けて上手く行くかどうかわからないことを試す余力はないからです。
何度も何度も実証を重ねて、一般的な因果構造を理解するとどれくらい儲かるのでしょうか?
投資対効果が全く分からないのです。
かつ、個人によって因果構造が違うのではないかという懸念もあります。
一般的な科学的モデルであれば、因果構造は一定です。
経験や環境によってヒトは判断を変えうるのです。
それを推定できるのでしょうか?
そのようにいろいろと問題は山積していますが、私はまずは1つやってみなければ始まらないと思っており、実案件の空き時間でテストをする予定を立てております。
ISIDで既にサービス化されているらしいので、そちらも要チェックですね。
色々と認識違いがあるかもしれませんが、その際はコメントいただけると幸いです。
皆さんもぜひ試してください!
参考文献
発明者の清水さんをはじめ、多くの方の書籍・文献を参考にさせていただきました。
統計的因果探索 (機械学習プロフェッショナルシリーズ)
因果探索: 基本から最近の発展までを概説
LiNGAM: Non-Gaussian methods for estimating causal structures.
つくりながら学ぶ! Pythonによる因果分析 (Compass Booksシリーズ)
etc…