gCastle 因果探索アルゴリズムの検証

2025/2/20

gCastleは、因果探索アルゴリズムが実装された因果の構造を学習するツールチェインです。Huaweiのリサーチラボから提供されています。パッケージは、Webアプリを含んでおり、因果探索アルゴリズムがGUIベースの操作で検証できるようになっています。 gCastle 概要  因果探索アルゴリズムが実装されており、Webアプリを使用してアルゴリズムの動作が検証できます。  GCastleの名称は、Gradient-based Causal Structure Learning pipeline. の頭文字か ...

ReadMore

クレジット・カードの種別と利用額の最適化 YLearnによる因果推論(2)

2025/2/20

YLearn因果推論パッケージを使ったケース・スタディを使ってYLearnの機能を解説します。YLearnの因果推論パイプラインを使ったマーケティング上の分析の一つになります。クレジット・カードのグレードを更新した場合の効果の推論です。 機能と仕様  以下、簡単に機能をまとめ、最後にケーススタディを使って動作を確認します。ケース・スタディでは、Kaggleの実際のデータセットを使います。 DAG グラフと交絡因子  観測されていない変数はconfounding arcとして定義し、下の図1では(黒の点線) ...

ReadMore

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

2025/2/20

 因果推論はAIシステムが、イベント間の真の因果関係をよりよく理解する助けになります。中国製のLLMが最近、話題(注1)になっていたので、データサイエンス分野で中国の因果推論に関する取り組みとツールについて評価します。  因果推論や因果探索のツールとして、Huaweiが提供しているgCastleと、因果探索・因果推論ツール、ylearnを使います。gCastleはPyTorchで実装された因果探索パッケージです。因果関係に関連した代表的なアルゴリズムが実装されて、検証ツールが提供されています。Huawei ...

ReadMore

Jupyter-notebookがAnaconda Navigatorから起動できない問題

2025/2/6

新しいAnaconda Navigatorをインストールしたところ、jupyter-notebook(7.3.2)がNavigatorから起動できない問題がありました。 Navigatorのエラーメッセージは、次のようになっています。 【The file /Users/xxx/anaconda3/bin/Jupyter_mac.command does not exist.】 jupyter_mac.command does not exist.  問題は、インストールまたはNavigatorが参照してい ...

ReadMore

Apple Silicon Mac 用 Anacondaバージョン更新・インストール

2025/2/5

Apple Silicon用に新しいバージョンのAnacondaがリリースされていたので、Navigatorの更新を兼ねてインストールします。 (Mac OSの更新(Sequoia15.3)によって、使用中のNavigatorが起動しなくなったため) Anaconda Navigatorのインストール  以下のAnacondaのサイトにアクセスします。最近のAIに対する、人と資本、計算リソースの流れを反映した画面に様変わりしています。 https://www.anaconda.com  【1】画面左上のP ...

ReadMore

グラフィカル・モデルを基にした因果探索

2025/2/18

Rによるベイジアンネットワークを用いた因果探索。 有向グラフ因果モデル(DGCMs)、またはDAGは、因果関係を説明し、データから真の因果の関係を探索するために計算に用いる方法です。 causal-learnやcausalpyというpythonの因果探索ライブラリを評価しました、Rにも同様のライブラリが提供されています。ここでは、CRANに登録されているRのライブラリpcalgとbnlearnに実装されているいくつかの因果探索アルゴリズムを評価します。 2025年の10大リスク  ユーラシア・グループは、 ...

ReadMore

JupyterノートブックでRを使う方法

2025/1/20

Pythonの開発環境としてJupyter notebookがよく使われています。RでもPython同様にJupyter によるコードの編集、実行環境が利用できます。データサイエンスでは、主にJulia, Python, Rという言語が使用されますが、このイニシャルを繋げるとJupyterになります。 Jupyter notebook  R環境設定  JupyterからRを使うには、Rを起動したコマンドプロンプトから以下のコマンドを使います。  使用しているバージョンのR環境にJupyterのカーネルのパ ...

ReadMore

ドル円為替レートと物価上昇の関係:非線形モデル

2024/12/29

【マネーサプライと物価上昇の因果推論】で、線形モデルを適用して因果関係を調べてみました。物価上昇がドル円為替レートと因果関係があり、国内の金融政策には影響を受けていないことを示しました。ここでは、このドル円為替レートと物価上昇の関係に非線形なモデルを適用した例を示します。 USDJPY為替レートと物価上昇  最初に、【マネーサプライと物価上昇の因果推論】で使った同じデータセットを読み込みます。 図1 CPIーUSDJPY為替レートのデータセット  このデータセット(期間2001年12月〜2023年11月の ...

ReadMore

Apple Silicon Mac の R バージョン更新・インストール

2024/12/25

ARM Mac(Apple silicon)用の新しいバージョンの R バイナリパッケージがリリースされていたので(R4.4.2 released on 2024/10/31) 更新します。 CRANから Rバイナリパッケージをインストール 以下のCRANのサイトにアクセスしてダウンロードします。 https://cran.rstudio.com "Download R for macOS" をクリックします。  Linux(Debian, Fedora/Redhat, Ubuntu) またはWindow ...

ReadMore

書評:Essential Math for AI

2024/12/23

Essential Math for AI:Next-Level Mathematics for Efficient and Successful AI Systems Hala Nelson Essential Math for AI:Next-Level Mathematics for Efficient and Successful AI Systems  本書は、機械学習に関してトピックごとに関連する数学が挿入してあります。数学の理論や証明、プラミングコードは記述してありません。  読者として、数 ...

ReadMore

システム リスクモデル

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の上に構築されたメタパッケージになっています。 ↩︎

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