AI
2024/12/23
古川 直輝

時系列モデルProphetを徹底解説

本記事で紹介するのは、Facebookが開発した時系列予測ライブラリ「Prophet」です。このツールは、直感的でシンプルな操作でありながら、強力な機能を備えており、初心者から経験者まで幅広く活用されています。

はじめに

本記事で紹介するのは、Facebookが開発した時系列予測ライブラリ「Prophet」です。このツールは、直感的でシンプルな操作でありながら、強力な機能を備えており、初心者から経験者まで幅広く活用されています。ペイトン・マニングのWikipediaページの毎日のビュー数データを用いて、Prophetを実際に使用する方法を解説します。

Prophetとは

Prophet は、非線形傾向を年、週、日ごとの季節性、および休日の影響と適合させる加法モデルに基づいて時系列データを予測する手順です。季節の影響が強い時系列や、複数の季節にわたる履歴データで最も効果的に機能します。Prophet は、データの欠落や傾向の変化に対して堅牢であり、通常は外れ値を適切に処理します。


Prophetには以下のメリットがあります。


正確かつ高速


ほとんどの場合、他のどのアプローチよりも優れたパフォーマンスを発揮することがわかっています。Stan でモデルを適合させると、わずか数秒で予測が得られます。


完全自動


手作業なしで、乱雑なデータから合理的な予測を得ることができます。Prophet は、外れ値、欠落データ、時系列の劇的な変化に対して堅牢です。


調整可能な予測


Prophet プロシージャには、ユーザーが予測を微調整および調整するための多くの機能が含まれています。人間が解釈できるパラメータを使用して、ドメイン知識を追加することで予測を改善できます。

他の時系列モデルとの比較

ProphetとARIMA/SARIMAを比較します。


Prophet



  • モデリングアプローチ:


    • トレンド、季節性、休日効果を分解して予測。

    • 非定常データや欠損値をそのまま扱いやすい。



  • 特長:


    • 自動的に複数の季節性(例:年次、週次)や休日の影響を考慮可能。

    • 非線形なトレンドにも対応可能。

    • 実装が簡単で、初期設定でも良好な結果を得やすい。



  • 適用場面:


    • 長期予測や複雑な季節性を含むデータ。

    • トレンドが変化しやすいデータ。

    • 休日やイベントの影響を含む予測。




ARIMA/SARIMA



  • モデリングアプローチ:


    • 過去のデータや誤差に基づく統計モデル。

    • データの定常化(差分を取るなど)が必要。



  • 特長:


    • 定常データに対して非常に高い精度。

    • パラメータ(p, d, q, P, D, Q, s)の調整でカスタマイズ可能。

    • 短期予測に優れている。



  • 適用場面:


    • 安定したトレンドと周期性を持つデータ。

    • 短期予測や統計的分析に基づくアプローチ。

    • 季節性が単純で規則的な場合。




モデルを選択する際のポイント



  • Prophet:


    • 簡単かつ直感的な実装が必要な場合。

    • トレンドや季節性が明確なデータに適している。



  • ARIMA/SARIMA:


    • 定常性が確保されたデータで精密な予測を行いたい場合。

    • 短期的な傾向を重視する場合。



実装

まず、Prophetとpandasをインポートします。



from prophet import Prophet
import pandas as pd


今回は、ペイトン・マニングの Wikipedia ページの毎日のページビューのログの時系列データを使用していきます。



df = pd.read_csv('https://raw.githubusercontent.com/facebook/prophet/main/examples/example_wp_log_peyton_manning.csv')
df



Prophetの入力するカラム名は常にds(日付)とy(目的変数)である必要があります。


新しいオブジェクトをインスタンス化してモデルを適合させます。



model = Prophet()model.fit(df)


make_future_dataframeで指定した日数までの値を予測することができます。


(以下のコードでは、365日分)



future = model.make_future_dataframe(periods=365)
forecast = model.predict(future)


結果を見てみましょう



model.plot(forecast)



しっかり予測を行うことができています。


予測の構成要素を確認したい場合は、plot_componentsメソッドを使用しましょう。



model.plot_components(forecast)



上から順に「時系列の傾向」、「週ごとの季節性」、「年間の季節性」を表しています。

おわりに

Prophetを使った時系列データの分析は、複雑な統計モデルを知らなくても簡単に実現できる強力なツールです。今回のブログでは、ペイトン・マニングのWikipediaページのビュー数データを例に、Prophetを使用してトレンドや季節性の分析、将来予測を行う方法を紹介しました。


Prophetの魅力は、そのシンプルさと柔軟性にあります。短時間での初期設定から、高度なカスタマイズによる詳細なモデリングまで対応できるため、初心者でもプロフェッショナルでも使いこなすことが可能です。また、休日効果や特定のイベントの影響を簡単に組み込むことができる点も、大きな強みです。

New call-to-action