システム リスクモデル

YLearnによる因果推論(1) 概要とセットアップ

 因果推論はAIシステムが、イベント間の真の因果関係をよりよく理解する助けになります。中国製のLLMが最近、話題(注1)になっていたので、データサイエンス分野で中国の因果推論に関する取り組みとツールについて評価します。

 因果推論や因果探索のツールとして、Huaweiが提供しているgCastleと、因果探索・因果推論ツール、ylearnを使います。gCastleはPyTorchで実装された因果探索パッケージです。因果関係に関連した代表的なアルゴリズムが実装されて、検証ツールが提供されています。HuaweiのgCastleのは、次回に解説し、本稿では、ylearnについて評価します。

YLearnの特徴

 ylearn1は、因果探索・因果推論のAPIをまとめたパッケージです。因果推論のパイプラインという概念を用いて、因果探索から因果関係のモデル化、因果推論、評価までを一貫して行えるAPIを提供しています。

  • Counterfactual推論のためのAPI
  • DAGの把握
  • DML(Double/Debiased Machine Learning)2を含む推論ツール
  • Policy Interpreter - 最適化のためのソリューション
  • CATE(Conditional ATE)を計算するのにDML(Double Machine Learning)を使います。推論アルゴリズムには、他に一般化ランダムフォレスト、決定木、深層ニューラルネットワークなどが利用できます。

 因果探索によってSCM(構造因果モデル),DAG(有向非周期グラフ)の構造から因果関係を把握し、DAGをモデルに因果推論を進め、機械学習でパラメータを推定し、モデルの評価を実施します。

 探索→モデル→推定→ポリシーのパイプラインを構成するAPI Whyを提供します。

 推論パイプラインのコンポーネントは以下に示します。

YLearnの推論パイプライン

  • 探索:観測データから因果関係を探索します。
  • モデル:CausalGraphの様式で因果関係を説明し、他の関連操作をCausalModelで識別します。
  • 推定:様々な技術で因果を推定します。DMLを含みます。
  • ポリシー:最適なポリシーを選択します。
  • インタープリター:因果の影響とポリシーを説明します。

図1 YLearnの因果推論パイプライン

 パイプラインはトレーニングデータから始めます。因果探索を使って、データから因果の構造を明らかにします。

  1. CausalGraph DAGのネットワーク構造を保持します。
  2. CausalGraphはCausalModelに送られ、因果の影響は識別され、統計的な推定に送られます。
  3. 因果の影響と他の変数の間のモデルの関係をトレーニングデータで訓練します。(トレーニングデータの中の因果の影響)
  4. 因果の影響を予測するために、訓練済みの推定モデルを使います。推定した因果の影響を変換します。

  1. CausalGraph
xx = {'X':['W'], 'W':[], 'Y':['W']}
cg = CausalGraph(causation=xx)

cgは因果関係をコード化します。

2. 因果の識別

 P(Y| do(X=x)) 
 => identify method
 cm = CausalModel(causal_graph=g)
 cm.identify(treatment={'x'}, outcome={'Y'}, identify_method=('backdoor','simple'))

3. 因果の影響の推定

 機械学習と因果推論の交わりに焦点を当てており、機械学習モデル、共通のアプローチに従います。つまり以下のリストに示す形式です。

 与えられたデータセットに、任意の推定モデルを適用します。

  1. Pandasデータフレームにtreatment, outcome.adjustment,covariateのデータセットの様式をセットする
  2. fit()メソッドを使ってモデルを学習する。
  3. estimate()メソッドでテストデータの因果の影響を推定する。

 APIはwhyで提供されます。

from ylearn import why

 why はylearnの全てのAPIの関数をカプセル化しています。以下、使用例です。

from sklearn.datasets import fetch_california_housing
from ylearn import Why
housing = fetch_california_housing(as_frame=True)
data = housing.frame
outcome = housing.target_names[0]
data[outcome] = housing.target

why = Why()
why.fit(data, outcome, treatment=['AveBedrms', 'AveRooms'])

print(why.causal_effect())
               mean       min        max       std
AveBedrms -0.006393 -1.264421  11.482253  0.132226
AveRooms  -0.068143 -1.728602   0.748265  0.054556

 本APIはCounterfactual推論のためのAPIも提供しています。

 APIで提供されるwhatif()はcounterfactual 推論を実行するソリューションを提供します。

概要

 コンセプトや仕様は良くできています。ツールとして更新されておらず、AppleSilicon Mac用に、多くの推論メソッドがコンパイルされていません。ARMでなくx86用のオブジェクトがosxのパッケージに含まれています。そのため、モデルのクラスに含まれる推定メソッドや描画が機能しません。

 Why APIの一部を使ってcounterfactual推論はできますが、現行バージョンでは、Double MLなどが動作しないため、ツールの重要なコンセプトである推論のパイプラインは機能しません。

 LinuxやWindowsバージョンで機能の動作は未確認です。他のバージョンでは全機能が使用することができるかもしれません。ylearnのosx版がARMを対象としたバージョンに更新されるかどうかは不明です。

 Apple Silicon Macに対応したDAGの描画や因果探索ツール、pcalg, igraph, Doubel ML等、他のツール、メタパッケージが提供されているので、Apple Siliconユーザーは他の選択肢があります。

 こちらで動作確認したインストールパッケージのセットアップと動作環境を以下にまとめておきます。

