Prophet에서 인스턴트 기계 학습

소개



이 기사는 MicroAd Advent Calendar 2017의 23일째 기사입니다.

현재 마이크로 애드에서 내정자로 아르바이트를하고 있습니다.
최근 Prophet을 알았으므로, 그에 대해 조금만 써 드리겠습니다.

Prophet이란?



슈퍼 간단하게 쓸 수 있는 시계열 데이터 전용의 페이스북이 만든 기계 학습 라이브러리입니다.
현시점에서는 python과 R에 대응하고 있는 것 같습니다.
이번에는 파이썬으로 버전 fbprophet==0.2.1을 사용해 보겠습니다.

이번 시도해 볼 데이터



최근 난고하의 격렬한 BTC를 주제로 향후 1년간 어떤 가치 움직임을 할지 적당히 예측합니다.
이번에는 다음 사이트에서 데이터를 얻었습니다. CSV로 저장할 수 있기 때문에 pandas 등에서 사용하기 편리합니다.
"日付け","終値","始値","高値","安値","前日比%"
"2017年12月23日","1,709,670","1,593,787","1,839,993","1,278,313","7.27"
"2017年12月22日","1,593,787","1,830,241","1,993,563","1,260,284","-12.92"
"2017年12月21日","1,830,241","1,875,889","2,105,416","1,768,900","-2.43"
...
"2014-09-19","43,370","45,779","52,882","41,302","-5.26"
"2014-09-18","45,779","48,559","52,882","45,020","-5.73"
"2014-09-17","48,559","49,299","50,653","47,561","-1.50"

지난 2~3년분 정도의 BTC/JPY 데이터를 입수할 수 있습니다.

Prophet을 이용할 때는 date나 datetime의 컬럼명을 ds로 하고, 분석 대상의 수치를 y로 하지 않으면 안됩니다.
그래서 이번에는 「yyyy년 mm월 dd일」을 「yyyy-mm-dd」로 변환, 종가를 수치로 변환해 각각 컬럼명을 dsy로 합니다.
ds,y
2014-09-17,48559
2014-09-18,45779
2014-09-19,43370
...
2017-12-21,1830241
2017-12-22,1593787
2017-12-23,1709670

프로그램



필요한 라이브러리는 pandas와 fbprophet뿐입니다.
pip3 install pandas
pip3 install fbprophet

그리고 코드는 이것뿐입니다!
import pandas as pd
from fbprophet import Prophet

data = pd.read_csv("BTC_JPY.csv")
model = Prophet()
model.fit(data)
future = model.make_future_dataframe(periods=365)
forecast = model.predict(future)
model.plot(forecast)
model.plot_components(forecast)

세세하고 번거로운 것은 전부 Prophet가 해 줍니다만,
어느 정도의 파라미터를 설정할 수도 있습니다.
예: model = Prophet(growth='logistic')다음은 설정할 수 있는 파라미터와 그 초기값입니다.
growth='linear', 
changepoints=None, 
n_changepoints=25, 
yearly_seasonality='auto', 
weekly_seasonality='auto', 
daily_seasonality='auto', 
holidays=None, 
seasonality_prior_scale=10.0,
holidays_prior_scale=10.0, 
changepoint_prior_scale=0.05, 
mcmc_samples=0, 
interval_width=0.80, 
uncertainty_samples=1000

실행 결과






-고찰-

앞으로도 올라갈 것 (적당)

요약



통계나 수학이나 프로그래밍을 전혀 할 수 없는 나라도, 어쩐지 그럴듯한 결과를 출력한 척을 할 수 있었습니다.
사용해 보았던 장점은 다음 3가지입니다.

· 세세한 설정없이 우선 실행할 수 있습니다.
· 학습이 빠르다.
· 결과 그래프의 출력도 간단

비교적 간단하다고 하는 scikit-learn이나 Keras에서도, 이번과 같은 것을 하려고 하면 나름대로 지식이 필요합니다.
물론, 이러한 라이브러리는 시계열 데이터에 한하지 않고 학습할 수 있어 모델의 설계나 튜닝을 할 수 있는 유연성이 있습니다.
Prophet은 우선 일단 바삭바삭하게 예측해 보는 것 같은 사용법을 할 수 있는 것이 매우 매력적입니다.

P.S.



VisualStudioCode에 확장 "Jupyter"를 넣으면 Python의 개발 환경으로 매우 훌륭하게되었습니다.

좋은 웹페이지 즐겨찾기