모델 개발: 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% (보합 범위 초과)
→ 방향 일치: 정답! ✅
🤖 세 가지 모델 소개
특징:
- 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