모델 개발

개발자·2025년 10월 18일

AI 주가 예측

목록 보기
4/7

모델 개발: TFT, TCN, GBM

https://stockman.fly.dev 에 사용된 모델 개발 과정을 설명합니다. 정확한 미래 주가를 맞추는 것은 너무 어렵기 때문에, 오늘보다 내일 주가가 오를지 내릴지 방향을 맞추는 것 에 집중했습니다. 이러한 방향성에 맞춰 3개의 AI 모델을 활용했습니다.

🎯 예측 목표: 정확한 가격이 아닌 방향성

왜 3일 이동평균을 예측하는가?

주가는 단기적으로 매우 변동성이 큽니다. 하루 단위로는 뉴스, 루머, 큰 손의 매매 등 예측 불가능한 요인들이 많이 작용합니다. 따라서 다음과 같은 접근을 선택했습니다:

단순 종가 대신 3일 이동평균 가격을 예측

  • 일시적인 노이즈를 제거하고 전반적인 추세를 포착
  • 과도한 일일 변동성에 흔들리지 않는 안정적인 예측
  • 실전 투자에서 더 의미 있는 지표

방향 정확도 평가 방식

모델의 성능을 평가할 때 가장 중요하게 본 지표는 방향 정확도(Directional Accuracy) 입니다.

평가 방법:
1. D day 기준: 마지막 입력 데이터 시점의 3일 이동평균 가격
2. 미래 날짜 기준: N일 후의 3일 이동평균 가격
3. 두 가격을 비교하여 상승/하락 방향 판단

핵심 포인트:

  • -1% ~ +1% 범위의 변동은 "보합"으로 간주하고 평가에서 제외
  • 미세한 등락은 노이즈로 보고, 명확한 방향성만 평가
  • 실제로 의미 있는 움직임에 대한 예측력을 측정
예시:
D day 가격: 50,000원
예측 N일 후 가격: 51,500원 (상승 예측)
실제 N일 후 가격: 51,200원 (실제 상승)

→ 변화율: +2.4% (보합 범위 초과)
→ 방향 일치: 정답! ✅

🤖 세 가지 모델 소개

1. TFT (Temporal Fusion Transformer) - 3일 예측

특징:

  • Google Research에서 개발한 최신 시계열 예측 모델
  • Attention 메커니즘을 활용하여 중요한 시점과 특성을 자동으로 파악
  • 여러 종목을 동시에 학습하는 범용 모델(General Model)

학습 방식:

  • 입력: 20일간의 과거 데이터
  • 출력: 3일 후의 가격 예측
  • 약 180개 종목을 하나의 모델로 학습
  • 종목 간 패턴을 공유하여 일반화 성능 향상

사용하는 특징(Features):

  • 기술적 지표: MACD, RSI, Stochastic, Bollinger Bands
  • 모멘텀 지표: 가격/거래량 모멘텀, 추세 강도
  • 캔들 패턴: 연속 양봉/음봉, 캔들 몸통/그림자
  • 투자주체: 외국인/기관 순매수 누적
  • 시간 정보: 요일, 월, 분기말 여부
  • 97개의 특성 활용

장점:

  • 종목 간 패턴 학습으로 안정적인 예측
  • 새로운 종목에도 일반화 가능
  • 어떤 특성이 중요한지 자동으로 학습

단점:

  • 학습 시간이 오래 걸림 (GPU 필수)
  • 개별 종목의 특수성을 완벽하게 반영하기 어려움

2. TCN (Temporal Convolutional Network) - 2일 예측

특징:

  • CNN(Convolutional Neural Network) 기반의 시계열 예측 모델
  • 과거 데이터의 패턴을 계층적으로 학습
  • 종목별로 독립적인 모델 학습

학습 방식:

  • 입력: 20일간의 가격 시계열
  • 출력: 2일 후의 가격 예측
  • 각 종목마다 전용 모델 생성
  • 해당 종목의 고유한 특성을 깊이 학습

구조:

  • Causal Convolution: 미래 정보 사용 방지
  • Dilated Convolution: 넓은 범위의 패턴 포착
  • Residual Connection: 깊은 네트워크의 안정적 학습

장점:

  • 학습 속도가 빠름
  • 개별 종목의 특성을 정확히 반영
  • 비교적 단순한 구조로 해석이 용이

단점:

  • 종목마다 모델을 따로 학습해야 함
  • 데이터가 적은 종목은 성능이 낮을 수 있음

