py-why/dowhy

DoWhy is a Python library for causal inference that supports explicit modeling and testing of causal assumptions. DoWhy is based on a unified language for causal inference, combining causal graphical models and potential outcomes frameworks.

DoWhy – Pythonにおけるエンドツーエンド因果推論

何であるか

  • 因果的な質問(「もし介入したらどうなるか?」「この結果の原因は何か?」「異常の根本原因は何か?」)に答えることができるPythonライブラリ。
  • 2つの主要な因果推論フレームワークを統合:グラフィカル因果モデル(Pearlのdo計算)と潜在結果アプローチ
  • PyWhyエコシステムの一部であり、因果に関するツールに焦点を当てています。

主な機能

機能 実現可能なこと
効果推定 因果効果の特定、平均または条件付き処置効果の計算、インストルメント変数の使用など
因果的影響の定量化 メディエーション分析、直接/間接効果の強さ、内在的影響測度
仮想/反事実分析 介入分布からのサンプル生成、個々の人の反事実結果の計算
根本原因分析と説明 異常を特定の変数に帰属、分布の変化を説明、特徴量の重要度を順位付け
反証/偽証 ランダムな共通原因、プラセボテストなどの堅牢性チェックを実行し、仮定が異なる場合に因果主張が成り立つか確認

一般的なワークフロー(4ステップ)

  1. モデル – データ、処置/アウトカム名、因果グラフ(NetworkX、DOTなど)を提供。
  2. 識別 – DoWhyがdo計算を適用し、推定量(因果効果の数学的表現)を導出。
  3. 推定 – 統計的推定器(傾向スコアマッチング、線形回帰、EconMLのDMLなど)を適用して効果を計算。
  4. 反証 – 自動的に1つ以上の偽証テストを実行し、堅牢性を評価。

クイックスタート

# 最新安定版をインストール
pip install dowhy          # または `conda install -c conda-forge dowhy`
from dowhy import CausalModel
import dowhy.datasets as ds

# 合成データセットを読み込み
data = ds.linear_dataset(beta=10, num_common_causes=5,
                         num_instruments=2, num_samples=10000,
                         treatment_is_binary=True)

model = CausalModel(data=data["df"],
                    treatment=data["treatment_name"],
                    outcome=data["outcome_name"],
                    graph=data["gml_graph"])  # graphはNetworkX DiGraphでも可

identified_estimand = model.identify_effect()
estimate = model.estimate_effect(identified_estimand,
                                 method_name="backdoor.propensity_score_matching")
refute_res = model.refute_estimate(identified_estimand, estimate,
                                   method_name="random_common_cause")
print(estimate)
print(refute_res)

ライブラリは仮定の要約、識別された推定量、数値的推定値、反証結果を読みやすい形式で出力します。

グラフィカル因果モデル(GCM)拡張

  • 効果推定を超えて、DoWhy-GCMでは各ノードに明示的な関数的メカニズムを持つ構造的因果モデル(SCM)を定義できます。
  • これらのSCMをデータに適合させ、適合度を評価した後、以下のタスクを実行できます:
    • 根本原因の帰属 (gcm.attribute_anomalies)
    • 介入サンプリング (gcm.interventional_samples)
    • 反事実クエリ
  • 例(X → Y → Z):
import networkx as nx, pandas as pd, numpy as np
from dowhy import gcm

# 合成データ
X = np.random.normal(size=1000)
Y = 2*X + np.random.normal(size=1000)
Z = 3*Y + np.random.normal(size=1000)
df = pd.DataFrame(dict(X=X, Y=Y, Z=Z))

scm = gcm.StructuralCausalModel(nx.DiGraph([('X','Y'),('Y','Z')]))
gcm.auto.assign_causal_mechanisms(scm, df)
gcm.fit(scm, df)

# 異常なZ値の根本原因
anomaly = pd.DataFrame(dict(X=[0.1], Y=[6.2], Z=[19]))
print(gcm.attribute_anomalies(scm, "Z", anomaly))

学習の場所

  • 完全なドキュメントとチュートリアル: https://py-why.github.io/dowhy/
  • 例のノートブック(効果推定、根本原因分析、EconMLによるCATEなど)
  • Microsoft ResearchとPyConの動画ウェビナー(READMEにリンクあり)
  • 学術論文:arXiv 2020(コアDoWhy)、JMLR 2024(DoWhy-GCM)

コミュニティと貢献

  • 質問用Discordチャット: https://discord.gg/cSBGb3vsZb
  • GitHubでイシューを報告;通常のプルリクエストワークフローで貢献を歓迎します。

まとめ DoWhyは、因果推論の重い数学を隠しつつ、グラフ、推定器、堅牢性チェックの完全な制御を提供する洗練された高レベルAPIを提供します。相関を超えて因果に基づいた意思決定が必要なデータサイエンティスト、研究者、エンジニアに適しています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト