ひとことで言うと#
Prophet予測モデルは、トレンド・季節性・イベント効果の3要素を加法モデルで分解し、ビジネスデータの将来値を予測する時系列分析フレームワークです。
用語の定義#
押さえておきたい用語
- トレンド成分(Trend Component):データの長期的な増加・減少傾向を表す関数。線形またはロジスティック成長で表現される
- 季節性成分(Seasonality Component):週次・年次など周期的な変動パターン。フーリエ級数で近似して捉える
- チェンジポイント(Changepoint):トレンドの傾きが大きく変化した時点。Prophetが自動検出し、柔軟な予測を可能にする要素
- イベント効果(Holiday Effect):祝日・セール・キャンペーンなど、不定期だが予測可能な変動要因
- 不確実性区間(Uncertainty Interval):予測値の信頼幅。将来のチェンジポイントやノイズを考慮して算出する
全体像#
過去データ収集
日次データ・イベント日
→日次データ・イベント日
モデルフィッティング
トレンド+季節性+イベント
→トレンド+季節性+イベント
チェンジポイント検出
傾き変化の自動特定
→傾き変化の自動特定
予測生成
将来値+信頼区間出力
将来値+信頼区間出力
こんな悩みに効く#
- 来月以降の売上見込みをエクセルの延長線で出しているが、季節変動やセール効果を織り込めない
- ARIMAなどの時系列手法を試したが、パラメータ調整に時間がかかり実務で運用が回らない
- 予測値だけでなく「上振れ・下振れ幅」も含めた計画を立てたいが、不確実性の定量化が難しい
基本の使い方#
データを準備する
日付列(ds)と実績値列(y)の2列構成でCSVを用意します。欠損日がある場合は行を飛ばしても問題ありません。最低でも1年分のデータがあると季節性の学習精度が上がります。
イベント情報を定義する
祝日やセール開始日など、通常の周期から外れる日をイベントとして登録します。前後の影響日数(lower_window / upper_window)も指定し、セール前日の買い控え効果などを捉えます。
モデルをフィットさせる
Prophetオブジェクトを生成し、トレンドの柔軟性(changepoint_prior_scale)と季節性の強さ(seasonality_prior_scale)を調整します。デフォルト値で十分な精度が出ることも多いため、まず初期値で実行します。
予測と診断を行う
futureデータフレームを作成して予測を実行し、成分分解プロット(plot_components)でトレンド・季節性を可視化します。不確実性区間の幅が実務判断に適切かを確認し、必要に応じてパラメータを再調整します。
具体例#
EC企業の月次売上予測
アパレルECサイトが過去3年分の日次売上データ(約1,100日分)をProphetに投入。年末セール(12月)と夏セール(7月)をイベントとして登録した。モデルは年次季節性で12月に平月比+62%、7月に**+38%のスパイクを学習。翌四半期の売上予測精度(MAPE)が、移動平均法の18.4%から7.2%に改善した。仕入れ計画の精度が上がり、シーズン終了後の在庫残が前年比で23%削減**された。
SaaS企業のサポート問い合わせ予測
月間アクティブユーザー12万人のSaaS企業が、日次の問い合わせ件数をProphetで予測。月曜日に件数が平均1.4倍になる週次季節性と、月末に請求関連の問い合わせが集中する月次パターンを検出。チェンジポイントとして、料金改定を実施した時点でトレンドの傾きが日次+8件から**+15件に変化していることも判明した。この予測を基にシフト配置を最適化し、平均応答時間が4.2時間から2.8時間**に短縮された。
食品スーパーの来客数予測
地方のスーパーマーケットチェーン(15店舗)が、各店舗の日次来客数をProphetで予測。土日の来客数は平日の1.7倍、特売チラシ配布日は通常土日のさらに1.3倍になるパターンをモデルが捉えた。年次成分では、お盆と年末年始にピークが立ち、2月に底を打つ波形を学習。予測を基にパート・アルバイトのシフト枠を動的に設定した結果、人件費の過不足が月あたり約120万円改善し、レジ待ち時間も平均3.5分から2.1分へ短縮された。
やりがちな失敗パターン#
| 失敗 | 原因 | 対策 |
|---|---|---|
| 予測精度が突然悪化する | 外部環境の構造変化(コロナ禍など)をモデルが学習していない | チェンジポイントを手動追加するか、構造変化以降のデータのみで再学習する |
| 季節パターンが過学習になる | データ量が少ない状態でフーリエ次数を上げすぎている | seasonality_prior_scaleを小さくし、フーリエ次数もデフォルト(年次10、週次3)から始める |
| イベント効果が反映されない | イベント日の定義が不正確、またはlower/upper_windowの設定漏れ | 過去の実績を確認し、イベント前後の影響日数を実データから推定して設定する |
| 不確実性区間が広すぎて使えない | チェンジポイントの数や柔軟性が高すぎる | changepoint_prior_scaleを0.05程度に下げ、n_changepointsも25→15に減らして安定性を優先する |
まとめ#
Prophetの強みは、統計の深い知識がなくてもトレンド・季節性・イベントの3成分に分解して予測できるところにあります。まずはデフォルト設定で動かし、成分分解プロットを見ながら「このパターンはビジネス実態と合っているか」を確認するのが最も効率的な始め方です。パラメータ調整は精度が不足したときだけ行い、changepoint_prior_scaleとseasonality_prior_scaleの2つから手を付けるのが実務的でしょう。