반응형
Interpretable Image-Based Deep Learning for Price Trend Prediction in ETF Markets
- 위의 논문은 금융 시계열 데이터를 이미지로 변환하고 이를 CNN(합성곱 신경망)에서 처리하는 방식을 통해 주식 가격 추세를 예측합니다.
- 이미지로 변환한 데이터에는 캔들스틱 차트와 Gramian Angular Field (GAF)가 포함됩니다.
- 논문에서 제안된 모델은 기존의 CNN 구조에 Channel & Spatial Attention (CS-ACNN)을 도입해 성능을 극대화합니다.
- 저는 논문의 구조를 바탕으로 PyTorch로 직접 모델을 구현하고, 실제 KOSPI 데이터를 바탕으로 훈련하고 시뮬레이션까지 수행해 보았습니다.
✅ 문제 정의 및 연구 동기
- 기존의 주식 가격 예측 모델은 시계열 데이터(OHLCV)를 직접 입력값으로 사용
- 딥러닝, 특히 CNN(합성곱 신경망)이 이미지 기반에서 뛰어난 성능을 보이기 때문에 금융 데이터를 이미지로 변환하는 새로운 접근 필요
- 가격 패턴을 CNN에서 학습하도록 시계열 데이터를 이미지로 변환 → 기술적 분석 패턴 학습 가능
"시계열 → 이미지 변환 → CNN 학습"
새로운 형태의 특징 추출 방식 + CNN의 공간적 패턴 학습 능력을 활용
✅ 주요 기여
- 시계열 데이터를 이미지로 변환
- 캔들스틱 차트를 이미지화
- GAF (Gramian Angular Field)로 시계열의 시간적 관계를 이미지화
- CS-ACNN 모델 제안
- 기존 CNN에 Channel Attention과 Spatial Attention 모듈 추가
- 특정 채널 및 공간에서 중요한 영역에 주의를 집중
- 모델 해석 가능성 확보
- Grad-CAM을 사용해 모델이 집중한 영역 시각화
- 전통적인 기술적 분석 패턴(헤드 앤 숄더 등)과 일치하는 점 발견
- 우수한 성능 확보
- 수익률과 샤프 비율에서 기존 모델 대비 우수한 성능 확인
- 거래 비용 후에도 수익률 보존
연구 기법 및 모델 구조
시계열 데이터를 이미지로 변환
1. Augmented Candlestick Charts
- 캔들스틱 차트에서 중심 및 가장자리를 강화/약화한 4가지 버전 생성
- 모델의 일반화 성능 강화
2. Gramian Angular Field (GAF)
- 시계열 데이터를 극좌표로 변환 → 코사인 값을 통해 이미지 생성
- 시계열의 시간 의존성을 이미지에 포함
CS-ACNN 구조
기본 CNN 구조 + 주의 메커니즘 추가
- Channel Attention:
- 어떤 채널이 중요한지 판단
- Spatial Attention:
- 어떤 공간적 패턴이 중요한지 판단
✅ 주요 구조:
[Conv → BatchNorm → ReLU → MaxPooling → Channel Attention → Spatial Attention] x 3
코딩 구현 내용
✅ 시계열 → 이미지 변환 (핵심 코드)
- 캔들스틱 차트 생성 코드
def generate_candlestick_image(df_window):
from mplfinance.original_flavor import candlestick_ohlc
import matplotlib.dates as mdates
fig, ax = plt.subplots(figsize=(1.12, 0.64), dpi=100)
ohlc = []
for idx, row in df_window.iterrows():
date_num = mdates.date2num(row['date'])
ohlc.append([date_num, row['adj_open'], row['adj_high'], row['adj_low'], row['adj_close']])
candlestick_ohlc(ax, ohlc, width=0.6, colorup='r', colordown='g')
ax.axis('off')
plt.close(fig)
img = cv2.resize(img, (112, 64))
return img
- GAF 이미지 생성 코드
def generate_gaf_images(df_window):
scaled = (series - min_val) / (max_val - min_val + 1e-8)
phi = np.arccos(scaled)
gaf = np.cos(np.add.outer(phi, phi))
gaf_resized = cv2.resize(gaf, (20, 20))
return gaf_resized
✅ CS-ACNN 모델 구현 (핵심 구조)
Channel Attention 모듈
class ChannelAttention(nn.Module):
def forward(self, x):
avg_out = self.conv(self.avg_pool(x).view(x.size(0), 1, -1))
max_out = self.conv(self.max_pool(x).view(x.size(0), 1, -1))
scale = self.sigmoid(out).view(x.size(0), x.size(1), 1, 1)
return x * scale
Spatial Attention 모듈
class SelfSpatialAttention(nn.Module):
def forward(self, x):
proj_query = self.query_conv(x).view(m_batchsize, -1, width * height)
proj_key = self.key_conv(x).view(m_batchsize, -1, width * height)
attention = self.softmax(energy)
out = self.gamma * out + x
return out
✅ 모델 학습 및 성능 평가
- 학습률 스케줄러 적용
- 모델 검증 시 성능 지표 출력
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1)
논문 vs 코드 비교
이미지 변환 | 캔들스틱 차트 + GAF | 동일 |
데이터 증강 | 중심/가장자리 강화 및 약화 | 동일 |
주의 메커니즘 | CS-ACNN 적용 | Self-Attention 추가 |
기본 모델 구조 | CNN + Attention | 동일 |
손실함수 | Cross-Entropy | 동일 |
투자 전략 | Long-Only, Long-Short | 동일 |
데이터셋 | 미국 SPY, 홍콩 2833.HK, 중국 510050.SS | KOSPI 단일 종목 |
실험 결과 요약
결론 및 적용 방안
- 시계열 데이터를 이미지화 → CNN 기반 학습 가능
- 성능 우수 → 모델이 시각적으로 패턴을 학습
- 향후 다른 금융 데이터(펀더멘털 등)에도 적용 가능
반응형
'Finance > Quant' 카테고리의 다른 글
ETF 괴리율이 다음날 시가, 종가에 미치는 영향 분석 (0) | 2025.03.22 |
---|---|
LPPLS 기반 시계열 예측 모델 연구 및 구현 (Deep LPPLS 논문 요약 + 딥러닝으로 국면 전환 예측) (2) | 2025.03.22 |
[QUANT] 주가 예측 논문: Accurate Multivariate Stock Movement Prediction via Data-Axis (2) | 2025.03.20 |
QUANT 유튜버 따라잡기 : 강환국 유튜버님의 올웨더 포트폴리오 백테스팅 (0) | 2023.05.09 |
직장인들이 궁금해하는 포트폴리오 설계 1 (Stock 60 Bond 40 Portfolio) (0) | 2023.04.20 |