3. GBM (Gradient Boosting Machine) - 4일 예측

특징:

  • LightGBM 기반의 전통적 머신러닝 모델
  • 분류(Classification) 문제로 접근
  • 상승/하락 두 가지 클래스로 구분

학습 방식:

  • 입력: 60일간의 과거 데이터
  • 출력: 4일 후 상승/하락 분류
  • 4일 후 가격이 현재보다 1% 이상 오르면 "UP", 내리면 "DOWN"

사용하는 특징:

  • 엄선된 34개의 핵심 특징만 사용
  • Williams %R, MACD, RSI, Stochastic 등 기술적 지표
  • 볼린저 밴드, 저항/지지선 거리
  • 외국인 순매수 누적, 갭 상승/하락 합계

특성 중요도:

상위 특징들:
1. williams_r_10 - 과매수/과매도 판단
2. macd_5 - 단기 추세 전환
3. resistance_distance_5 - 저항선까지 거리
4. stoch_d_60 - 중장기 모멘텀
5. rsi_20 - 상대강도지수

장점:

  • 학습이 매우 빠름 (CPU만으로도 충분)
  • 특성 중요도를 명확하게 파악 가능
  • 해석이 쉬워 의사결정에 활용하기 좋음
  • 과적합 위험이 낮음

단점:

  • 복잡한 비선형 패턴 학습에는 한계
  • 시퀀스 정보를 직접 활용하지 못함

📊 모델 성능 평가 지표

1. Directional Accuracy (방향 정확도)

가장 중요한 지표

  • 상승/하락 방향을 얼마나 정확히 맞췄는지
  • -1% ~ +1% 보합 구간은 평가에서 제외
  • 실전 투자에서 가장 의미 있는 지표

2. R² Score (결정계수)

  • 예측 가격이 실제 가격을 얼마나 잘 설명하는지
  • 1에 가까울수록 좋음
  • 각 예측 시퀀스별로 계산하여 중앙값 사용

3. MAE / RMSE (오차 지표)

  • MAE (Mean Absolute Error): 평균 절대 오차
  • RMSE (Root Mean Squared Error): 평균 제곱근 오차
  • 가격 예측의 정확도를 원화 단위로 측정

🔬 학습 데이터 전처리

수익률 기반 학습

모델은 절대 가격이 아닌 수익률(Return)을 학습합니다.

수익률 = (오늘 가격 - 어제 가격) / 어제 가격

이유:

  • 종목마다 가격대가 다름 (삼성전자 70,000원 vs 코스피200 400원)
  • 수익률로 정규화하면 모든 종목을 동일한 스케일로 비교 가능
  • 패턴 학습에 더 효과적

이상치(Outlier) 처리

일일 수익률이 ±10%를 초과하는 극단적인 경우는 제한합니다.

  • 통계적 이상치 제거 (평균 ±3 표준편차)
  • 상한/하한 제한으로 학습 안정성 확보

데이터 스케일링

특성들의 스케일을 맞춰 학습 효율을 높입니다.

  • Standard Scaler: 평균 0, 표준편차 1로 정규화
  • Signed Log1p Scaler: 음수/양수를 보존하면서 로그 변환
  • RatioScaler: 수익률을 100배 스케일링 (학습 안정화)

📈 학습 프로세스

데이터 분할

시계열 특성을 고려한 순차적 분할

  • Train: 70% (과거 데이터)
  • Validation: 15% (중간 데이터)
  • Test: 15% (최근 데이터)

데이터 누수 방지:

  • 과거 데이터로만 학습
  • 미래 정보가 절대 섞이지 않도록 엄격히 관리
  • 분할 후 시간 순서 검증

Early Stopping

과적합을 방지하기 위한 조기 종료

  • Validation 성능이 일정 기간 개선되지 않으면 학습 중단
  • TFT: 6 에포크
  • TCN: 6 에포크
  • GBM: 200 라운드

하이퍼파라미터

각 모델의 주요 설정값:

TFT:

  • Hidden Size: 128
  • LSTM Layers: 2
  • Attention Heads: 4
  • Learning Rate: 0.0001

TCN:

  • Channels: [16, 32, 32]
  • Kernel Size: 3
  • Dropout: 0.2
  • Learning Rate: 0.001

GBM:

  • Max Depth: 6
  • Num Leaves: 60
  • Learning Rate: 0.001
  • N_estimators: 2000

