DoWhy는 인과 그래프 모델과 잠재 결과 프레임워크를 통합해 인과 추론 과정을 구조적으로 지원하는 Python 라이브러리입니다. 인과 효과 추정, 반사실 분석, 원인 분석 등 다양한 인과적 질문에 대한 답을 쉽게 구하고, 초보자도 신뢰할 수 있는 분석을 할 수 있도록 설계된 것이 큰 장점입니다. 이 요약에서는 DoWhy의 특징, 사용 방법, 제공 기능 그리고 참고할 만한 자료에 대해 시간 흐름에 따라 자세히 안내합니다.


1. 프로젝트 및 커뮤니티 개요

DoWhy란 무엇인가?

DoWhy는 변수 간 인과 관계를 명확하게 모델링하고, 인과 추정을 직접적으로 검증할 수 있는 오픈소스 Python 라이브러리입니다. 단순한 예측을 넘어서 "무엇이 무엇에 영향을 미쳤는가?", "특정 변수를 바꾸면 결과가 어떻게 달라질까?" 등 인과적 질문에 답할 수 있도록 지원합니다.

"의사결정은 여러 변수 간의 상호작용을 이해하고, 일부를 새로운 값으로 변경했을 때 결과가 어떻게 바뀌는지 예측하는 것을 포함합니다."

DoWhy는 PyWhy 생태계의 일부로, PyWhy GitHub에 방문하면 인과추론 관련 다양한 도구도 함께 확인 가능합니다. 실무자와 연구자, 개발자들이 사용하는 만큼, Discord 커뮤니티 등에서 적극적인 질의응답과 사례 공유도 이루어지고 있습니다.

"특정 사용 사례에 대한 질문이나 의견, 토론이 필요하다면 저희 Discord 커뮤니티에 참여하세요."


2. 적용 사례 및 실전 예시

DoWhy는 실제 다양한 업무에서 아래와 같은 인과적 질문을 해결하는 데 쓰이고 있습니다.

더 많은 예시는 DoWhy 예제 노트북에서 볼 수 있습니다.


3. DoWhy의 구조와 핵심 기능

DoWhy는 인과 그래프 모델(graphical models)과 잠재 결과(potential outcomes)라는 양대 개념을 통합하여 효과적으로 인과 추론을 지원합니다.
특히 다음과 같은 작업을 직접적으로 지원합니다:

  • 효과 추정: 인과 효과의 식별, 평균/조건부 인과효과, 도구변수 활용 등
  • 인과 영향 수치화: 매개효과 분석, 직접 경로 강도 측정 등
  • What-if & 반사실 분석: 개입(distribution intervention), counterfactual('만약 ~였다면?') 분석
  • 원인 분석 및 설명: 이상 현상에 대한 원인 추적, 특성의 인과적 중요도 평가 등

DoWhy의 핵심 기능

특히, 가정 검증(refutation & falsification) API를 통해 결과의 신뢰성을 직접적으로 테스트할 수 있다는 점이 초보자에게도 큰 장점입니다.

"DoWhy는 인과 가정의 검증 기능을 모든 추정 방법과 결합하여 추론을 더욱 실질적이고 신뢰할 수 있도록 만듭니다."


4. 설치 및 시작하기

설치 방법

Python 3.8 이상을 지원하며, pip, poetry, conda 등 다양한 방법으로 아주 간단하게 설치할 수 있습니다.

  • pip:
    pip install dowhy
    
  • poetry:
    poetry add dowhy
    
  • conda:
    conda install -c conda-forge dowhy
    

개발 최신 버전을 쓰고 싶다면 다음과 같이 GitHub 리포지토리에서 바로 설치 가능합니다.

pip install git+https://github.com/py-why/dowhy@main

추가 패키지 및 설치 팁
그래프 입력/시각화를 더 잘 하고 싶으면 pydot 또는 pygraphviz를 QR코드 형식으로 별도 설치할 수 있습니다. Ubuntu의 경우:

sudo apt install graphviz libgraphviz-dev graphviz-dev pkg-config
pip install --global-option=build_ext \
--global-option="-I/usr/local/include/graphviz/" \
--global-option="-L/usr/local/lib/graphviz" pygraphviz

문제가 있다면 공식 pygraphviz 설치 가이드 참조가 좋습니다.


5. 빠른 예제: 인과 효과 추정 및 그래프 기반 분석

1) 인과 효과 추정의 기본 흐름

아래와 같이 네 단계만 거치면 데이터를 이용한 인과 추정이 가능합니다.

  1. 모델 생성: 데이터를 기반으로 인과 그래프를 정의하여 모델링
  2. 효과 식별: 인과 그래프상에서 효과 도출을 위한 조건 및 변수 확인
  3. 효과 추정: 통계/머신러닝 방법 활용하여 효과 실제 추정
  4. 결과 반증: 무작위 변인 추가 등 여러 테스트로 결과 신뢰성 검증
from dowhy import CausalModel
import dowhy.datasets

# 데이터 불러오기
data = dowhy.datasets.linear_dataset(
    beta=10,
    num_common_causes=5,
    num_instruments=2,
    num_samples=10000,
    treatment_is_binary=True)

# 1. 인과모델 생성
model = CausalModel(
    data=data["df"],
    treatment=data["treatment_name"],
    outcome=data["outcome_name"],
    graph=data["gml_graph"])  # 또는 nx.DiGraph 사용

