Prophet을 사용하여 시계열 분석해 보았습니다.

Prophet이란?


  • Facebook이 개발 한 오픈 소스 시계열 분석 패키지
  • Python과 R 모두 사용할 수 있습니다
  • "추세", "계절 효과", "이벤트"의 세 가지 시계열 분석

  • 개발 환경


  • CentOS 7.2
  • Jupyter 4.3.0
  • Python 3.6.3::Anaconda, Inc.

  • 라이브러리를 설치합시다.



    먼저 라이브러리를 설치합니다.
    scopy나 pandas등의 다른 라이브러리에 대해서는, Anaconda 설치시에 들어 있기 때문에 생략합니다.
    pip install pystan
    pip install fbprophet
    

    데이터 로드



    이번은 정평의 데이터 세트를 준비하지 않고, 총무성이 공개하고 있는 총 인구수를 1921~2015년분을 준비해, csv 형식으로 성형해 향후의 인구 변동을 예측해 보았습니다.
    dateparse = lambda dates: pd.datetime.strptime(dates, '%Y-%m')
    df=pd.read_csv("total_population.csv",names=("ds","y"),date_parser=dateparse)
    df.tail()
    



    모델을 구축하고 플롯합시다.



    csv 파일을 읽을 수 있음을 상기에서 확인할 수 있었습니다.
    그럼, 여기서부터가 본제. 모델을 준비하고 준비한 데이터에 맞도록 맞춥니다. 여기서, 1년에 1개의 데이터이며 데이터수도 적기 때문에 계절 효과는 고려하지 않도록 False로 했습니다.
    from fbprophet import Prophet
    m = Prophet(yearly_seasonality=False)
    m.fit(df)
    

     에서는 2015년 1월부터 200개월 앞의 인구 변동을 예측하고 싶습니다.
    우선은 날짜만의 빈 데이터를 준비합니다.
    future = m.make_future_dataframe(periods=200,freq='m')
    future.tail()
    



    2031년 8월말까지의 예측이 되네요.
     에서는, 데이터의 예측을 실시하고 싶습니다.
    forecast = m.predict(future)
    forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
    



    빈 부분에 예측 데이터가 들어왔습니다.
    그럼, 이 데이터를 플롯 해 봅시다.
    m.plot(forecast)
    



    향후의 인구는 미증인 것 같네요.
    단지 앞으로 나아가면 $y_{lower}$와 같이 감소 경향으로 이어지는 것을 볼 수 있습니다. 다른 설명 변수도 관련되어 있을 것 같기 때문에, VAR등의 다변량 시계열 해석으로 평가할 필요가 있을 것 같습니다.

    이번은 여기까지.

    좋은 웹페이지 즐겨찾기