인공지능

딥러닝 LSTM 시계열 예측 - TensorFlow, PyTorch LSTM

aiproductmanager 2025. 6. 7. 09:12
728x90
반응형
 

 

**“딥러닝 LSTM 시계열 예측 - TensorFlow, PyTorch LSTM”**은 주가, 날씨, 수요, 환율 등 **시간에 따른 순차 데이터(시계열)**를 예측하는 데 가장 널리 쓰이는 딥러닝 기법입니다.


🧠 1. LSTM이란?

항목 설명
풀네임 Long Short-Term Memory
종류 RNN 계열 (Recurrent Neural Network)
목적 긴 시계열 데이터의 장기 의존성(Long-term dependencies) 학습
구조 셀 상태(cell state)를 유지하면서 이전 입력의 정보를 장기 보존
 

📌 일반 RNN은 시계열이 길어지면 과거 정보를 잊지만, LSTM은 게이트 구조로 이를 해결합니다.


🧰 2. LSTM 구조

구성 요소 설명
Forget Gate 어떤 정보를 버릴지 결정
Input Gate 어떤 정보를 새로 저장할지 결정
Output Gate 현재 상태에서 무엇을 출력할지 결정
 

이러한 3가지 게이트 + 셀 상태를 조합해 과거와 현재 정보를 효과적으로 다룹니다.


🔧 3. TensorFlow LSTM 기본 구조

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout

model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(timesteps, features)))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(1))  # 다음 값 예측
model.compile(optimizer='adam', loss='mean_squared_error')

✅ 특징:

  • return_sequences=True: 다층 LSTM을 가능하게 함
  • Dropout: 과적합 방지
  • timesteps: 입력 시계열 길이 (ex. 30일치)
  • features: 피처 수 (ex. 종가 하나면 1)

🔩 4. PyTorch LSTM 구조

import torch.nn as nn

class LSTMModel(nn.Module):
    def __init__(self, input_size=1, hidden_size=50, num_layers=2):
        super().__init__()
        self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
        self.fc = nn.Linear(hidden_size, 1)

    def forward(self, x):
        out, _ = self.lstm(x)
        out = self.fc(out[:, -1, :])  # 마지막 시점만 예측
        return out

✅ PyTorch는 모델 정의가 유연하고, GPU 분산처리에 강점이 있습니다.


📈 5. 실제 활용 예

시나리오
📊 주가 예측 30일간 종가를 입력 → 내일 종가 예측
🌦 날씨 예측 지난 7일 기온 → 내일 기온 예측
📦 수요 예측 일일 주문 수량 → 다음 날 수요 예측
💱 환율 예측 USD/KRW 환율 시계열 → 미래 환율 예측
 

🎯 6. 장단점 비교

항목 장점 단점
LSTM (TensorFlow) 쉽게 구축, 커뮤니티 지원 풍부 대량 데이터 학습 느림
LSTM (PyTorch) 커스터마이징 쉬움, 유연성 복잡한 모델은 구현 난도 ↑
Transformer 계열 멀티시계열/멀티피처 대응 우수 학습비용 큼, LSTM보다 복잡
 

🔍 7. 응용 확장 방향

  • ✅ LSTM + Attention = 예측 정확도 향상
  • ✅ 멀티 변수 (종가 + 거래량 + 기술지표) 예측
  • ✅ 변동성 예측 → 리스크 관리 전략 연결
  • ✅ Streamlit 또는 Flask 연동 실시간 예측 웹앱

다음 예제:

  • PyTorch 버전 LSTM 예제 코드
  • 멀티 피처 LSTM 입력 구조
  • 실시간 주가 연동 + Streamlit 대시보드
  • Transformer vs LSTM 성능 비교 실험

 

 

# 머신러닝 및 딥러닝 기반 주가 예측 전체 예제 (XGBoost, LightGBM, SHAP, LSTM 포함)

import yfinance as yf
import pandas as pd
import numpy as np
import ta
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, accuracy_score
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from xgboost import XGBRegressor, XGBClassifier
from lightgbm import LGBMRegressor, LGBMClassifier
import shap
import matplotlib.pyplot as plt

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout

# 1. 데이터 수집
symbol = 'AAPL'
df = yf.download(symbol, start='2020-01-01', end='2024-12-31')
df = ta.add_all_ta_features(df, open='Open', high='High', low='Low', close='Close', volume='Volume')
df['Target_Close'] = df['Close'].shift(-1)  # 회귀용 타겟
df['Target_Direction'] = np.where(df['Close'].shift(-1) > df['Close'], 1, 0)  # 분류용 타겟
df.dropna(inplace=True)

features = df.drop(columns=['Adj Close', 'Target_Close', 'Target_Direction'])
scaler = StandardScaler()
X = scaler.fit_transform(features)

