본문 바로가기

Study Information Technology

주식 가격 변동 예측 모델 구축 앙상블 기법 활용하기

728x90
반응형

주식 가격 변동 예측 모델 구축: 앙상블 기법 활용하기

Overview

주식 시장은 복잡하고 변동성이 큰 환경입니다. 이 때문에 주식 가격 변동 예측은 투자자와 금융 전문가에게 매우 중요한 과제가 됩니다. 이 글에서는 앙상블 기법, 특히 스태킹(stacking)과 부스팅(boosting)을 활용하여 주식 가격 예측 모델을 구축하는 방법에 대해 깊이 있게 설명하겠습니다. 앙상블 기법은 여러 모델의 예측 결과를 결합하여 더 나은 성능을 이끌어내는 기술입니다.

1. 데이터 수집 및 전처리

모델을 구축하기 위해서는 먼저 데이터 수집이 필요합니다. 주식 가격 데이터를 수집하는 방법으로는 Yahoo Finance, Alpha Vantage, Quandl 등의 API를 활용할 수 있습니다. 예를 들어, Python의 yfinance 라이브러리를 사용하여 데이터를 가져올 수 있습니다.

import yfinance as yf

# 특정 주식의 데이터 수집 (예: Apple)
data = yf.download('AAPL', start='2020-01-01', end='2023-01-01')
print(data.head())

데이터를 수집한 후에는 전처리가 필요합니다. 결측치 처리, 이상치 제거, 그리고 데이터 정규화(normalization) 또는 표준화(standardization) 같은 작업을 진행합니다.

결측치 처리

결측치는 pandas 라이브러리를 이용해 처리할 수 있습니다. 예를 들어, 결측치를 평균으로 대체할 수 있습니다.

data.fillna(data.mean(), inplace=True)

2. 특성 생성

주식 가격 예측에 사용할 특성을 생성합니다. 기본적으로 사용할 수 있는 특성으로는 이동 평균, 상대 강도 지수(RSI), 볼린저 밴드 등을 고려할 수 있습니다. 예를 들어, 20일 이동 평균을 계산하는 코드는 다음과 같습니다.

data['SMA_20'] = data['Close'].rolling(window=20).mean()

추가적인 특성

더 나아가, 특정 기간의 변동률이나 거래량 변화를 특성으로 추가하는 것도 유용합니다.

data['Returns'] = data['Close'].pct_change()
data['Volume_Change'] = data['Volume'].pct_change()

3. 모델 선택: 스태킹과 부스팅

이제 본격적으로 모델을 선택하겠습니다. 두 가지 앙상블 기법인 스태킹과 부스팅을 설명하겠습니다.

3.1 스태킹

스태킹은 여러 개의 기본 모델을 훈련시킨 후, 그 결과를 새로운 데이터 세트로 만들어 최종 예측을 수행하는 방법입니다. 다음은 스태킹을 구현하기 위한 기본적인 절차입니다.

  1. 기본 모델 선택: 여러 개의 다양한 모델을 선택합니다. 예를 들어, 랜덤 포레스트, XGBoost, 로지스틱 회귀를 사용할 수 있습니다.
  2. 기본 모델 훈련: 각 모델을 훈련시키고, 예측 결과를 저장합니다.
  3. 메타 모델 훈련: 기본 모델의 예측 결과를 입력으로 하여 메타 모델을 훈련합니다.

아래는 스태킹을 구현한 코드입니다.

from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np

# 데이터 준비
X = data[['SMA_20', 'Returns', 'Volume_Change']]
y = data['Close']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 기본 모델 훈련
model1 = RandomForestRegressor().fit(X_train, y_train)
model2 = GradientBoostingRegressor().fit(X_train, y_train)

# 기본 모델 예측
pred1 = model1.predict(X_test)
pred2 = model2.predict(X_test)

# 메타 모델 훈련
meta_X = np.column_stack((pred1, pred2))
meta_model = LinearRegression().fit(meta_X, y_test)

# 최종 예측
final_pred = meta_model.predict(meta_X)
print("스태킹 모델의 RMSE:", mean_squared_error(y_test, final_pred, squared=False))

3.2 부스팅

부스팅은 약한 학습기(weak learners)를 결합하여 강한 학습기를 만드는 기법입니다. XGBoost가 부스팅 기법 중 가장 많이 사용됩니다.

import xgboost as xgb

# XGBoost 모델 훈련
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test)

params = {
'objective': 'reg:squarederror',
'max_depth': 3,
'eta': 0.1,
'eval_metric': 'rmse'
}

bst = xgb.train(params, dtrain, num_boost_round=100)

# 예측
preds = bst.predict(dtest)
print("부스팅 모델의 RMSE:", mean_squared_error(y_test, preds, squared=False))

4. 모델 평가 및 하이퍼파라미터 조정

모델을 평가할 때는 RMSE, MAE(평균 절대 오차) 등의 지표를 사용합니다. 또한, Grid Search 또는 Random Search를 통해 하이퍼파라미터를 최적화할 수 있습니다. sklearnGridSearchCV를 사용할 수 있습니다.

from sklearn.model_selection import GridSearchCV

# 하이퍼파라미터 튜닝
param_grid = {
'max_depth': [3, 4, 5],
'n_estimators': [50, 100, 200]
}

grid_search = GridSearchCV(GradientBoostingRegressor(), param_grid, scoring='neg_mean_squared_error', cv=5)
grid_search.fit(X_train, y_train)

print("최적 하이퍼파라미터:", grid_search.best_params_)

5. 결론

주식 가격 변동 예측 모델을 구축하는 과정은 데이터 수집, 전처리, 특성 생성, 모델 선택, 평가의 단계로 나눌 수 있습니다. 스태킹과 부스팅은 각각의 장점을 가지고 있으며, 이 두 가지 방법을 활용하면 예측 성능을 크게 향상시킬 수 있습니다. 모델을 구현하면서 발생할 수 있는 오류와 그 해결 방법을 항상 염두에 두고, 지속적으로 데이터와 모델을 개선해 나가는 것이 중요합니다.

참고문서

이 자료를 통해 주식 가격 예측 모델을 구축하는 데 필요한 기초 지식과 실습 방법을 익힐 수 있기를 바랍니다.

728x90
반응형