# 2. 효과 식별
identified_estimand = model.identify_effect()

# 3. 효과 추정
estimate = model.estimate_effect(identified_estimand, method_name="backdoor.propensity_score_matching")

# 4. 결과 반증
refute_results = model.refute_estimate(identified_estimand, estimate, method_name="random_common_cause")

DoWhy의 출력은 과정별로 가정, 식별된 인과 효과, 추정값 전체를 직접 눈으로 확인할 수 있게 지원합니다.

선형 회귀 추정 출력 예시

  • 더 많은 예시: Getting Started with DoWhy
  • EconML 라이브러리를 활용한 Conditional Average Treatment Effect (CATE) 예시도 공식 노트북에서 볼 수 있습니다.

2) 그래프 기반 모델링(GCM) 및 원인 추적 분석

Pearl의 구조적 인과모형(Structural Causal Model) 프레임워크에 기반한 DoWhy-GCM을 활용하면 복잡한 원인 분석/시나리오 시뮬레이션이 가능합니다.
예를 들어, 아래처럼 X→Y→Z인 단순 구조를 만들어 보고, Z의 이상값 발생 원인을 역추적으로 찾을 수 있습니다.

import networkx as nx, numpy as np, pandas as pd
from dowhy import gcm

# 1. 데이터 생성 및 구조적 인과모형 정의
data = pd.DataFrame(dict(
    X=np.random.normal(loc=0, scale=1, size=1000),
    Y=2 * X + np.random.normal(loc=0, scale=1, size=1000),
    Z=3 * Y + np.random.normal(loc=0, scale=1, size=1000),
))
causal_model = gcm.StructuralCausalModel(nx.DiGraph([('X','Y'), ('Y','Z')])) # X→Y→Z 연결
gcm.auto.assign_causal_mechanisms(causal_model, data)

# 2. 모델 피팅
gcm.fit(causal_model, data)

# 3. Z의 이상값 원인이 어디인지 분석
anomalous_sample = pd.DataFrame(dict(X=[0.1], Y=[6.2], Z=[19]))  # 이상값
anomaly_attribution = gcm.attribute_anomalies(causal_model, "Z", anomalous_sample)

6. 참고 자료 및 추가 정보

"DoWhy가 여러분의 연구나 업무에 유용하다면, 반드시 아래 두 논문을 모두 인용해주세요."


7. 인용 정보

@article{dowhy,
  title={DoWhy: An End-to-End Library for Causal Inference},
  author={Sharma, Amit and Kiciman, Emre},
  journal={arXiv preprint arXiv:2011.04216},
  year={2020}
}
@article{JMLR:v25:22-1258,
author  = {Patrick Bl{{\"o}}baum and Peter G{\"o}tz and Kailash Budhathoki and Atalanti A. Mastakouri and Dominik Janzing},
title   = {DoWhy-GCM: An Extension of DoWhy for Causal Inference in Graphical Causal Models},
journal = {Journal of Machine Learning Research},
year    = {2024},
volume  = {25},
number  = {147},
pages   = {1--7},
url     = {http://jmlr.org/papers/v25/22-1258.html}
}

마치며

DoWhy는 인과 추론을 쉽고, 투명하며, 신뢰성 있게 수행하고자 하는 모든 분들에게 훌륭한 도구입니다. 데이터 분석이 '왜'라는 본질적인 질문에 집중할 수 있도록 돕는 만큼, 인과적 분석을 시도해보고 싶은 분이라면 한 번쯤 꼭 사용해보시기를 추천드립니다! 🚀
궁금한 점은 언제든 커뮤니티에 질문해보세요.

함께 읽으면 좋은 글

Harvest엔지니어링 리더십한국어

AWS 최고 엔지니어 Marc Brooker, 3000건 이상의 사고 경험과 AI 시대 소프트웨어 엔지니어링의 변화에 대해 말하다

이 영상은 AWS의 최고 엔지니어인 Marc Brooker가 3,000건 이상의 클라우드 시스템 사고 후 분석(postmortem) 경험을 바탕으로 얻은 기술적 통찰과, AI 시대에 소프트웨어 엔지니어링이 어떻게 변화하고 있는지에 대한 깊이 있는 이야기를 나눈 인터뷰입니다. 그는 중요한 문...

2026년 4월 14일더 읽기
Harvest창업 · AI한국어

Anthropic의 10억 달러에서 190억 달러 성장 비결: Claude가 역사상 가장 빠르게 성장한 AI 제품이 된 방법

이 영상은 Anthropic의 성장 책임자 아몰 아바사레가 회사의 경이로운 성장 비결과 AI 시대의 성장 전략에 대해 이야기하는 내용을 담고 있습니다. Anthropic이 14개월 만에 연 매출 10억 달러에서 190억 달러로 성장한 배경에는 AI 모델의 빠른 발전, B2B 및 코딩 분야에...

2026년 4월 5일더 읽기
Harvest엔지니어링 리더십한국어

claw-code 레포지토리에서 배워야 할 것 🌈🙏

이 글은 claw-code 레포지토리가 단시간에 엄청난 주목을 받은 현상을 통해 개발자들이 AI 시대에 어떤 점을 배워야 하는지에 대한 통찰을 제공합니다. 단순히 AI가 코드를 빠르게 작성한다는 사실을 넘어, 에이전트 시스템 설계와 협업, 그리고 사람의 명확한 비전과 판단력이 얼마나 중요한...

2026년 4월 2일더 읽기