# 2. 회귀 모델 (LightGBM)
y_reg = df['Target_Close']
X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(X, y_reg, test_size=0.2, shuffle=False)
reg_model = LGBMRegressor()
reg_model.fit(X_train_reg, y_train_reg)
y_pred_reg = reg_model.predict(X_test_reg)
print("[LightGBM 회귀] MSE:", mean_squared_error(y_test_reg, y_pred_reg))

# 3. 분류 모델 (XGBoost)
y_cls = df['Target_Direction']
X_train_cls, X_test_cls, y_train_cls, y_test_cls = train_test_split(X, y_cls, test_size=0.2, shuffle=False)
cls_model = XGBClassifier(use_label_encoder=False, eval_metric='logloss')
cls_model.fit(X_train_cls, y_train_cls)
y_pred_cls = cls_model.predict(X_test_cls)
print("[XGBoost 분류] Accuracy:", accuracy_score(y_test_cls, y_pred_cls))

# 4. SHAP 해석 (XGBoost 분류 기준)
explainer = shap.Explainer(cls_model)
shap_values = explainer(X_test_cls[:200])
shap.summary_plot(shap_values, features.iloc[X_test_cls[:200].index], plot_type='bar')

# 5. LSTM 기반 딥러닝 시계열 예측
seq_len = 30
scaler_lstm = MinMaxScaler()
lstm_scaled = scaler_lstm.fit_transform(df[['Close']])

X_lstm = []
y_lstm = []
for i in range(seq_len, len(lstm_scaled)):
    X_lstm.append(lstm_scaled[i-seq_len:i, 0])
    y_lstm.append(lstm_scaled[i, 0])

X_lstm, y_lstm = np.array(X_lstm), np.array(y_lstm)
X_lstm = np.reshape(X_lstm, (X_lstm.shape[0], X_lstm.shape[1], 1))

model_lstm = Sequential()
model_lstm.add(LSTM(50, return_sequences=False, input_shape=(X_lstm.shape[1], 1)))
model_lstm.add(Dropout(0.2))
model_lstm.add(Dense(1))
model_lstm.compile(optimizer='adam', loss='mean_squared_error')
model_lstm.fit(X_lstm, y_lstm, epochs=10, batch_size=32)

predicted_price = model_lstm.predict(X_lstm[-1].reshape(1, seq_len, 1))
print("[LSTM 예측] 다음 종가 예측 (정규화):", predicted_price[0][0])

순위 AI 투자 방안 이름 활용 기술 상세 바로가기
1 AI 퀀트 포트폴리오 최적화 Markowitz, RL, MPT, AI 최적화 바로가기
2 감정 분석 기반 뉴스 트레이딩 NLP, BERT, LLM 바로가기
3 AI ETF 자동 리밸런싱 AutoML, Alpha Vantage API 바로가기
4 머신러닝 기반 주가 예측 XGBoost, LightGBM 바로가기
5 딥러닝 LSTM 시계열 예측 TensorFlow, PyTorch LSTM 바로가기
6 강화학습 기반 자동 매매 OpenAI Gym, PPO, DQN 바로가기
7 AI 기반 가치주 선별 (Value Factor) AI 팩터스코어링, 계량모델 바로가기
8 GPT 기반 재무제표 요약 투자 GPT-4, LangChain, OCR 바로가기
9 AI 리스크 해지 전략 (VIX, 금리, 환율) AI 헷지백테스트, 시나리오 모델 바로가기
10 SVM 기반 종목 필터링 SVM + 재무데이터 바로가기
11 AI IPO 스코어링 모델 AI 점수화 + IPO 성과예측 바로가기
12 챗봇 기반 투자 자문 시스템 LLM + Chat UI + API 연결 바로가기
13 XGBoost 기반 이벤트 드리븐 트레이딩 XGBoost + 뉴스 이벤트 바로가기
14 AutoML 기반 알고리즘 전략 탐색 TPOT, H2O.ai, FeatureTools 바로가기
15 AI 기반 ESG 점수 분석 투자 AI ESG 분석 + ETF 필터링 바로가기
16 옵션 가격 예측 딥러닝 모델 DNN, OptionNet, VolNet 바로가기
17 고빈도 트레이딩용 AI 패턴 인식 CNN, 딥러닝 패턴 분석 바로가기
18 AI 기반 섹터 로테이션 모델 순환분류 + 군집분석 바로가기
19 LLM 기반 글로벌 투자 리서치 요약 GPT + PDF 요약 + 질의응답 바로가기
20 AI + Satellite Data 기반 농산물 투자 AI + 위성데이터 + 시계열학습 바로가기

이 글이 도움이 되었다면,아래 링크를 통해서 후원해주세요.( 커피나 차 한잔 이나 맥주나 와인한잔 )

 

728x90
반응형