본문 바로가기

경제 주식

LSTM(딥러닝)을 활용한 주가 예측 모델

반응형

🤖 LSTM(딥러닝)을 활용한 주가 예측 모델

딥러닝을 활용하면 퀀트투자의 정밀도를 더욱 높일 수 있어요! 📈 오늘은 LSTM(Long Short-Term Memory) 모델을 사용해 주가를 예측하는 방법을 소개할게요.

 

반응형

📌 목차

  1. LSTM이란? (개념 및 특징)
  2. 데이터 수집 및 전처리
  3. 데이터 정규화 및 시퀀스 생성
  4. LSTM 모델 구축 및 학습
  5. 모델 평가 및 예측 결과 시각화
  6. 실전 적용을 위한 고려 사항
  7. 초보자를 위한 딥러닝 투자 팁

LSTM(딥러닝)을 활용한 주가 예측 모델

 

💡 LSTM이란?

LSTM은 순환 신경망(RNN)의 한 종류로, 시계열 데이터를 다룰 때 강력한 성능을 발휘하는 모델입니다.

📌 LSTM의 특징

  • 장기 기억 유지: 과거 데이터를 학습하여 장기적인 패턴을 분석
  • 시계열 데이터에 최적화: 주가처럼 시간이 흐르면서 변화하는 데이터 예측에 적합
  • 이전 데이터의 영향력 반영: 단순한 회귀 모델보다 더 복잡한 패턴을 학습 가능

이제 실전으로 들어가 볼까요? 🚀


📊 데이터 수집 및 전처리

먼저 Yahoo Finance에서 데이터를 가져오고 전처리를 해봅시다.

import numpy as np
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
from sklearn.preprocessing import MinMaxScaler

# 삼성전자(005930.KQ) 주가 데이터 다운로드
ticker = "005930.KQ"
data = yf.download(ticker, start="2015-01-01", end="2024-01-01")

# 종가(Close)만 사용
data = data[["Close"]]

# 데이터 확인
print(data.head())

 

 

🔎 데이터 정규화 및 시퀀스 생성

LSTM 모델은 연속적인 데이터를 입력으로 받기 때문에 시퀀스를 생성해야 해요.

 

# 데이터 정규화 (0~1 범위로 변환)
scaler = MinMaxScaler(feature_range=(0, 1))
data_scaled = scaler.fit_transform(data)

# 시퀀스 데이터 생성 함수
def create_sequences(dataset, seq_length):
    sequences = []
    labels = []
    
    for i in range(len(dataset) - seq_length):
        sequences.append(dataset[i:i + seq_length])
        labels.append(dataset[i + seq_length])
    
    return np.array(sequences), np.array(labels)

# 시퀀스 길이 설정 (예: 60일간의 데이터를 입력으로 사용)
seq_length = 60
X, y = create_sequences(data_scaled, seq_length)

# 훈련 데이터와 테스트 데이터 분리 (80:20)
train_size = int(len(X) * 0.8)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]

# 데이터 형태 출력
print(f"훈련 데이터 크기: {X_train.shape}, 테스트 데이터 크기: {X_test.shape}")

 

 

📌 시퀀스 데이터 생성 이유

  • LSTM 모델은 이전 데이터를 참고하여 예측하므로 시퀀스 데이터가 필요함
  • 보통 30~90일 데이터를 한 세트로 만들어 학습

🏗️ LSTM 모델 구축 및 학습

이제 딥러닝 모델을 만들어볼게요!

# LSTM 모델 생성
model = Sequential([
    LSTM(50, return_sequences=True, input_shape=(seq_length, 1)),  
    Dropout(0.2),  
    LSTM(50, return_sequences=False),  
    Dropout(0.2),  
    Dense(25),  
    Dense(1)  
])

# 모델 컴파일
model.compile(optimizer="adam", loss="mean_squared_error")

# 모델 학습
history = model.fit(X_train, y_train, epochs=50, batch_size=16, validation_data=(X_test, y_test))

 

📌 모델 구조 설명

  • LSTM 레이어: 2개를 사용하여 시계열 패턴 학습
  • Dropout 레이어: 과적합 방지
  • Dense 레이어: 마지막 출력값을 예측

📈 모델 평가 및 예측 결과 시각화

이제 모델이 학습한 결과를 시각화해봅시다.

# 예측 수행
predictions = model.predict(X_test)

# 원래 스케일로 변환
predictions = scaler.inverse_transform(predictions)
y_test_original = scaler.inverse_transform(y_test.reshape(-1, 1))

# 결과 시각화
plt.figure(figsize=(12, 6))
plt.plot(y_test_original, label="Actual Price", color="black")
plt.plot(predictions, label="Predicted Price", color="red", linestyle="dashed")
plt.legend()
plt.title("LSTM 주가 예측 결과")
plt.show()

 

📌 결과 해석

  • 검은색 선: 실제 주가
  • 빨간색 점선: 모델이 예측한 주가
  • 예측값이 실제 값과 유사하다면 모델이 잘 학습된 것!

⚠️ 실전 적용을 위한 고려 사항

🚨 오버피팅(Overfitting) 방지

  • 검증 데이터(validation data)로 성능을 확인해야 함
  • Dropout 레이어 추가하여 과적합 방지

🚨 실시간 데이터 업데이트 필요

  • 실제 거래에서는 최신 데이터를 계속 학습해야 함
  • API를 활용해 실시간 데이터를 적용하는 방법 고려

🚨 거래 비용 고려

  • 예측이 완벽하지 않으므로 매매 횟수를 줄이는 것이 중요

🚨 시장 변동성 고려

  • 모델이 예측하지 못하는 블랙스완(Black Swan) 이벤트 발생 가능

🎯 초보자를 위한 딥러닝 투자 팁

기본 개념부터 익히기: 먼저 선형 회귀, 랜덤 포레스트 같은 쉬운 모델부터 시작
데이터 전처리가 중요: 정규화, 시퀀스 생성 등 데이터 준비 과정이 모델 성능에 영향을 줌
백테스팅 필수: 과거 데이터로 성능 검증 후 실전 적용
거래 비용 고려: 예측이 틀렸을 때 손실을 줄일 수 있는 전략 필요
단순한 모델부터 시작: 너무 복잡한 모델보다는 기본적인 구조부터 실험


여러분은 어떻게 생각하시나요? 💬

딥러닝을 활용한 퀀트 전략에 관심 있으신가요? 혹시 직접 실험해본 모델이 있다면 공유해주세요! 😊


마무리하며

오늘은 LSTM을 활용한 주가 예측 모델을 소개했어요. 다음 글에서는 강화학습을 활용한 자동 매매 알고리즘을 다뤄볼 예정이니 기대해주세요! 🚀

 

 

 

반응형