[Python] Prophet 활용 02

이소티·2023년 7월 22일

python

목록 보기
31/33

Example <주식 데이터>


  • seasonality는 auto가 디폴트 값으로 필요한 경우에만 추가하는데
  • 만약 True로 설정하면 무조건 계절성 추가하는 것

  • 삼성전자 주식 데이터를 활용해보자 !
    (기간은 2020-01 ~ 2023-07)


import yfinance as yf
from pandas_datareader import data 

yf.pdr_override()

start_date = "2020-01-01"
end_date = "2023-07-31"
SAM = data.get_data_yahoo("005930.KS", start_date, end_date)

SAM.head()




SAM["Close"].plot(figsize=(12, 8), grid=True);




# accuracy 확인을 위한 데이터 
SAM_trunc = SAM[:"2023-07-31"]
SAM_trunc.head()



# forecast를 위한 준비 

df = pd.DataFrame({"ds": SAM_trunc.index, "y":SAM_trunc["Close"]})
df.reset_index(inplace=True)
del df["Date"]
df.head()




m = prophet.Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df);


future = m.make_future_dataframe(periods=90)
forecast = m.predict(future)
forecast[["ds", "yhat", "yhat_lower", "yhat_upper"]].tail()





  • 예측값 시각화

m.plot(forecast);

주가는 크게 상승하거나 하락하지 않고 기존의 추세를 유지할 것으로 예상된다.




  • 예측 구성요소 확인
  • 시계열의 추세, 연간 계절성, 주간 계절성

m.plot_components(forecast);

  • 앞으로 상승세를 보일 전망
  • 화요일에 가장 상한가를 치며 목요일에 상대적으로 하한가이다. (주말은 제외)
  • 1-2월에 가장 높은 주가를 보이며 이후 잠시 하락했다가 6-8월은 약간 회복하는 경향이 있다.
    하지만 이후 10월달에는 크게 주가가 떨어진다.
    (참고로 2020년 1월 1일부터 2023년 7월 31일까지의 데이터를 토대로 10월달까지의 데이터를 예측하였다.)





SAM["Close"]




  • 실제 데이터와 예측값 비교

plt.figure(figsize=(12, 6))
plt.plot(SAM.index, SAM["Close"], label="real")
plt.plot(forecast["ds"], forecast["yhat"], label="forecast")
plt.grid(True)
plt.legend()
plt.show()

실제 데이터는 예측보다 좀 더 높은 수치를 기록함

profile
데이터 관련 학습 일지

0개의 댓글