erdogant/bnlearn
Python package for Causal Discovery by learning the graphical structure of Bayesian networks. Structure Learning, Parameter Learning, Inferences, Sampling methods.
bnlearn – ベイジアンネットワーク学習および因果分析のためのPythonライブラリ
機能 – bnlearn は、確率的グラフィカルモデル(ベイジアンネットワーク)を構築、学習、クエリするためのツールです。以下の全プロセスをカバーしています:
- 構造学習 – BIC、K2、BDeuなどの古典的スコアと、全探索、勾配上昇、Chow-Liu、TANなどの探索戦略を用いて、データを最もよく説明する有向非巡回グラフ(DAG)を発見します。
- パラメータ学習 – 不完全なデータでも、指定されたDAGに対する条件付き確率表(CPT)を推定できます。
- 推論と予測 – 事後確率、介入的(do-計算)および反事実的クエリを計算し、因果予測を行います。
- 合成データとユーティリティ – 学習済みモデルから新しいデータをサンプリング、連続変数の離散化、欠損値の補完、グラフ表現間の変換(隣接行列、エッジリスト、Graphviz)が可能です。
- 可視化 – MatplotlibまたはGraphvizでネットワーク構造をプロット、2つのネットワークを比較、モデルをエクスポートできます。
すべての機能は、シンプルで高レベルなAPI(bn.structure_learning.fit()、bn.parameter_learning.fit()、bn.inference.fit()、bn.predict()など)でラップされており、数行のコードで、生のpandas DataFrameから完全な因果モデルまで迅速に移行できます。
クイックスタート
# インストール(Python 3.10+必須)
pip install bnlearn # conda、uv、またはGitHubから直接インストールも可
import bnlearn as bn
# 例題データセット(古典的なスプリンクラー・ネットワーク)を読み込み
df = bn.import_example()
# 1️⃣ データからネットワーク構造を学習
model = bn.structure_learning.fit(df)
# 2️⃣ エッジ強度統計をオプションで計算
model = bn.independence_test(model, df)
# 3️⃣ 学習されたDAGを可視化
bn.plot(model)
# 4️⃣ CPTの学習(パラメータ学習)
model = bn.parameter_learning.fit(model, df)
# 5️⃣ 因果推論を実行
query = bn.inference.fit(model, variables=['Rain'],
evidence={'Cloudy': 1, 'Sprinkler': 0, 'Wet_Grass': 1})
print(query.df)
このライブラリは、特定のタスク向けの即時利用可能なパイプラインも提供しています(例:bn.sampling()で合成データ生成、bn.knn_imputer()で欠損値補完、bn.discretize()で連続特徴のビニング)。
用途
- 因果発見 – 観測データから有向関係を明らかにしたい研究者やデータサイエンティストに最適です。
- 確率的モデリング – 不確実性を定量的に扱う必要がある分野(医療、金融、信頼性工学など)で有用です。
- 教育とプロトタイピング – 広範なドキュメント、ノートブック、ブログ記事チュートリアルにより、ベイジアンネットワークの概念を教えるのに適しています。
ドキュメントとコミュニティ
- 完全なAPIドキュメント – https://erdogant.github.io/bnlearn/
- 例題ノートブック – ドキュメント内のGoogle Colabリンクからアクセス可能。
- ブログとポッドキャスト – 各主要機能についての記事と短い音声解説。
- オープンソース – MITライセンス、積極的にメンテナンス中(約2kスター、定期リリース)、貢献を歓迎しています。
TL;DR
bnlearn は、ドキュメントが充実し、pipでインストール可能なPythonパッケージであり、ベイジアンネットワークに基づく因果モデリングのエンドツーエンドワークフローを簡素化します:構造発見、パラメータ学習、推論実行、データ生成、可視化—all with a few high-level function calls。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト