본문 바로가기

Study Information Technology

AI 모델 개발 거시경제 지표와 산업 트렌드를 기반으로 한 주가 예측

728x90
반응형

AI 모델 개발: 거시경제 지표와 산업 트렌드를 기반으로 한 주가 예측

Overview

주가 예측은 많은 투자자와 금융 기관의 관심을 끌고 있으며, 이를 위해 인공지능(AI) 모델을 활용하는 방법이 점점 더 주목받고 있습니다. 본 글에서는 거시경제 지표와 산업 트렌드를 기반으로 한 AI 모델을 개발하는 방법에 대해 자세히 설명하겠습니다. 이 과정에서는 데이터 수집, 데이터 전처리, 모델 선택 및 훈련, 예측 및 평가 단계에 대해 구체적인 예시와 함께 설명하겠습니다.

1. 데이터 수집

주가 예측을 위한 AI 모델 개발의 첫 단계는 데이터 수집입니다. 주가와 관련된 다양한 거시경제 지표와 산업 트렌드를 포함하는 데이터를 수집해야 합니다. 일반적으로 다음과 같은 데이터 소스를 활용합니다.

  • 거시경제 지표: GDP 성장률, 실업률, 소비자 물가 지수(CPI), 금리 등
  • 산업 데이터: 특정 산업의 생산량, 판매량, 시장 점유율 등의 데이터
  • 주가 데이터: 해당 기업의 주가, 거래량, 배당금 등

예시

예를 들어, 미국의 GDP 성장률 데이터는 미국 경제 분석국(Bureau of Economic Analysis) 웹사이트에서 다운로드할 수 있습니다. 주가 데이터는 Yahoo Finance API를 통해 손쉽게 얻을 수 있습니다.

import pandas as pd
import yfinance as yf

# 특정 기업의 주가 데이터 수집
stock_data = yf.download("AAPL", start="2020-01-01", end="2023-01-01")
print(stock_data.head())

2. 데이터 전처리

데이터를 수집한 후에는 이를 전처리하여 모델에 적합한 형태로 만들어야 합니다. 전처리 단계에서는 결측치 처리, 이상치 제거, 정규화 등의 작업이 포함됩니다.

결측치 처리

결측치는 데이터 분석 과정에서 흔히 발생하는 문제입니다. Pandas를 사용하여 결측치를 처리할 수 있습니다.

# 결측치 확인
print(stock_data.isnull().sum())

# 결측치 제거
stock_data = stock_data.dropna()

정규화

모델 훈련을 위해 데이터를 정규화하는 것이 좋습니다. Min-Max 스케일러를 사용하여 데이터를 0과 1 사이로 변환할 수 있습니다.

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(stock_data[['Close']])

3. 모델 선택 및 훈련

주가 예측을 위해 다양한 머신러닝 모델을 사용할 수 있습니다. 여기서는 LSTM(Long Short-Term Memory) 네트워크를 사용해 보겠습니다. LSTM은 시계열 데이터 예측에 효과적입니다.

LSTM 모델 구축

TensorFlow와 Keras를 사용하여 LSTM 모델을 구축합니다.

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

# 모델 정의
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(scaled_data.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(50, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(25))
model.add(Dense(1))

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

모델 훈련

훈련 데이터를 준비한 후 모델을 훈련시킵니다.

# 데이터셋 분할
train_data = scaled_data[:int(len(scaled_data) * 0.8)]
x_train, y_train = [], []

for i in range(60, len(train_data)):
x_train.append(train_data[i-60:i, 0])
y_train.append(train_data[i, 0])

x_train, y_train = np.array(x_train), np.array(y_train)

# LSTM 모델 훈련
model.fit(x_train, y_train, batch_size=1, epochs=5)

4. 예측 및 평가

모델 훈련이 완료되면, 테스트 데이터를 사용하여 예측을 수행하고, 예측 결과를 평가해야 합니다.

예측 수행

테스트 데이터를 이용해 주가를 예측합니다.

# 테스트 데이터 준비
test_data = scaled_data[int(len(scaled_data) * 0.8) - 60:]
x_test, y_test = [], scaled_data[int(len(scaled_data) * 0.8):, 0]

for i in range(60, len(test_data)):
x_test.append(test_data[i-60:i, 0])

x_test = np.array(x_test)

# 예측 수행
predictions = model.predict(x_test)
predictions = scaler.inverse_transform(predictions)

예측 결과 평가

예측 결과를 시각화하고 성능을 평가합니다.

import matplotlib.pyplot as plt

train = stock_data[:int(len(stock_data) * 0.8)]
valid = stock_data[int(len(stock_data) * 0.8):]
valid['Predictions'] = predictions

# 그래프 시각화
plt.figure(figsize=(16, 8))
plt.title('Model')
plt.xlabel('Date')
plt.ylabel('Close Price USD ($)')
plt.plot(train['Close'])
plt.plot(valid[['Close', 'Predictions']])
plt.legend(['Train', 'Val', 'Predictions'], loc='lower right')
plt.show()

5. 에러 처리 및 해결책

모델 훈련이나 예측 과정에서 발생할 수 있는 일반적인 에러를 몇 가지 살펴보겠습니다.

  • ValueError: Shapes (None, x) and (None, y) are incompatible: 이 에러는 모델의 입력과 출력 형태가 맞지 않을 때 발생합니다. 이를 해결하려면 입력 데이터의 차원과 형태를 재조정해야 합니다.

  • MemoryError: 데이터셋의 크기가 클 경우 메모리 부족 문제가 발생할 수 있습니다. 이 경우, 데이터의 일부를 샘플링하거나, 모델의 복잡도를 낮추는 방법이 있습니다.

참고문서

이와 같이, 거시경제 지표와 산업 트렌드를 기반으로 한 주가 예측 AI 모델 개발 과정은 데이터 수집부터 모델 훈련과 평가까지 다양한 단계를 포함합니다. 각 단계에서 주의할 점과 방법을 명확히 이해하고 실습하면 효과적인 예측 모델을 구축할 수 있습니다.

반응형