본문 바로가기
  • 데이터(DATA) 속으로 다이빙
데이터 분석 기초

머신러닝을 이용한 주가 예측(Stock Price Prediction)

by Data Dive 2025. 3. 9.

 

주식 시장은 수많은 요소에 의해 영향을 받으며 예측이 어렵다.

하지만 머신러닝을 활용하면 과거 데이터를 분석하여

주가 변동 패턴을 학습하고, 미래 가격을 예측할 수 있다.

 

이번 실습에서는 Yahoo Finance API를 이용해 

주가 데이터를 가져오고, 머신러닝 모델을 사용하여 주가를 예측해 본다.

 

1. 주가 데이터 수집 (Yahoo Finance API 활용)

Python에서 yfinance 라이브러리를 사용하여 실시간 주가 데이터를 가져올 수 있다.

import yfinance as yf
# 삼성전자 주가 데이터 가져오기
stock=yf.Ticker('005930.KQ')
df=stock.history(period='5y')
print(df.head())

 

2. 데이터 전처리

데이터 결측치를 확인하고 처리할 것이다.

# 결측치 확인
print(df.isnull().sum())
# 결측치가 있으면 제거
df=df.dropna()

 

주가 변동 시각화

import matplotilb.pyplot as plt
plt.figure(figsize=(12,6)
plt.plot(df['Close'], label='Close Price')
plt.title('Samsung Stock Price (5 years)')
plt.xlabel('Date')
plt.ylabel('Stock Price')
plt.legend()
plt.show()

 

3. 머신러닝을 활용한 주가 예측 모델

이제 머신러닝 모델을 활용해 주가를 예측해 볼 것이다. 

랜덤  포레스트(Random Forest)를 사용할 것이고

최근 60일 데이터를 이용하여 다음날 주가를 예측할 것이다.

 

데이터셋 생성(특성 엔지니어링)

import numpy as np
# 60일 이전 데이터를 활용하여 주가를 예측
window_size=60
X=[ ]
Y=[ ]
for i in range(window_size, len(df)): X.append(df['Close'].values[i-window_size:i]) Y.append(df['Close'].values[i])
X,Y=np.array(X), np.array(Y)

 

4. 랜덤 포레스트 모델 학습 및 예측

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
# 데이터 분할
X_train, X_test, Y_train, Y_test=train_test_split(X,Y, test_size=0.2, random_state=42)
# 랜덤 포레스트 회귀모델 학습
model=RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, Y_train)
# 예측 수행
Y_pred=model.predict(X_test)
# 모델 평가
mae=mean_absolute_error(Y_test, Y_pred)
print(f'평균 절대 오차(MAE): {mae:.2f}')

 

5. 예측 결과 시각화

plt.figure(figsize=(12,6))
plt.plot(y_test, label='Actual Price')
plt.plot(y_pred, label='Predicted Price')
plt.title('Stock Price Prediction')
plt.xlable('days')
plt.ylabel('Price')
plt.legend()
plt.show()

 

머신러닝을 이용하면 과거 데이터를 기반으로 주가 변동 패턴을 학습할 수 있으나,

주가는 다양한 외부 변수(경제, 정책, 투자 심리 등)에 의해 영향을 받는다.

단순한 모델로 완벽한 예측은 어렵지만,

기본적인 트렌드 분석 및 예측이 가능하다.