因果探索とGoogle Colab上で試せるPythonコーディング

因果探索とPythonコーディング

Google Colab上で試せるPythonコードとして、因果探索の一例を紹介します。ここでは、因果探索ツールの各種ライブラリを使った基本的な例を示します。

 

気温、アイスクリーム売上、そして水泳事故件数の生成データに基づいて、背景の因果関係を考慮せずに、Pythonの因果探索ライブラリを使用して因果構造を推定してみましょう。この場合、特に利用しやすいのがcausal-learnLiNGAMです。それでは、コードの例を以下に示します。

 

   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,workingonnode2:100%                  3/3[00:00<00:00,213.63it/s]



causal-learn

  • 概要  causal-learnは、Tetrad JavaコードのPython翻訳および拡張版で、古典的および最新の因果発見アルゴリズムを実装しています。CMU-CLeaRによってメンテナンスされています。
  • 特徴
    • 制約ベースの因果発見方法(例  PCアルゴリズム)
    • スコアベースの因果発見方法(例  GESアルゴリズム)
    • 制約付き関数因果モデルに基づく因果発見方法
    • 隠れた因果表現学習
    • 順列ベースの因果発見方法
    • グランジャー因果関係の分析
    • カスタム方法の構築に役立つユーティリティ
      • 独立性テスト
      • スコア関数
      • グラフ操作
      • 評価ツール
  • 適用例: 因果グラフの可視化や実世界のシナリオでの因果発見に適しており、ベンチマークデータセットも提供されています。詳細はcausal-learnのドキュメントで確認できます。


このブログの人気の投稿

小論文 統計的因果推論の現場適用による排泄ケアの展望

排泄ケア相談支援員の育成に向けて

解説 排泄ケアの相談支援計画書作成のためのチェックリスト