2024-05-11

Prophet を使ってみた

Prophet は、R および Python 用に実装した時系列データの予測手法で、非線形のトレンドに年間、週間、日次の季節性、さらに休日効果をフィッティングする加法モデルに基づいています。強い季節効果と数シーズンの過去データを持つ時系列データの解析に最適です。Prophet は欠損値やトレンドのシフトに対してロバストで、一般的に外れ値に対してもうまく対処できます。

Prophet は Facebook の Core Data Science チームによってリリースされたオープンソースのソフトウェアです。CRANPyPI からダウンロード可能です。

Prophet のプロジェクトサイトより引用、翻訳・編集

最近、思っているような時系列解析ができずに苦しんでいます。あれこれ試している中で、Python の statsmodels パッケージの Unobserved components models [1] を試した結果を本ブログでまとめましたが [2]、今回は Prophet を試してみました。

下記の OS 環境で動作確認をしています。

Fedora Workstation 40 x86_64
Python 3.12.2
jupyterlab 4.1.8
matplotlib 3.8.4
pandas 2.2.2
prophet 1.1.5
statsmodels 0.14.2

statsmodels パッケージは、今回はデータセットを利用するためだけに必要になります。

今回の解析は JupyterLab を使用しています。

必要なライブラリーの読み込み

最初に、必要なライブラリーを読み込んでおきます。

import matplotlib.pyplot as plt
import pandas as pd
from prophet import Prophet
 
import statsmodels.datasets.co2 as co2

データセット

今回も過去記事 [2] と同じ、statsmodels に用意されている CO2 濃度のデータセットを利用します。

co2_raw = co2.load().data
co2_raw

 

Prophet へ入力するには、ds(datestamp = 時刻情報)カラムと y カラムにデータフレームを整形する必要があります。y は予測したい測定値です。今回は次のようにしました。

df = co2_raw.reset_index()
df.columns=['ds', 'y']
df

 

過去記事 [2] では、欠損値の少ない期間を選んで、月平均を算出して、そのデータを使用しましたが、今回は欠損値を気にせず、すべてのデータを使います。

モデルの作成と学習

モデルを作成して、用意したデータフレームで学習します。

model = Prophet()
model.fit(df)

予測

過去記事 [2] と同じ期間の予測をしてみます。モデルの make_future_dataframe メソッドで期間(日)を指定して予測用のデータフレームを作成します。

future = model.make_future_dataframe(periods=365 * 4 + 3)
future.tail()

 

モデルの predict メソッドで予測します。

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

 

予測結果をプロットします。

fig1 = model.plot(forecast)
# plt.savefig('trend_analysis_11/fig-001.png')

 

plot_components メソッドで成分を確認できます。

fig2 = model.plot_components(forecast)
# plt.savefig('trend_analysis_11/fig-002.png')

 

今回の解析では、トレンド成分と月別の成分がプロットされましたが、Prophet ではカレンダー情報を持っているようで、もし曜日依存するようであれば、曜日毎のプロットも表示されます。

まとめ

Prophet の基本的な使い方は scikit-learn のモデルと同じで、個人的には使いやすいと感じました。なにより欠損値に強く、周期変動を指定しなくとも解析してくれるのが嬉しいです。ただ、まだ全然使い込んでいません。まずは具体的なデータ解析を通じて使いこなせるようにしたいです。

参考サイト

  1. statsmodels.tsa.statespace.structural.UnobservedComponents - statsmodels
  2. bitWalk's: 【備忘録】Unobserved components モデル [2024-05-06]
  3. Prophet | Forecasting at scale.
  4. Prophetを使ってサクッと時系列データ予測をやる #Python - Qiita [2023-04-08]
  5. 将来予測で用いられるライブラリ「Prophet」 | スキルアップAI Journal [2023-06-13]
  6. Prophetによる時系列データ予測: Analyst-in-the-Loop [2024-01-04]
  7. 【Python 入門】Prophet を使った時系列データ分析と Plotly による可視化! | キカガクブログ [2024-04-15]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

0 件のコメント: