본문 바로가기
시계열모델링

Facebook prophet(예언자)을 이용한 주가예측 모델링

by 다빈치스탁 2020. 12. 2.
728x90
반응형

지난번 포스트(2020/09/17 - [데이터마이닝 with R/시계열모델링 with R] - 시계열 분석이란?)에서 언급했던 시계열 모델링의 기초를 요약하면 driving force(추세)의 유무, 계절성의 유무, 인접한 자료들 사이에 상관성의 유무, 일정한 평균과 분산의 조건 등에 대한 검증 및 전처리 과정을 거친 뒤 본격적으로 시계열 분석을 수행하게 되는데 이러한 일련의 과정들을 하나의 함수로 요약해주는 예언자가 등장했다 ㄷㄷㄷ.

 

이름부터 prophet 이다. 예측(forecast)이 아닌 예언이라고 한다. 이름만 들어서는 누가 오만하게 예언이라고 하는가 했다가 개발주체가 페이스북이라는 이야기를 듣고 난 이후에는 음... 이하 생략한다. 주가자료에 대한 데이터만 있다면 특별한 전처리 없이도 함수 몇 개로 예측을 수행할 수 있고 시각화자료도 직관적으로 편리하게는 되어 있는 것 같다. 게다가 크로스 발리데이션 검증도 함께 제공하고 있어서 힘들게 포워드 테스트할 것 없이 예측오차를 미리 점검할 수도 있다. 좀 더 자세한 튜토리얼은 원문문서를 참고하자. Installation | Prophet (facebook.github.io)

 

Installation

Prophet has two implementations: R and Python. Note the slight name difference for the Python package.

facebook.github.io

참고로 R,Python 모두 api를 제공하니 편한 걸로 개발하면 되는데 교차검증을 할 때 gpu를 사용하면 좀 더 빠르게 테스트해볼 수 있을 것 같아 파이썬을 더 권장한다.

 

자 아래는 R 코드를 이용한 간단한 샘플을 돌려봤다. 데이터는 이전글(2020/08/28 - [증권사 API/이베스트] - 이베스트증권 차트TR 만들어보기(VBA 활용 - 주식차트편))을 참고해서 만들었는데 귀찮은 사람은 첨부된 csv 파일을 다운로드 해도 좋다. 예언자의 말대라면 향후 1년내 삼성전자의 주가는 약 85,000원까지 거침없이 상승할 것이라고 해서 교차검증을 돌려보니 보름이내에는 약 7%의 오차, 한달 이내에는 약 12%의 오차까지 발생가능한 것으로 분석된다. 대략 2주 정도까지만 참고하는게 정신건강에 이로울 듯 하다. 한 순간의 선택으로 잘못된 놈을 보유하고 있지만 이러지도 저러지도 못해서 손절매도 못하고 있는 사람이라면 예언자를 통해서 마음의 위안이라도 얻어보는 정도로 사용하는 것은 나쁘지 않을 듯 하다. 예언, 예측, 동역학모델링 등 움직임을 가지는 모든 것은 그것을 설명하는 미분방정식을 가지고 있지만 현재까지 그 어떤 천재도 퍼펙트한 방정식을 찾아내지 못하고 있는 실정이니 혹시 틀리더라도 너무 슬퍼하지 말자. 

 

 

samsung_elect.csv
0.01MB

 

#작업경로를 지정하는 명령어
setwd("")

df<-read.csv("samsung_elect.csv",
                  header=TRUE, na.strings = "")

#--------https://facebook.github.io/prophet/docs/quick_start.html#r-api------------
#install.packages("prophet")
library(prophet)
m <- prophet(df)

future <- make_future_dataframe(m, periods = 365)
tail(future)

forecast <- predict(m, future)
tail(forecast[c('ds', 'yhat', 'yhat_lower', 'yhat_upper')])

plot(m, forecast)

prophet_plot_components(m, forecast)

#-----------------교차검증-------------------
cross1<-cross_validation(m,30,"days",initial = 365)
plot_cross_validation_metric(cross1,"mape")

#-----------------검증.-------------------
#ME : 예측오차의 산술평균
#RMSE : ME의 제곱의 평균
#MAE : 예측오차의 절대값의 평균
#MPE : 예측오차의 상대적인 크기를 반영(비율)한 평균
#MAPE : 예측오차의 절대값의 상대적 크기를 반영한 평균 
#MASE : 예측오차의 절대값에 대한 평균으로 크기를 나타내는 지표
test_val<-performance_metrics(cross1)

test_val$mape

 

prophet 으로 예측한 향후 1년간 삼성전자 주가흐름
prophet을 이용하여 추세와 계절성을 예측한 그래프

 

매일 업데이트 되는 경제분석 자료가 궁금하다면 무료채널 입장!

https://t.me/Leenaissance

 

Lee네상스 테크놀로지

비영리(무료) 경제분석채널

t.me

 

728x90
반응형

댓글