erdogant/bnlearn
Python package for Causal Discovery by learning the graphical structure of Bayesian networks. Structure Learning, Parameter Learning, Inferences, Sampling methods.
bnlearn – 베이지안 네트워크 학습 및 인과 분석을 위한 파이썬 라이브러리
기능 – bnlearn는 확률적 그래픽 모델(베이지안 네트워크)을 구축, 학습, 질의할 수 있게 해줍니다. 다음의 전 과정을 커버합니다:
- 구조 학습 – BIC, K2, BDeu 등의 고전적 스코어와 전수 탐색, 하이클라이밍, Chow-Liu, TAN 등 다양한 탐색 전략을 사용하여 데이터를 가장 잘 설명하는 방향성 비순환 그래프(DAG)를 발견합니다.
- 파라미터 학습 – 완전하지 않은 데이터에서도 주어진 DAG에 대한 조건부 확률표(CPT)를 추정할 수 있습니다.
- 추론 및 예측 – 사후 확률, 개입(도-계산), 반사적(Counterfactual) 질의를 계산하고 인과 예측을 수행합니다.
- 합성 데이터 및 유틸리티 – 학습된 모델에서 새로운 데이터를 샘플링하고, 연속 변수를 이산화하며, 결측값을 보완하고, 그래프 표현 간 변환(인접 행렬, 엣지 목록, Graphviz)이 가능합니다.
- 시각화 – Matplotlib 또는 Graphviz로 네트워크 구조를 플롯하고, 두 네트워크를 비교하며, 모델을 내보낼 수 있습니다.
이 모든 기능은 bn.structure_learning.fit(), bn.parameter_learning.fit(), bn.inference.fit(), bn.predict() 등의 간결하고 고수준의 API로 래핑되어 있어, 원시 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로 설치 가능한 파이썬 패키지로, 베이지안 네트워크 기반 인과 모델링의 엔드투엔드 워크플로우를 간소화합니다: 구조 발견, 파라미터 학습, 추론 실행, 데이터 생성, 시각화 — 모두 몇 가지 고수준 함수 호출로 가능합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트