YLearnのセットアップ( Apple Silicon Mac)

 インストールにはいくつかの手続きが必要です。

 pipやconda を使って通常の手続きでインストールするとエラーが発生します。そのため、ここでは以下の手順でローカルファイルからcondaを使ってインストールします。

1. YLearnインストール

パッケージをローカルフォルダにダウンロードし、ローカルフォルダからインストールします。

2. 動作環境の構築

 最新のバージョンでは、実行時にエラーが発生します。numpyやnetworkxのバージョンを落とす必要があります。そのため、最新の(base)環境とは別にpython3.11の仮想環境を作り、その上で旧バージョンのnumpyとnetworkxをインストールします。

YLearnインストール

【1.】パッケージのダウンロード

anaconda.orgのサイトで、ylearnを検索します。

https://anaconda.org

パッケージが表示されたら、該当ライブラリを選択します。

図2 anaconda.orgサイトの検索結果

 以下の画面が表示されます。

図3 YLearnパッケージ

 ここで、4つ並んでいるConda, Files Labels, Badgesのタブメニューのボタンの中で、Filesボタンを選択します。

 ファイルのリストが表示されます。

図4 Ylearn パッケージファイル

 該当するホストのファイルを選択します。Mac用はosxなので以下の名称にファイルを選択します。

osx-64/ylearn-0.2.0-py311h349b758_0.conda

 ファイル名をクリックすると、ブラウザがダウンロードを許可するか聞いてくるので、許可するを選択して下さい。

 ダウンロードが開始されます。

 ダウンロードしたファイルは、.condaという拡張子のファイルで圧縮してあります。これには、インストールに必要な全てのファイルが含まれています。

【2. 】インストール

ダウンロードしたファイルを(base)環境のpkgsディレクトリに移動します。

anacondaでpython環境を構築した場合、/opt/anaconda3/の下か、ユーザが指定したディレクトリの配下にbase環境が設定されています。

ダウンロードしたファイルからpkgsディレクトリの下にダウンロードしたファイルを移動して下さい。

mv /Users/xxx/Downloads/ylearn-0.2.0-py311h349b758_0.conda /opt/anaconda3/pkgs/.

condaを使ってインストールします。

conda install /opt/anaconda3/pkgs/ylearn-0.2.0-py311h349b758_0.conda

 ファイルが以下のディレクトリに展開されます。

/opt/anaconda3/pkgs/ylearn-0.2.0-py311h349b758_0/lib/python3.11/site-packages

 ライブラリが以下のパスにインストールされます。

/opt/anaconda3/lib/python3.11/site-packages

 pythonがインポートして、ソースコードが参照するのは、このディレクトリ内に展開されているylearnディレクトリの下にあるファイルです。

 (base)環境から使えるようにするには、ここにパスを通す必要がありますが、ここではパスの設定を行いません。yleanがnumpyやnetworkxの旧バージョンの仕様のAPIやデータ型を使っているため、ylearn用に仮想環境を構築します。

仮想環境の構築

 パッケージマネージャcondaの機能を使って、python 3.11の環境を作ります。以下のコマンドを実行します。

【python3.11環境の作成と起動】

conda create -n python311 python=3.11
conda activate python311

 作った環境をactivateするとプロンプトが(base)から(python311)に切り替わります。

(python311) xxxxMacBook-Air:site$

仮想環境を解除する場合は、以下のコマンドを使用します。

conda deactivate

これで元の(base)環境に戻ります。

(base) xxxxMacBook-Air:site$

【Jupyter Notebook用にipykernelカーネルのインストール】

 python3.11の仮想環境を起動して、その環境にjupyter用のカーネルをインストールします。Jupyter Notebookの新規ファイルメニューから(python311)のカーネルが選択できるようになります。

pip install ipykernel
(python311) HostnameMacBook-Air:site-packages username$ pip install ipykernel
Collecting ipykernel
  Downloading ipykernel-6.29.5-py3-none-any.whl.metadata (6.3 kB)
Collecting appnope (from ipykernel)
  Downloading appnope-0.1.4-py2.py3-none-any.whl.m ......
......

【仮想環境のカーネルをjupyterに追加】

python -m ipykernel install --user --name=python311

 仮想環境がjupyterに追加されているか確認。

jupyter kernelspec list

 これによりjupyter notebookのメニューからpythonの仮想環境を実行環境として選択できるようになります。

 下の図5は、jupyter notebookの実行環境を選択するポップアップメニューです。jupyter notebookの右上にあるpython311表示されている部分をマウスでクリックしたときに表示されます。

図5 jupyter notebook 実行環境選択メニュー

【ylearnディレクトリのパス】

python311環境ができたので、この環境でylearnが使えるように、作成した仮想環境の下にインストールしたylearnのディレクトリをコピーします。

pythonが実行時に参照しているパスを確認します。コマンドプロンプトからpythonを起動します。

(python311)$python

以下のスクリプトを実行します。

import sys
print(sys.path)
>>> import sys
>>> print(sys.path)
['', '/opt/anaconda3/envs/python311/lib/python311.zip', '/opt/anaconda3/envs/python311/lib/python3.11', '/opt/anaconda3/envs/python311/lib/python3.11/lib-dynload', '/opt/anaconda3/envs/python311/lib/python3.11/site-packages']
>>> 

実行時に参照するパスが表示されます。ylearnを動かすには、ここにylearnのパスを追加するか、ylearnのディレクトリを参照先に移動します。

(base)環境でylearnを動かすことはないので、python3.11/site-packages/の下に移動させます。以下のコマンドでは、ディレクトリをsite-packagesの下にコピーしています。

作成した仮想環境の下に、ylearnライブラリ(二つのディレクトylearn、およびylearn-0.2.0.dist-info)をコピーします。

cd /opt/anaconda3/envs/python311/lib/python3.11/site-packages
cp -R /opt/anaconda3/lib/python3.11/site-packages/ylearn .
cp -R /opt/anaconda3/lib/python3.11/site-packages/ylearn-0.2.0.dist-info  .

【networkxとnumpyのインストール】

ylearnが内部で使用しているライブラリをインストールします。networkxとnumpyは旧バージョンを指定してインストールする必要があります。以下のバージョンを指定します。

  • networkx バージョン2.5
  • numpy バージョン 1.23.5
conda install -c conda-forge networkx==2.5
conda install -c conda-forge numpy==1.23.5

【その他の必要なライブラリのインストール】

その他、ylearnの動作に必要なライブラリをインストールします。condaを使ってインストールして下さい。

  • matplotlib
  • igraph
  • pandas
  • scikit-learn
  • scipy
  • pydot
  • tqdm
conda install -c conda-forge scikit-learn
conda install -c conda-forge scipy
conda install -c conda-forge matplotlib
conda install -c conda-forge igraph
conda install -c conda-forge pandas
conda install -c conda-forge pydot
conda install -c conda-forge tqdm

python3.11でYLearnを実行する環境が整いました。

次に、Ylearnを用いて分析したケーススタディを見ていきます。

参考

参考資料

  1. J. Pearl. Causality: models, reasoing, and inference.
  2. M. Funk, et al. Doubly Robust Estimation of Causal Effects.
  3. V. Chernozhukov, et al. Double Machine Learning for Treatment and Causal Parameters. 
  4. V. Chernozhukov, et al. Double/debiased machine learning for treatment and structural parameters.
  5.  W. Newey and J. Powell. Instrumental Variable Estimation of Nonparametric Models.

注1

 たまたま、中国製のAIアシスタントDeepSeekのリリースが、某企業の株価急落と重なったために、多くの市場関係者や、アナリストらが二つのイベントを結びつけて解説していましたが、関連性はありません。大規模言語モデル(LLM)はアテンション・モデルによるトランスフォーマ・アーキテクチャを基にしており、革新的なアーキテクチャが新規に登場したのでも、該当企業の株主がAIアシスタントのリリースを理由に売却したのでもありません。生成AIが計算リソースを消費するのは変わりません。

 中国のWebサイトのコンテンツの数は、日本や米国のWebサイトのコンテンツ数と比較して、その人口の割に大きな差があります。その理由やGoogleの検索とBaiduの検索の大きな相違点がわかっていれば、二つのイベントを結びつけることはないでしょう。新型コロナが流行していた時も、以前存在していたコンテンツが次々に消えていく現象がありました。

 LLMのAIアシスタントに関しては、思想的に隔たりのあるAIモデルが世に出ることはあります。西洋、東洋、政治哲学に関わらず、バランスの良い知識体系を身につけた上で、隔たりがあり得ることを承知した上で使った方が良いでしょう。当然、LLMでも学習内容によって依拠している社会の思想的な傾向を持ちます。

 1世紀前の全体主義的な思想統制を振り返ると、教育者が実施するか、システムが実施するかの違いはありますが、電子的なツールを使う方が便利で効率が良さそうなことは推測できます。対象がどのような分野であれ、物事の判断や価値基準について、盲目的に信用する前に、土台となる教養とバランスの取れた知識体系は必要です。

 某企業の株価の急変も、中国製のAIアシスタントとは関係ありません。また、ここでも取り上げているHuaweiのgCastleはPyTorchで実装されています。HWのインターフェイスはPyTorchが抽象化しているのでPyTorchのAPIを使って容易にアルゴリズムを実装することができます。コアのテクノロジーがどこにあるかを知っておくのは有用です。

  1. ylearnのネーミングは"learn why" のシャレだそうです。 ↩︎
  2. DMLについては、参考資料2,3,4を参照して下さい。また、"DoubleML"という同じ名称のPythonとRで利用できる因果推論ツールがあります。こちらは、scikit-learnとmlr3の上に構築されたメタパッケージになっています。 ↩︎

-システム, リスクモデル
-, ,