금융 시장의 숨겨진 인과 관계 발굴: DoWhy를 활용한 AI 투자 전략 강건성 확보 가이드
금융 시장의 예측 모델은 종종 상관 관계에 의존하여 오해의 소지가 있는 결과를 초래합니다. DoWhy를 통해 우리는 단순한 예측을 넘어 데이터 뒤에 숨겨진 진정한 인과 관계를 파악하고, 이를 기반으로 변동성이 큰 시장에서도 흔들리지 않는 강건하고 설명 가능한 AI 투자 전략을 구축할 수 있습니다. 이는 AI 기반 금융 시스템의 신뢰성과 효율성을 혁신적으로 끌어올릴 핵심 열쇠입니다.
1. 상관 관계의 함정, 그리고 인과 관계의 필요성
금융 시장에서 고도화된 AI 모델을 도입하는 것은 더 이상 새로운 일이 아닙니다. 시계열 예측, 포트폴리오 최적화, 고빈도 매매 등 다양한 영역에서 머신러닝(ML)과 딥러닝(DL) 모델은 놀라운 예측 성능을 보여주기도 합니다. 하지만 이러한 모델들이 보여주는 "예측"이 과연 "설명"이나 "이해"로 이어지는지는 별개의 문제입니다. 우리는 흔히 뉴스 기사의 긍정적인 감성 스코어가 주가 상승과 강한 상관 관계를 보일 때, "감성 분석이 주가 상승을 유발한다"고 오해하곤 합니다.
그러나 금융 시장은 수많은 복합적인 요인들이 얽혀 있는 시스템이며, 오늘 강한 상관 관계를 보이는 두 변수가 내일도 그럴 것이라는 보장은 없습니다. 통계적으로 유의미한 상관 관계가 있더라도, 이는 제3의 숨겨진 변수(교란 변수, Confounder)에 의해 발생하거나 단순히 우연일 가능성이 농후합니다. 이러한 상관 관계 기반의 전략은 시장 환경이 변하거나 새로운 정보가 유입될 때 쉽게 무너지며, 이는 막대한 손실로 이어질 수 있습니다.
AI 투자 전략의 강건성을 확보하기 위해서는 단순한 예측을 넘어 "무엇이 무엇을 야기하는가?"라는 인과적인 질문에 답할 수 있어야 합니다. 금리 인상이 특정 산업군의 주가에 실제로 어떤 영향을 미치는지, 혹은 기업의 ESG 점수 상승이 장기적인 투자 수익률에 직접적인 인과 관계를 가지는지 등을 이해하는 것이 중요합니다. 이러한 인과적 이해는 우리가 "만약 ~라면 어떨까?(What-if)" 질문에 답하고, 시장의 변화에 더 유연하게 대응하며, 전략의 실패 원인을 명확히 파악하는 데 필수적입니다.
2. Deep Dive: DoWhy와 인과 추론의 힘
Microsoft에서 개발한 Python 라이브러리인 DoWhy는 복잡한 인과 추론(Causal Inference) 과정을 체계적이고 직관적인 4단계 프레임워크로 단순화하여 제공합니다. 이는 도메인 전문가가 아니더라도 데이터에 내재된 인과 관계를 탐색하고 검증할 수 있도록 돕습니다. DoWhy의 핵심은 다음과 같은 4단계 프로세스에 있습니다.
- 1. Model (모델링): 인과 그래프(Causal Graph)를 통해 도메인 지식에 기반하여 변수들 간의 가설적인 인과 관계를 정의합니다. 어떤 변수가 원인(Treatment)이고, 어떤 변수가 결과(Outcome)이며, 어떤 변수가 교란 변수(Confounder)인지 등을 명시합니다.
- 2. Identify (식별): 정의된 인과 그래프와 가정을 바탕으로 통계적으로 추정 가능한 인과 효과(Estimand)를 식별합니다. 이는 인과 효과를 계산하기 위한 수학적 표현을 찾는 단계입니다.
- 3. Estimate (추정): 식별된 인과 효과를 실제 데이터와 다양한 통계적/머신러닝 기법(예: Propensity Score Matching, Instrumental Variables, G-estimation 등)을 사용하여 추정합니다.
- 4. Refute (반박): 추정된 인과 효과가 가정의 변화나 데이터의 노이즈에 얼마나 강건한지 검증합니다. 이는 인과 추론 결과의 신뢰도를 높이는 매우 중요한 단계입니다.
DoWhy는 이 네 단계를 통합하여, 단순히 인과 효과를 추정하는 것을 넘어 그 결과의 강건성까지 검증할 수 있도록 지원합니다. 이는 금융 시장과 같이 노이즈가 많고 복잡한 시스템에서 오해의 소지가 있는 결론을 피하고, 보다 신뢰할 수 있는 인사이트를 도출하는 데 결정적인 역할을 합니다.
3. Step-by-Step Guide / Implementation: DoWhy를 활용한 인과 관계 분석
이 섹션에서는 가상의 금융 데이터를 사용하여 특정 경제 지표(예: 제조업 PMI)의 변화가 특정 산업 섹터(예: 기술주)의 주가에 미치는 인과 효과를 분석하는 과정을 DoWhy로 구현해 보겠습니다. 우리는 단순히 PMI와 기술주 주가 간의 상관 관계를 넘어, 다른 거시 경제 변수(예: 금리, 소비자 심리)를 통제했을 때의 순수한 인과 효과를 추정하고자 합니다.
Step 1: 환경 설정 및 데이터 준비
DoWhy 및 필요한 라이브러리를 설치하고, 분석에 사용할 가상의 금융 데이터를 생성합니다. 실제 환경에서는 실제 시장 데이터와 경제 지표를 수집하여 사용해야 합니다.
# 필요한 라이브러리 설치
# pip install dowhy econml pandas networkx matplotlib
import pandas as pd
import numpy as np
import dowhy
from dowhy import CausalModel
import networkx as nx
import matplotlib.pyplot as plt
# 1. 가상의 금융 데이터 생성 (시뮬레이션)
np.random.seed(42)
n_samples = 1000
# 교란 변수(Confounder): 금리 (interest_rate), 소비자 심리 지수 (consumer_sentiment)
# 제조업 PMI (treatment), 기술주 주가 (outcome)
interest_rate = np.random.normal(loc=0.05, scale=0.01, size=n_samples)
consumer_sentiment = np.random.normal(loc=100, scale=10, size=n_samples)
# 제조업 PMI (Treatment): 금리, 소비자 심리에 영향을 받음 (가정)
manufacturing_pmi = (
120
- 500 * interest_rate
+ 0.5 * consumer_sentiment
+ np.random.normal(loc=0, scale=5, size=n_samples)
)
# 기술주 주가 (Outcome): PMI, 금리, 소비자 심리에 영향을 받음 (가정)
tech_stock_price = (
500
+ 2 * manufacturing_pmi # PMI가 주가에 긍정적인 인과 효과 (가정)
- 2000 * interest_rate # 금리가 주가에 부정적인 인과 효과 (교란)
+ 1.5 * consumer_sentiment # 소비자 심리가 주가에 긍정적인 인과 효과 (교란)
+ np.random.normal(loc=0, scale=20, size=n_samples)
)
data = pd.DataFrame({
'interest_rate': interest_rate,
'consumer_sentiment': consumer_sentiment,
'manufacturing_pmi': manufacturing_pmi,
'tech_stock_price': tech_stock_price
})
print("데이터 미리보기:")
print(data.head())
Step 2: 인과 모델 정의 (Causal Model Definition)
데이터에 기반하여 변수들 간의 인과 그래프를 정의합니다. 우리는 제조업 PMI가 기술주 주가에 영향을 미치는지 알고 싶으며, 금리와 소비자 심리가 이 둘 모두에 영향을 미치는 교란 변수라고 가정합니다. DoWhy는 GML (Graphical Model Language)이나 dot 언어를 사용하여 인과 그래프를 정의할 수 있습니다.
# 인과 모델 정의
# treatment: manufacturing_pmi (원인)
# outcome: tech_stock_price (결과)
# common_causes: interest_rate, consumer_sentiment (교란 변수)
# GML 언어를 사용하여 인과 그래프 정의
# graph = """
# digraph {
# interest_rate -> manufacturing_pmi;
# consumer_sentiment -> manufacturing_pmi;
# interest_rate -> tech_stock_price;
# consumer_sentiment -> tech_stock_price;
# manufacturing_pmi -> tech_stock_price;
# }
# """
# DoWhy는 더 간편하게 인과 관계를 설정할 수 있습니다.
model = CausalModel(
data=data,
treatment='manufacturing_pmi',
outcome='tech_stock_price',
common_causes=[
'interest_rate',
'consumer_sentiment'
]
# 기타 변수들을 정의하고 싶다면 additional_variables=[...] 사용
)
# 인과 그래프 시각화 (optional, requires graphviz)
# model.view_model()
# plt.show() # 이미지를 직접 확인하려면 주석 해제
print("\n인과 모델이 성공적으로 정의되었습니다.")
Step 3: 인과 효과 식별 전략 (Identification Strategy)
정의된 인과 모델에서 인과 효과를 통계적으로 추정할 수 있는 방법을 식별합니다. DoWhy는 주어진 인과 그래프와 가정에 따라 백도어 기준(Back-door Criterion)과 같은 방법을 자동으로 적용하여 식별 가능한 인과 효과(Estimand)를 찾아냅니다.
# 인과 효과 식별
identified_estimand = model.identify_effect(
estimand_type="ate", # 평균 처리 효과 (Average Treatment Effect)
# method_name="backdoor", # DoWhy가 자동으로 적절한 방법을 찾음
# proceed_when_unidentifiable=True # 식별 불가능하더라도 진행
)
print("\n식별된 인과 효과:")
print(identified_estimand)
Step 4: 인과 효과 추정 (Estimating the Causal Effect)
식별된 인과 효과를 실제 데이터와 다양한 추정 기법을 사용하여 계산합니다. DoWhy는 선형 회귀(Linear Regression), 역확률 가중치(Inverse Probability Weighting, IPW), Propensity Score Matching (PSM) 등 여러 추정기를 지원합니다. 여기서는 선형 회귀를 사용하여 교란 변수를 통제한 후의 효과를 추정해 보겠습니다.
# 인과 효과 추정 (선형 회귀 사용)
# method_name: 'backdoor.linear_regression'은 백도어 경로를 닫기 위해 선형 회귀를 사용한다는 의미
causal_estimate = model.estimate_effect(
identified_estimand,
method_name="backdoor.linear_regression",
control_value=data['manufacturing_pmi'].median(), # 비교 기준점
treatment_value=data['manufacturing_pmi'].median() + data['manufacturing_pmi'].std(), # 처리 효과 평가 지점
target_units="ate" # 평균 처리 효과
)
print("\n추정된 인과 효과:")
print(f"제조업 PMI의 1 표준편차 증가가 기술주 주가에 미치는 평균 인과 효과: {causal_estimate.value:.2f}")
# 다른 추정기 예시: Propensity Score Matching
# causal_estimate_psm = model.estimate_effect(
# identified_estimand,
# method_name="backdoor.propensity_score_matching",
# target_units="ate"
# )
# print(f"PSM으로 추정된 인과 효과: {causal_estimate_psm.value:.2f}")
Step 5: 추론 결과 강건성 검증 (Refuting the Causal Estimate)
추정된 인과 효과가 우리의 가정이나 데이터의 특성에 얼마나 민감한지 확인하는 단계입니다. DoWhy는 다양한 반박(refutation) 방법을 제공하여 결과의 신뢰도를 높입니다. 이는 금융 시장처럼 불확실성이 높은 환경에서 특히 중요합니다.
- Random Common Cause: 기존 교란 변수에 더해 무작위로 생성된 교란 변수를 추가했을 때 결과가 얼마나 변하는지 확인합니다.
- Random Replace Treatment: 원인 변수를 무작위 변수로 대체했을 때 인과 효과가 사라지는지 확인합니다. 만약 사라지지 않는다면, 기존 추정 결과에 문제가 있을 수 있습니다.
- Data Subset Refuter: 데이터의 서브셋(부분 집합)을 사용하여 추정했을 때 결과가 얼마나 일관적인지 확인합니다.
# 인과 추정 결과 강건성 검증
# 1. 무작위 교란 변수 추가 (Adding a random common cause)
refute_random_common_cause = model.refute_estimate(
identified_estimand, causal_estimate,
method_name="random_common_cause"
)
print("\n[Refutation 1] 무작위 교란 변수 추가:")
print(refute_random_common_cause)
# 2. 원인 변수를 무작위 변수로 대체 (Replacing treatment with a random variable)
refute_random_treatment = model.refute_estimate(
identified_estimand, causal_estimate,
method_name="random_treatment_on_outcome"
)
print("\n[Refutation 2] 원인 변수를 무작위 변수로 대체:")
print(refute_random_treatment)
# 3. 데이터 서브셋 사용 (Data subset refuter)
refute_subset = model.refute_estimate(
identified_estimand, causal_estimate,
method_name="data_subset_refuter",
subset_fraction=0.8 # 데이터의 80%만 사용
)
print("\n[Refutation 3] 데이터 서브셋 사용:")
print(refute_subset)
# refutation 결과 해석:
# - new_effect가 original_effect와 크게 다르지 않다면 강건하다고 볼 수 없음.
# - Random common cause: 새로운 교란 변수가 추가되었을 때 결과가 안정적이면 좋음.
# - Random treatment: 처리 효과가 0에 가까워져야 함 (처리 효과가 우연이 아님을 의미).
# - Data subset refuter: 서브셋에서도 원래 결과와 유사해야 함.
4. Real-world Use Case / Example: 뉴스 감성 분석과 주가 변동의 인과 관계
금융 시장에서 뉴스 감성 분석(News Sentiment Analysis)은 투자 전략의 중요한 요소로 활용됩니다. 많은 퀀트 모델은 특정 기업이나 산업에 대한 뉴스 감성이 긍정적이면 해당 주가가 상승하고, 부정적이면 하락한다는 가설 아래 매매 신호를 생성합니다. 그러나 이러한 전략은 종종 시장의 체제 변화(Regime Shift)나 예측하지 못한 거시 경제 충격 앞에서 무력해지곤 합니다. 제가 경험했던 한 사례는, 기술주에 대한 긍정적인 뉴스 감성 지표가 지속적으로 높았음에도 불구하고, 연준의 급격한 금리 인상 시기에 기술주가 큰 폭으로 하락했던 경우입니다. 여기서 뉴스 감성은 주가와 계속 양의 상관 관계를 가졌지만, 그 인과적 영향력은 금리 인상이라는 더 큰 교란 변수에 의해 가려지거나 약화되었습니다.
DoWhy를 활용하면 이러한 상황에서 더욱 강건한 전략을 구축할 수 있습니다. 예를 들어:
- 원인(Treatment): 특정 기업/산업의 뉴스 감성 스코어 변화
- 결과(Outcome): 해당 기업/산업의 주가 수익률
- 교란 변수(Confounders): 시장 전체 수익률, 섹터 수익률, 금리 변화, 환율 변화, VIX 지수, 해당 기업의 재무 지표 변화 등
DoWhy의 인과 그래프를 통해 뉴스 감성과 주가 간의 직접적인 경로뿐만 아니라, 시장 전체적인 요소들이 이 관계에 미치는 간접적인 영향을 명시할 수 있습니다. 예를 들어, 긍정적인 뉴스는 주가를 올리지만, 동시에 금리 인상 우려가 시장 전체의 투자 심리를 악화시켜 그 효과를 상쇄할 수 있습니다. DoWhy는 이러한 복합적인 상황에서 뉴스 감성 스코어의 순수한 인과 효과를 분리하여 추정할 수 있게 해줍니다. 만약 Refutation 단계를 통해 특정 거시 경제 변수가 추가되었을 때 인과 효과 추정치가 크게 변한다면, 우리는 해당 변수를 반드시 모델에 포함하여 교란 효과를 통제해야 함을 알 수 있습니다.
저의 개인적인 인사이트는, 단순히 "어떤 지표가 주가를 예측하는가?"에서 "어떤 지표가 어떤 조건 하에서 주가를 움직이게 하는가?"로 질문을 바꿔야 한다는 것입니다. DoWhy는 이 질문에 답하기 위한 체계적인 틀을 제공하며, 이는 특히 블랙스완이나 급변하는 시장 환경에서 과거의 상관 관계가 깨지는 상황에 대비하는 데 매우 유용합니다. 즉, DoWhy는 예측 정확도 맹신을 넘어 '왜'라는 질문에 답하며 투자 전략의 설명 가능성(Explainability)과 강건성(Robustness)을 동시에 높이는 데 기여합니다.
5. Pros & Cons / Critical Analysis
- Pros:
- 강건한 전략 구축: 상관 관계가 아닌 인과 관계에 기반하여 예측 모델의 취약성을 줄이고 시장 변동성에 강한 전략을 수립할 수 있습니다.
- 설명 가능성 향상: "왜 그런 결과가 나왔는가?"에 대한 명확한 인과적 설명을 제공하여 투자 의사 결정의 신뢰도를 높입니다. 이는 규제 준수(예: AI 윤리, 설명 가능한 AI)에도 중요한 이점입니다.
- "What-if" 시나리오 분석: 특정 변수(Treatment)를 변경했을 때 결과(Outcome)가 어떻게 변할지에 대한 가상 시나리오 분석이 용이합니다.
- 체계적인 프레임워크: 인과 추론의 복잡한 과정을 모델링, 식별, 추정, 반박의 4단계로 구조화하여 접근성을 높입니다.
- 오픈소스 & 활발한 커뮤니티: Microsoft에서 개발한 오픈소스 라이브러리로, 지속적인 개발과 커뮤니티 지원을 받을 수 있습니다.
- Cons:
- 도메인 지식 요구: 정확한 인과 그래프를 정의하기 위해선 해당 분야(금융 시장)에 대한 깊은 도메인 지식과 가설 설정 능력이 필수적입니다. 잘못된 그래프는 잘못된 추론으로 이어집니다.
- 데이터 품질 및 가용성: 교란 변수를 정확히 측정하고 포함할 수 있는 고품질의 데이터가 중요합니다. 금융 시장에서는 모든 관련 변수를 얻기 어려울 수 있습니다.
- 고차원 데이터의 복잡성: 변수의 수가 매우 많아지면 인과 그래프의 정의와 추정 과정이 복잡해질 수 있습니다.
- 시간 복잡성: 고빈도 매매와 같은 실시간 의사 결정 시스템에 직접 적용하기에는 인과 추론 과정의 계산 비용과 시간이 부담될 수 있습니다. (주로 전략 개발 및 검증 단계에 활용)
- 아직 연구 단계: 일부 인과 추론 기법은 여전히 활발히 연구되고 있는 분야이며, 모든 시나리오에 완벽한 해결책은 아닙니다.
6. FAQ
- Q: DoWhy는 기존의 머신러닝 예측 모델을 완전히 대체하나요?
A: 아닙니다. DoWhy는 기존 머신러닝 예측 모델을 보완하는 강력한 도구입니다. 예측 모델이 "무엇이 일어날까?"에 답한다면, DoWhy는 "왜 일어날까? 그리고 만약 ~하면 어떨까?"에 답하여 예측의 강건성과 설명 가능성을 높여줍니다. 둘을 함께 사용하여 더 신뢰할 수 있는 AI 투자 전략을 구축할 수 있습니다. - Q: 금융 데이터에 DoWhy를 적용할 때 가장 중요하게 고려해야 할 점은 무엇인가요?
A: 가장 중요한 것은 도메인 지식에 기반한 인과 그래프의 정확한 정의입니다. 어떤 변수가 원인, 결과, 그리고 교란 변수인지에 대한 가설 설정이 매우 중요합니다. 또한, 교란 변수를 최대한 포괄하는 고품질 데이터를 확보하는 것도 필수적입니다. 숨겨진 교란 변수(Unobserved Confounders)가 있다면 인과 추론 결과가 왜곡될 수 있습니다. - Q: DoWhy 외에 다른 인과 추론 라이브러리는 어떤 것이 있나요?
A: Microsoft의 EconML, Google의 CausalImpact, Uber의 Pyro Causal Inference 등이 있습니다. DoWhy는 특히 그 4단계 프레임워크로 인해 인과 추론 과정을 구조화하고 이해하기 쉽다는 장점이 있습니다. EconML은 보다 다양한 머신러닝 기반 추정기를 제공하며, 대규모 데이터셋에 더 적합할 수 있습니다.
7. 결론
금융 시장에서 AI 투자 전략의 성공은 단순한 예측 정확도를 넘어 그 강건성과 설명 가능성에 달려 있습니다. DoWhy를 활용한 인과 추론은 우리가 데이터의 표면적인 상관 관계를 넘어, 그 뒤에 숨겨진 진정한 인과 메커니즘을 발굴할 수 있도록 돕습니다. 이는 변동성이 크고 불확실한 시장 환경 속에서도 흔들리지 않는, 신뢰할 수 있는 투자 전략을 구축하기 위한 핵심적인 접근 방식입니다.
지금 바로 DoWhy 라이브러리를 설치하고, 여러분의 금융 데이터를 가지고 인과 관계를 탐색해 보세요. 상관 관계의 함정에서 벗어나, 인과 관계에 기반한 보다 통찰력 있고 강건한 AI 투자 전략을 수립하는 여정을 시작하시길 강력히 권합니다. 공식 DoWhy 문서를 참고하여 더 깊이 있는 기능들을 탐색하고, 여러분의 모델에 인과적 사고방식을 접목해 보세요. 투자의 미래는 단순히 "무엇이 일어날지"를 아는 것을 넘어 "왜 일어나는지"를 이해하는 데 있습니다.


