신 러닝 기술의 발전으로 시장 데이터의 숨겨진 패턴을 파악하고 미래의 주가를 예측할 수 있는 가능성이 커지고 있습니다. 이번 포스팅에서는 Python을 사용하여 삼성전자 주가를 예측하는 LSTM(Long Short-Term Memory) 신경망 모델을 구축하는 과정을 공유하고자 합니다.
데이터 수집
주가 예측 모델을 개발하기 위해 먼저 과거 주가 데이터가 필요합니다. FinanceDataReader는 주식, 환율 등 다양한 금융 데이터를 쉽게 가져올 수 있는 파이썬 라이브러리입니다. 아래 코드를 통해 삼성전자의 주가 데이터를 2003년부터 현재까지 수집할 수 있습니다.
import FinanceDataReader as fdr
# 삼성전자 주식 코드: 005930
df = fdr.DataReader('005930', '2003-01-01')
데이터 전처리
신경망 모델을 훈련시키기 전에 데이터를 적절히 전처리하는 단계가 필요합니다. 주가 데이터를 정규화하여 모델 입력으로 사용할 수 있도록 합니다. 이때, MinMaxScaler를 사용하여 주가 값을 0과 1 사이로 스케일링합니다.
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(df['Close'].values.reshape(-1,1))
모델 구축 및 훈련
LSTM 모델은 시계열 데이터에 효과적인 심층 학습 모델 중 하나입니다. TensorFlow와 Keras를 활용하여 모델을 구축하고 훈련시킵니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
model = Sequential([
LSTM(50, return_sequences=True, input_shape=(X_train.shape[1], 1)),
LSTM(50),
Dense(1)
])
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(X_train, y_train, epochs=100, batch_size=64)
예측 및 결과 시각화
모델을 훈련한 후, 실제 데이터와 예측된 주가를 시각적으로 비교하여 모델의 성능을 평가합니다. 또한, 2024년 5월 1일까지의 주가를 예측하여 향후 주가 동향에 대한 인사이트를 제공합니다.
predicted_prices = model.predict(X_test)
predicted_prices = scaler.inverse_transform(predicted_prices)
import matplotlib.pyplot as plt
plt.figure(figsize=(12,6))
plt.plot(df['Close'].values, label='Actual Price')
plt.plot(np.arange(len(y_train), len(y_train) + len(predicted_prices)), predicted_prices, label='Predicted Price')
plt.legend()
plt.show()
LSTM 신경망을 이용한 주가 예측 모델은 과거 데이터에서 학습한 패턴을 바탕으로 미래의 주가 변동을 예상하는 데 유용합니다. 이 모델은 투자 결정을 지원하기 위한 도구로 활용될 수 있으며, 금융 시장의 불확실성을 다소 줄이는 데 기여할 수 있습니다.
'IT > 금융' 카테고리의 다른 글
[주가] 하이브와 검색 트렌드 (0) | 2024.04.29 |
---|---|
삼성전자 주가 예측: LSTM 신경망을 활용한 접근 (확장판) (1) | 2024.04.26 |
KOSPI 상위 50개 주식과 삼성전자의 상관관계 분석 (0) | 2024.04.25 |
글로벌 금융 지수의 동향과 상관 관계 분석 (0) | 2024.04.25 |
Python을 이용한 주식 수익률 분석 및 시각화 (0) | 2024.04.22 |