因果探索とGoogle Colab上で試せるPythonコーディング
因果探索とPythonコーディング
Google Colab上で試せるPythonコードとして、因果探索の一例を紹介します。ここでは、因果探索ツールの各種ライブラリを使った基本的な例を示します。
気温、アイスクリーム売上、そして水泳事故件数の生成データに基づいて、背景の因果関係を考慮せずに、Pythonの因果探索ライブラリを使用して因果構造を推定してみましょう。この場合、特に利用しやすいのがcausal-learnやLiNGAMです。それでは、コードの例を以下に示します。
①
causal-learnを用いた因果探索
以下は、causal-learnライブラリのPCアルゴリズムを使用したコード例です。
# 必要なライブラリをインストール
!pip
install causal-learn matplotlib networkx numpy pandas
# ライブラリのインポート
import
numpy as np
import
pandas as pd
import
matplotlib.pyplot as plt
from
causallearn.search.ConstraintBased.PC import pc
import
networkx as nx
# データ生成:気温、アイスクリーム売上、水泳事故件数
np.random.seed(42)
n_samples
= 300
temperature
= np.random.uniform(20, 40, n_samples) # 気温
ice_cream_sales
= temperature + np.random.normal(0, 2, n_samples) # アイスクリーム売上
swimming_accidents
= temperature + np.random.normal(0, 1, n_samples) # 水泳事故件数
# データフレームにまとめる
data
= pd.DataFrame({
'Temperature': temperature,
'IceCreamSales': ice_cream_sales,
'SwimmingAccidents': swimming_accidents
})
# 因果探索(PCアルゴリズム)
X
= data.to_numpy()
cg
= pc(X, independence_test_method="gaussian", alpha=0.05)
# 因果グラフの構築
causal_graph
= nx.DiGraph()
# 隣接行列を取得 - get_adjacency_matrix() は存在しないため .graph を使用
adj_matrix
= cg.G.graph
# ネットワークXのエッジを手動で作成
for
i in range(adj_matrix.shape[0]):
for j in range(adj_matrix.shape[1]):
if adj_matrix[i, j] != 0:
causal_graph.add_edge(data.columns[i],
data.columns[j], weight=adj_matrix[i, j])
# グラフの可視化
pos
= nx.spring_layout(causal_graph)
nx.draw(causal_graph,
pos, with_labels=True, node_size=3000, font_size=10)
nx.draw_networkx_edge_labels(causal_graph,
pos, edge_labels={(u, v): f"{d['weight']:.2f}" for u, v, d in
causal_graph.edges(data=True)})
plt.title("Causal
Graph Estimated by PC Algorithm")
plt.show()
出力結果
Requirement
already satisfied: causal-learn in /usr/local/lib/python3.11/dist-packages
(0.1.4.1)
~省略~
Requirement
already satisfied: patsy>=0.5.6 in /usr/local/lib/python3.11/dist-packages
(from statsmodels->causal-learn) (1.0.1)
Depth=1, working on node 2: 100% 3/3 [00:00<00:00, 213.63it/s]
causal-learn
- 概要 causal-learnは、Tetrad JavaコードのPython翻訳および拡張版で、古典的および最新の因果発見アルゴリズムを実装しています。CMU-CLeaRによってメンテナンスされています。
- 特徴
- 制約ベースの因果発見方法(例 PCアルゴリズム)
- スコアベースの因果発見方法(例 GESアルゴリズム)
- 制約付き関数因果モデルに基づく因果発見方法
- 隠れた因果表現学習
- 順列ベースの因果発見方法
- グランジャー因果関係の分析
- カスタム方法の構築に役立つユーティリティ
- 独立性テスト
- スコア関数
- グラフ操作
- 評価ツール
- 適用例: 因果グラフの可視化や実世界のシナリオでの因果発見に適しており、ベンチマークデータセットも提供されています。詳細はcausal-learnのドキュメントで確認できます。