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 라이브러리입니다.
- 두 가지 주요 인과 추론 프레임워크를 통합: 그래픽 인과 모델(Pearl의 do-계산)과 잠재적 결과 접근법.
- PyWhy 생태계의 일부로, 인과성에 초점을 맞춘 도구를 개발합니다.
주요 기능
| 기능 | 할 수 있는 일 |
|---|---|
| 효과 추정 | 인과 효과 식별, 평균 또는 조건부 치료 효과 계산, 공변량 변수 사용 등 |
| 인과적 영향 정량화 | 매개 분석, 직접/간접 효과 강도, 내재적 영향 측정 |
| 가상/반사적 분석 | 개입 분포에서 샘플 생성, 개인별 반사적 결과 계산 |
| 근본 원인 분석 및 설명 | 이상 현상을 특정 변수에 귀속, 분포 변화 설명, 특징 중요도 순위 매기기 |
| 반증/부정 | 랜덤 공통 원인, 위약 테스트 등 강건성 검사를 수행하여 대안 가정 하에서도 인과 주장이 성립하는지 확인 |
일반적인 워크플로우 (4단계)
- 모델 – 데이터, 치료/결과 변수 이름, 인과 그래프 (NetworkX, DOT 등) 제공.
- 식별 – DoWhy가 do-계산을 적용하여 추정량(인과 효과의 수학적 표현)을 도출.
- 추정 – 통계 추정기(경향 점수 매칭, 선형 회귀, EconML의 DML 등)를 사용해 효과 계산.
- 반증 – 자동으로 하나 이상의 부정 테스트를 실행하여 강건성 평가.
빠른 시작
# 최신 안정판 설치
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를 제공합니다. 상관관계를 넘어서 인과성 기반 의사결정이 필요한 데이터 과학자, 연구자, 엔지니어에게 적합합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트