Prophet으로 시계열 예측을 쉽게

1. 소개



최근 쉽게 시계열 예측을 하기 위해 Prophet을 사용해 보았다.
모처럼이므로 도입에서 움직이는 곳까지를 공유하려고 기사로했습니다.
  • 동작환경
  • OS : Windows10
  • Python : 3.8.3//Miniconda 4.9.1
  • Visual Studio Community : 2019


  • 2.Prophet은 무엇입니까?



    Prophet은 facebook사가 OSS(MIT 라이센스)로서 공개하고 있는 시계열 예측 패키지.
    미세한 이론에 관해서는 여기서 언급하지 않지만, 일반화 가법 모델을 이용하여 예측이 행해지고 있다.

    공식 페이지
    github

    3. 검증을 위해 가상 환경을 만들고 가상 환경으로 전환


    #prophet_envという仮想環境をpython3.7系で作成(3.8系だとfbprophet 0.6に非対応)
    conda create -n prophet_env python=3.7
    
    #base環境から作成したprophet_env仮想環境に切り替える
    conda activate prophet_env
    

    4.도입~동작 확인



    우선, Visual Stuido Community를 설치해 둔다.
    ※C++ Compiler가 필요하다
    Visual Studio Code 사이트

    그 위에 다음 라이브러리를 도입한다.
    #ProphetはPyStanに依存している為に導入
    conda install plotly -y
    
    #fbprophetを導入(2020/11/1時点のバージョンは0.7.1だったがエラーが出たので0.6)
    conda install -c conda-forge fbprophet==0.6
    
    #環境がminicondaなので・・(numpyやpandasは↑でたまたま一緒に導入されたので個別には入れなかった)
    conda install matplotlib
    

    아래 명령으로 오류가 발생하지 않으면 도입 성공
    from fbprophet import Prophet
    

    5. 실제로 사용해 본다



    이번에는 샘플 데이터 세트로 간단한 "AirPassengers"라는 데이터 세트를 사용합니다.
    Month 컬럼에 시계열 부분, Passengers 컬럼에 비행기 승객 수의 추이가 들어 있다.
    데이터 세트 링크


    Month
    #Passengers


    1949/1/1
    112

    1949/2/1
    118

    1949/3/1
    132


    5-1:파일 로드까지


    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
    from fbprophet import Prophet
    
    #AirPassengersのcsvを読み取る
    df = pd.read_csv('AirPassengers.csv')
    

    5-2:Prophet 학습


    #Prophetではカラム名をdsとyに変更する必要があるので変更する
    df.columns = ['ds', 'y']
    
    #今回はProphetにデータフレーム後ろから10番目までを学習(fit)させる
    m = Prophet()
    m.fit(df[:-10])
    

    5-3:Prophet에서 예측


    '''
    periods=10:10マス分予測させる
    freq='M':単位は「Month」
     →つまり10か月分予測させるという意味
    '''
    future = m.make_future_dataframe(periods=10, freq='M')
    
    forecast = m.predict(future)
    
    #forecastの結果を図示する
    fig = m.plot(forecast)
    

    ↓와 같이 표시될 것.
    ※검은 점은 학습 데이터


    6. 마지막으로



    어땠어?
    프로그램 자체는 간단하게 동작하기 때문에, 오히려 도입 쪽이 손질할지도 모른다.
    버전이 다르거나 하면 어딘가에서 오류가 될지도 모르고, 실제로 나도 처음에는 거기서 망설였다.
    (PyStan, libpython 등은 fbprophet==0.6에서 함께 도입되었으므로 결국 개별적으로 도입하지 않았다)
    간단하기 때문에 꼭 시험해 보길 바란다.

    좋은 웹페이지 즐겨찾기