새소식

Python/Project

Machine learning을 활용한 삼성전자 주식 예측하기 .

  • -

머신러닝에서 여러 가지 패키지와 라이브러리를 사용해서

삼성전자의 주식을 예측하는 코드를 만들어 보겠습니다.

데이터셋은 주식관련 데이터를 가져올 수 있는 Yahoo Finance에서 불러옵니다.

 

 


 

 

from statsmodels.tsa.arima_model import ARIMA    # ARIMA 라는 시계열 패키지를 가져옵니다.

import statsmodels.api as sm  # 데이터를 전처리 후 회귀분석을 적용해 회귀계수를 구할 수 있게 도와주는 패키지.

 

%matplotlib inline

 

#일반적으로 가장 많이 사용하는 패키지를 가져옵니다.

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import yfinance as yf  

from fbprophet import Prophet


가장 먼저 할 일은 필요한 패키지를 import 하는 것입니다.

그다음은 필요한 데이터를 불러옵니다.

 


samsung_df = yf.download('005930.KS',

                      start='2020-01-01',

                      end='2021-10-05',

                      progress=False)

samsung_df

 


 

위와 같이 2020년 1월 1일부터 시작해서, 2021년 10월 5일에 끝나는 삼성전자 주식 데이터를 가져옵니다.

가져온 데이터는 아래와 같은 형태로 존재합니다.

 

 

 

불러온 데이터에서 Close(종가)의 데이터만을 가져와 price라고 지정하고,

간단하게 시각화합니다.

 


samsung_df = samsung_df[["Close"]]

 

samsung_df = samsung_df.reset_index()

 

samsung_df.columns = ['day', 'price']

 

samsung_df['day'] = pd.to_datetime(samsung_df['day'])

 

samsung_df.index = samsung_df['day']

samsung_df.set_index('day', inplace=True)

 

samsung_df

 

fig, ax = plt.subplots(figsize=(15, 8))

samsung_df.plot(ax=ax)


이렇게 가져온 데이터와 시각화한 결과입니다.

 

 

 

이제 이러한 데이터를 첫날부터 430일 동안의 데이터는 train데이터,

그 이후의 5일 동안의 데이터를 test데이터로 구분합니다.

 


samsung_train_df = samsung_df[:430]

samsung_test_df = samsung_df[430:]

samsung_train_df

samsung_test_df


여기까지 필요한 데이터를 가져오는 기본적인 단계이고,

이제 ARIMA을 이용해 시계열 예측을 해 보겠습니다.

ARIMA 모형은 자기 상관 모형(AR)과 이동평균 모형(MA)이 합쳐진 모형으로

일반적으로 가장 선호되는 모델입니다.

 


model = ARIMA(samsung_train_df.price.values, order = (2,1,2))

model_fit = model.fit(trend = 'c', full_output = True, disp = True)

print(model_fit.summary())

fig = model_fit.plot_predict()


 

ARIMA 시계열 모델을 AR=2 , 차분=1, MA=2라고 설정하고 그에 따른 결과와 시각화를 출력한 것입니다.

 

 

 

 

이후 과정은 지금까지의 과정을 통해 얻을 수 있는 예측값, 예측 최저값, 예측 최고값, 실제 가격을 시각화합니다.

 


forecast_data = model_fit.forecast(steps=5) 

 

pred_arima_y = forecast_data[0].tolist()  # 마지막 5일의 예측 데이터 (2021-09-28 ~ 2021-10-05)

test_y = samsung_test_df.price.values    # 실제 5일의 데이터 (2021-09-28 ~ 2021-10-05)

pred_y_lower = []                             # 마지막 5일의 예측 데이터 최소값

pred_y_upper = []                             # 마지막 5일의 예측 데이터 최대값

 

for lower_upper in forecast_data[2]:

    lower = lower_upper[0]

    upper = lower_upper[1]

    pred_y_lower.append(lower)

    pred_y_upper.append(upper)

 

    plt.figure(figsize=(15, 10))

 

plt.plot(pred_arima_y, color = 'gold')  # 모델이 예측한 가격 그래프

plt.plot(pred_y_lower, color = 'red')    # 모델이 예측한 최저 가격 그래프

plt.plot(pred_y_upper, color = 'blue')  # 모델이 예측한 최고 가격 그래프

plt.plot(test_y, color = 'green')          # 실제 가격 그래프

 

#4가지 종류의 데이터를 시각화

plt.legend(['예측값', '최저값','최대값','실제값'])

plt.title("값 비교")

plt.show()


 

 

이렇게 시각화된 자료를 통해 삼성전자 주식 예측 과정을 마무리할 수 있습니다.

데이터를 가져오는 건 쉽고, 전처리과정도 어렵지 않지만 

모델을 설정해서 데이터를 예측하는 과정이 조금 어려운 과정이었습니다.

감사합니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.