Skip to content

Kuuuuu00/fx_prediction_project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 (비선형 잔차)
  1. ARIMA: 환율의 선형적 추세/자기상관 패턴 학습
  2. 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

Time-Lag 전략

  • 한국 시장 개장(09:00) 시점에 "알 수 있는" 정보만 사용
  • 미국/글로벌 데이터는 shift(1) 적용하여 전일 데이터 매핑

모델링

1. ARIMA (Auto-ARIMA)

  • 라이브러리: 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

주요 발견

  1. DA(방향 정확도) 개선: Hybrid 모델이 56.26%로 가장 높은 DA 달성
  2. RMSE: Random Walk가 가장 낮은 RMSE (환율의 Random Walk 특성)
  3. 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 연동

  1. VS Code에서 .ipynb 파일 열기
  2. 커널 선택: .venv (Python 3.10) 선택

About

ARIMA + TFT(Temporal Fusion Transformer) 하이브리드 모델 기반 USD/KRW 환율 예측 프로젝트입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages