FX Prediction (환율 예측 프로젝트)
ARIMA + TFT(Temporal Fusion Transformer) 하이브리드 모델 기반 USD/KRW 환율 예측 프로젝트입니다.
USD/KRW 환율의 1일 ahead 예측
ARIMA(선형) + TFT(비선형) 하이브리드 모델 구현
Random Walk, ARIMA, Hybrid 모델 성능 비교
Final_Pred = ARIMA_Pred (선형 성분) + TFT_Pred (비선형 잔차)
ARIMA : 환율의 선형적 추세/자기상관 패턴 학습
TFT : ARIMA 잔차에서 외생변수를 활용한 비선형 패턴 학습
fx_prediction/
├── src/
│ ├── crawler.py # 데이터 수집 모듈
│ ├── process_arima.py # ARIMA 모델링 (Rolling Forecast)
│ └── process_tft.py # TFT 하이브리드 모델 (외생변수 포함)
├── data/
│ ├── raw_data.csv # 수집된 원본 데이터
│ ├── arima_residuals.csv # ARIMA 예측 결과 및 잔차
│ └── final_predictions_tft.csv # TFT 하이브리드 최종 예측
├── results/
│ ├── arima_analysis.png # ARIMA 분석 시각화
│ └── hybrid_tft_result.png # TFT 하이브리드 결과 시각화
├── notebooks/ # Jupyter 노트북 (EDA 등)
├── pyproject.toml # 프로젝트 설정 및 의존성
└── README.md
Train : 2010-01-01 ~ 2017-12-31 (약 2,062일)
Test : 2018-01-01 ~ 2019-12-31 (약 520일)
변수
설명
소스
Time-Lag
USD_KRW
원/달러 환율 (Target)
yfinance
-
DXY
달러 인덱스
yfinance
t-1
US_Bond_10Y
미국 10년물 국채 수익률
yfinance
t-1
WTI
WTI 원유 선물
yfinance
t-1
Gold
금 선물
yfinance
t-1
KOSPI
코스피 지수
FinanceDataReader
t
KOSPI200
코스피200 지수
FinanceDataReader
t
KR_Bond_10Y
한국 10년물 국채 수익률
FinanceDataReader
t
Foreigner_Net
KOSPI 외국인 순매수
pykrx
t
Volatility
20일 이동 표준편차
파생변수
t
Interest_Diff
한미 금리차 (US - KR)
파생변수
t-1
한국 시장 개장(09:00) 시점에 "알 수 있는" 정보만 사용
미국/글로벌 데이터는 shift(1) 적용하여 전일 데이터 매핑
라이브러리 : pmdarima
최적 모델 : ARIMA(0, 1, 1)
검정 : ADF Test (단위근 검정)
예측 방식 : Rolling Forecast (Walk-Forward Validation)
Test 구간에서 One-step ahead 예측 후 실제값으로 업데이트
2. TFT (Temporal Fusion Transformer)
라이브러리 : NeuralForecast
하이퍼파라미터 :
h: 1 (1일 예측)
input_size: 60 (60일 look-back)
hidden_size: 64
max_steps: 500
외생변수 (hist_exog_list) :
DXY, Interest_Diff, Volatility, WTI, Gold
예측 방식 : Cross-Validation (n_windows=520, step_size=1)
Test 기간 성능 비교 (2018-2019)
Model
RMSE
MAE
DA (%)
Random Walk
5.26
4.14
47.21
ARIMA Only
5.37
4.17
52.79
Hybrid (ARIMA+TFT)
7.24
5.65
56.26
DA(방향 정확도) 개선 : Hybrid 모델이 56.26%로 가장 높은 DA 달성
RMSE : Random Walk가 가장 낮은 RMSE (환율의 Random Walk 특성)
Trade-off : 외생변수 추가로 DA는 개선되었으나 RMSE는 증가
Python 3.10+
uv (패키지 매니저)
카테고리
라이브러리
데이터 분석
pandas, numpy
머신러닝
scikit-learn
시계열
pmdarima, statsmodels
딥러닝
neuralforecast, torch
시각화
matplotlib, seaborn
금융 데이터
yfinance, FinanceDataReader, pykrx
# 프로젝트 디렉토리로 이동
cd fx_prediction
# 1. 데이터 수집
uv run python src/crawler.py
# 2. ARIMA 모델링 (잔차 추출)
uv run python src/process_arima.py
# 3. TFT 하이브리드 모델
uv run python src/process_tft.py
파일
설명
data/raw_data.csv
수집된 원본 데이터 (2,582행 x 9열)
data/arima_residuals.csv
ARIMA 예측값 및 잔차
data/final_predictions_tft.csv
TFT 하이브리드 최종 예측
results/arima_analysis.png
ARIMA 분석 시각화
results/hybrid_tft_result.png
TFT 하이브리드 결과 시각화
효율적 시장 가설(EMH) : 환율은 이미 모든 정보가 반영되어 예측이 어려움
Random Walk 현상 : 환율 변동은 본질적으로 무작위적 특성을 가짐
학술적 의의 : "Random Walk를 이기기 어렵다"는 것이 환율 예측의 일반적인 결론
Attention 가중치 분석을 통한 중요 변수 해석
다양한 예측 기간(h=5, 20 등) 실험
추가 외생변수 탐색 (VIX, 신흥국 통화지수 등)
VS Code에서 .ipynb 파일 열기
커널 선택: .venv (Python 3.10) 선택