본문 바로가기

Study Information Technology

주식 가격 예측을 위한 앙상블 모델 구축

728x90
반응형

주식 가격 예측을 위한 앙상블 모델 구축

Overview

주식 시장은 수많은 변수와 복잡한 패턴으로 이루어져 있어, 단일 머신러닝 알고리즘으로는 예측의 정확성을 확보하기 어렵습니다. 이에 따라 여러 머신러닝 알고리즘을 결합하여 더 나은 예측 성능을 제공하는 앙상블 모델을 구축하는 것이 중요합니다. 이 글에서는 주식 가격 예측을 위한 앙상블 모델의 개념, 방법론, 코드 예제 및 발생할 수 있는 에러와 해결 방법에 대해 자세히 설명하겠습니다.

1. 앙상블 모델의 개념

앙상블 모델은 두 개 이상의 머신러닝 알고리즘을 조합하여 더 나은 예측 성능을 달성하는 기법입니다. 이 기법의 기본 아이디어는 서로 다른 모델이 동일한 데이터를 학습하더라도 각 모델이 가지고 있는 장점과 단점을 보완할 수 있다는 것입니다.

주식 가격 예측에 적용될 수 있는 일반적인 앙상블 기법으로는 다음과 같은 것들이 있습니다:

  • 배깅(Bagging): 여러 모델을 독립적으로 훈련한 후 그 결과를 평균하여 최종 예측을 도출합니다.
  • 부스팅(Boosting): 이전 모델이 잘못 예측한 데이터에 더 많은 가중치를 두어 연속적으로 모델을 학습시킵니다.
  • 스태킹(Stacking): 여러 모델의 예측 결과를 새로운 입력으로 하여 최종 예측 모델을 학습합니다.

2. 앙상블 모델 구축 방법론

이번 섹션에서는 앙상블 모델을 구축하기 위한 구체적인 방법을 다루겠습니다. 우리는 주식 가격 예측을 위해 랜덤 포레스트와 그래디언트 부스팅 머신(GBM)을 결합하는 스태킹 앙상블을 구현해 보겠습니다.

2.1 데이터 수집 및 전처리

주식 가격 예측을 위해 우리는 Yahoo Finance API를 통해 주식 데이터를 수집할 수 있습니다. 필요한 데이터는 주식의 종가, 거래량 등입니다. 다음은 데이터 수집의 예입니다:

import pandas as pd
import yfinance as yf

# 애플(Apple)의 주식 데이터 수집
data = yf.download('AAPL', start='2020-01-01', end='2023-01-01')
data = data[['Close']]
data.reset_index(inplace=True)
data['Date'] = pd.to_datetime(data['Date'])
data.set_index('Date', inplace=True)

2.2 특성 생성

가격 예측을 위한 특징(feature)을 생성합니다. 예를 들어, 이동 평균, 상대 강도 지수(RSI) 등을 계산하여 모델의 입력으로 사용할 수 있습니다.

# 5일 이동 평균
data['MA5'] = data['Close'].rolling(window=5).mean()

# 14일 RSI 계산
delta = data['Close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
rs = gain / loss
data['RSI'] = 100 - (100 / (1 + rs))

2.3 모델 구축

랜덤 포레스트와 그래디언트 부스팅 머신(GBM) 모델을 생성합니다. 그리고 이 두 모델을 스태킹합니다.

from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor, StackingRegressor
from sklearn.model_selection import train_test_split

# 입력(X) 및 출력(y) 데이터 정의
X = data[['MA5', 'RSI']].iloc[5:]  # 이동 평균과 RSI를 사용
y = data['Close'].iloc[5:]

# 훈련 세트와 테스트 세트 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 앙상블 모델 구축
base_models = [
('rf', RandomForestRegressor(n_estimators=100)),
('gbm', GradientBoostingRegressor(n_estimators=100))
]
stacked_model = StackingRegressor(estimators=base_models, final_estimator=RandomForestRegressor())
stacked_model.fit(X_train, y_train)

2.4 모델 평가

모델의 성능을 평가하기 위해 RMSE(루트 평균 제곱 오차)를 사용할 수 있습니다.

from sklearn.metrics import mean_squared_error
import numpy as np

# 예측 수행
y_pred = stacked_model.predict(X_test)

# RMSE 계산
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print(f"Root Mean Squared Error: {rmse}")

3. 발생할 수 있는 에러와 해결 방법

모델 구축 과정에서 몇 가지 에러가 발생할 수 있습니다. 여기 몇 가지 일반적인 에러와 해결 방법을 소개합니다.

3.1 데이터 불일치

에러 메시지: ValueError: Found input variables with inconsistent numbers of samples

해결 방법: 입력 데이터와 출력 데이터의 길이가 일치하지 않을 때 발생합니다. 데이터를 확인하여 불일치하는 부분을 찾아 해결해야 합니다.

3.2 모델 하이퍼파라미터 설정

에러 메시지: ValueError: n_estimators must be a positive integer

해결 방법: 모델의 하이퍼파라미터인 n_estimators 값이 올바른지 확인해야 합니다. 양의 정수로 설정해야 합니다.

4. 결론

앙상블 모델을 활용하여 여러 머신러닝 알고리즘의 장점을 결합함으로써 주식 가격 예측의 정확성을 크게 향상시킬 수 있습니다. 랜덤 포레스트와 그래디언트 부스팅 머신을 결합한 스태킹 앙상블은 효과적인 접근 방식이며, 데이터 전처리와 적절한 특성 선택이 중요합니다. 실험과 반복적인 튜닝을 통해 모델을 개선할 수 있습니다.

참고문서

728x90
반응형