💾 모델 저장 및 관리

데이터베이스 저장

학습된 모델은 PostgreSQL 데이터베이스에 저장됩니다.

저장 내용:

  • 모델 파일 (gzip 압축)
  • 스케일러 객체들 (전처리 재현용)
  • 설정 정보 (JSON)
  • 성능 지표
  • 학습 메타데이터 (버전, 날짜 등)

장점:

  • 버전 관리가 용이
  • 추론 시 필요한 모든 정보를 한 곳에서 관리
  • 여러 서버에서 동일한 모델 사용 가능

🎮 실전 활용

예측 시나리오

TFT 모델 예측 흐름:
1. 최근 20일간의 데이터를 입력
2. 모델이 3일 후의 수익률 예측
3. 수익률을 가격으로 변환
4. D day 가격과 비교하여 방향 판단

의사결정:

  • 예측 상승률이 +2% 이상: 매수 고려
  • 예측 하락률이 -2% 이하: 매도 고려
  • -1% ~ +1%: 보합, 관망

세 모델의 앙상블

단일 모델보다 여러 모델의 의견을 종합하는 것이 더 안전합니다.

예시:
TFT (3일 후): +2.5% 상승 예측
TCN (2일 후): +1.8% 상승 예측
GBM (4일 후): UP 분류

→ 세 모델 모두 상승 예측
→ 높은 신뢰도로 매수 신호

📡 실시간 모델 성능 모니터링

TFT 모델의 종목별 성능 추적

TFT 모델은 하나의 범용 모델로 모든 종목을 예측하지만, 종목마다 예측 성능이 다를 수 있습니다. 따라서 우리는 매일 각 종목별로 모델 성능을 측정하고 모니터링합니다.

왜 필요한가?

  • 하나의 모델이지만 종목별 특성이 다름
  • 어떤 종목에서 모델이 잘 작동하는지 파악
  • 성능이 낮은 종목은 투자 의사결정에서 배제
  • 사용자에게 투명한 정보 제공

일일 성능 측정 프로세스

1. 최신 데이터 수집

  • 각 종목의 최근 1년 데이터를 조회
  • OHLCV와 97개의 기술적 지표 생성
  • 실제 거래 데이터를 기반으로 한 실전 성능 평가

2. 테스트 시퀀스 구성

  • 최근 데이터에서 20개의 테스트 시퀀스 생성
  • 각 시퀀스는 20일 입력 + 3일 예측으로 구성
  • 과거 데이터 누수 없이 순차적으로 구성

3. 예측 및 평가

과정:
1. 범용 TFT 모델 로드 (MASTER_MODEL_CODE)
2. 각 종목별로 20개 시퀀스 예측 수행
3. R² Score 계산
4. Directional Accuracy 계산 (-1%~+1% 제외)
5. 결과를 데이터베이스에 저장

4. 대시보드에 반영

  • 측정된 성능 지표를 investment 테이블에 업데이트
  • 웹 대시보드(src/bi)를 통해 실시간 조회 가능
  • 종목별 성능을 시각화하여 사용자에게 제공

성능 지표 해석

R² Score:

  • 0.5 이상: 양호한 예측 성능
  • 0.3~0.5: 보통 수준
  • 0.3 미만: 예측력 낮음, 주의 필요

Directional Accuracy:

  • 60% 이상: 우수한 방향 예측
  • 50~60%: 일반적 수준
  • 50% 미만: 무작위 수준, 신뢰도 낮음

실전 활용 예시

종목 A:
- R² Score: 0.65
- Directional Accuracy: 68%
→ 높은 신뢰도로 예측 활용 가능

종목 B:
- R² Score: 0.28
- Directional Accuracy: 48%
→ 예측 신뢰도 낮음, 투자 결정 시 신중하게 고려

🔧 기술 스택

딥러닝 프레임워크:

  • PyTorch: TFT, TCN 모델 구현
  • PyTorch Lightning: 학습 파이프라인
  • PyTorch Forecasting: TFT 구현체

머신러닝:

  • LightGBM: GBM 모델
  • scikit-learn: 전처리 및 평가

데이터 처리:

  • pandas: 데이터 조작
  • numpy: 수치 연산

데이터베이스:

  • PostgreSQL: 모델 및 데이터 저장
  • SQLAlchemy
profile
서두르지 말고, 멈추지도 말고

0개의 댓글