Help us understand the problem. What is going on with this article?

Prophetを使って時系列解析してみた

More than 1 year has passed since last update.

Prophetとは

  • Facebookが開発したオープンソースの時系列解析パッケージ
  • PythonとRのいずれでも利用可能
  • 「トレンド」「季節効果」「イベント」の3つで時系列を解析

開発環境

  • 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()

prophet001.png

モデルを構築してプロットしよう

 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()

prophet002.png

 2031年8月末までの予測になりますね。
 では、データの予測を行いたいと思います。

forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

prophet003.png

 空の部分に予測データが入ってきました。
 それでは、このデータをプロットしてみましょう。

m.plot(forecast)

prophet004.png

 今後の人口は微増のようですね。
 ただ先に進めば$y_{lower}$のように減少傾向につながることが見られます。他の説明変数も関わってきそうなので、VARなどの多変量時系列解析で評価する必要がありそうです。

 今回はここまで。

Fortran
ネットワーク中心のインフラエンジニア。Cisco、Juniper、Brocadeと戯れながら、趣味でPythonやRでデータ分析をしてみたり、Perlでツールを開発してみたり、サーバサイドエンジニアリングにも興味を広げています。初学者ですが、よろしくお願いします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした