본문 바로가기
Finance/Quant

ETF 가격 예측을 위한 이미지 기반 딥러닝 리뷰 및 구현 (Interpretable image-based deep learning for price trend prediction in ETF markets 논문 요약)

by Quantrol 2025. 3. 22.
반응형

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 데이터를 바탕으로 훈련하고 시뮬레이션까지 수행해 보았습니다.

✅ 문제 정의 및 연구 동기

  1. 기존의 주식 가격 예측 모델은 시계열 데이터(OHLCV)를 직접 입력값으로 사용
  2. 딥러닝, 특히 CNN(합성곱 신경망)이 이미지 기반에서 뛰어난 성능을 보이기 때문에 금융 데이터를 이미지로 변환하는 새로운 접근 필요
  3. 가격 패턴을 CNN에서 학습하도록 시계열 데이터를 이미지로 변환 → 기술적 분석 패턴 학습 가능

"시계열 → 이미지 변환 → CNN 학습"
새로운 형태의 특징 추출 방식 + CNN의 공간적 패턴 학습 능력을 활용


✅ 주요 기여

  1. 시계열 데이터를 이미지로 변환
    • 캔들스틱 차트를 이미지화
    • GAF (Gramian Angular Field)로 시계열의 시간적 관계를 이미지화
  2. CS-ACNN 모델 제안
    • 기존 CNN에 Channel AttentionSpatial Attention 모듈 추가
    • 특정 채널 및 공간에서 중요한 영역에 주의를 집중
  3. 모델 해석 가능성 확보
    • Grad-CAM을 사용해 모델이 집중한 영역 시각화
    • 전통적인 기술적 분석 패턴(헤드 앤 숄더 등)과 일치하는 점 발견
  4. 우수한 성능 확보
    • 수익률과 샤프 비율에서 기존 모델 대비 우수한 성능 확인
    • 거래 비용 후에도 수익률 보존

연구 기법 및 모델 구조

시계열 데이터를 이미지로 변환

1. Augmented Candlestick Charts

  • 캔들스틱 차트에서 중심 및 가장자리를 강화/약화한 4가지 버전 생성
  • 모델의 일반화 성능 강화

2. Gramian Angular Field (GAF)

  • 시계열 데이터를 극좌표로 변환 → 코사인 값을 통해 이미지 생성
  • 시계열의 시간 의존성을 이미지에 포함

CS-ACNN 구조

기본 CNN 구조 + 주의 메커니즘 추가

  1. Channel Attention:
    • 어떤 채널이 중요한지 판단
  2. Spatial Attention:
    • 어떤 공간적 패턴이 중요한지 판단

✅ 주요 구조:

[Conv → BatchNorm → ReLU → MaxPooling → Channel Attention → Spatial Attention] x 3

코딩 구현 내용

✅ 시계열 → 이미지 변환 (핵심 코드)

  1. 캔들스틱 차트 생성 코드
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
  1. 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 기반 학습 가능
  • 성능 우수 → 모델이 시각적으로 패턴을 학습
  • 향후 다른 금융 데이터(펀더멘털 등)에도 적용 가능

 

반응형