algo-forecast-prophet について
Prophetでビジネス時系列を予測するスキルです。季節性や祝日パターンを持つ日次・週次指標を対象とし、データ準備、モデル適合、検証、要素別の予測を扱います。
主な機能
- 01トレンド・季節性・祝日のモデル化
- 02線形またはロジスティック成長の選択
- 03欠損データと外れ値への対応
- 04ローリング方式の交差検証
- 05予測要素の分解表示
活用シーン
- 01祝日効果を含む日次売上の予測
- 02季節性のある週次トラフィックの推定
- 03MAPEとRMSEによる予測の検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ asgard-ai-platform/ skills --skill algo-forecast-prophetインストール後、Claude Code で/algo-forecast-prophetを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/sample_scenario.mdreferences/prophet-cv.mdprophet-tuning.md詳細
Prophet による予測
概要
Prophet(Meta)は、時系列をトレンド+季節性+祝日+誤差に分解します。Stan で適合させる加法モデル(または乗法モデル)を使用します。欠損データ、外れ値、祝日の影響を標準で処理します。日次/週次の粒度のビジネス時系列向けに設計されています。
使用する場面
適用条件:
- 日次/週次の頻度でビジネス指標(売上、トラフィック、エンゲージメント)を予測する場合
- 季節性のパターンが強く、既知の祝日の影響があるデータ
- 時系列に関する深い専門知識がなくても、迅速に妥当な予測が必要な場合
使用しない場面:
- 高頻度データ(1時間未満)の場合 — Prophet は日次以上のデータ向けに設計されています
- 因果関係や説明を目的とするモデルが必要な場合(Prophet は記述的モデルです)
- 時系列が非常に短い場合(季節周期が 2 回未満)
アルゴリズム
IRON LAW: Prophet Is an Additive Regression Model, NOT Classical Time Series
y(t) = g(t) + s(t) + h(t) + ε(t)
- g(t): piecewise linear or logistic trend with automatic changepoints
- s(t): Fourier series for yearly/weekly/daily seasonality
- h(t): user-specified holiday effects
Prophet does NOT model autocorrelation in residuals. If residuals are
autocorrelated, the uncertainty intervals will be too narrow.
フェーズ 1:入力の検証
列 ds(日付スタンプ)と y(指標)を含む DataFrame を準備します。利用可能な場合は、回帰変数の列を追加します。国の祝日、カスタム祝日、成長タイプを指定します。 ゲート: データが適切にフォーマットされ、季節周期が最低 2 回分あること。
フェーズ 2:コアアルゴリズム
- 成長モデルを選択します:'linear'(デフォルト)または 'logistic'(上限と下限を指定)
- 季節性を設定します:年次(デフォルト)、週次(デフォルト)、カスタム(例:月次)
- 祝日を追加します:国の組み込み祝日+カスタムイベント(プロモーション、ローンチ)
- モデルを適合させます:
m = Prophet(); m.fit(df) - 未来の DataFrame を生成して予測します:
m.predict(future)
フェーズ 3:検証
確認項目:予測の各要素(トレンド、季節性、祝日)が直感に合っていること。ローリングウィンドウを用いて、Prophet 組み込みの cross_validation() で交差検証します。MAPE、RMSE を評価します。
ゲート: MAPE が用途に照らして許容範囲内であり、各要素を目視で確認して問題がないこと。
フェーズ 4:出力
各要素に分解された予測を返します。
出力形式
{
"forecasts": [{"ds": "2025-04-15", "yhat": 1200, "yhat_lower": 1050, "yhat_upper": 1350}],
"components": {"trend": "upward_3pct", "yearly_seasonality": "peak_in_december", "weekly_seasonality": "low_on_weekends"},
"metadata": {"mape": 0.08, "training_days": 730, "forecast_days": 90}
}
例
入出力サンプル
入力: クリスマスの急増と夏季の落ち込みがある、2 年分の日次ウェブサイトトラフィック 期待される結果: 上昇トレンド、週次パターン(平日 > 週末)、年次パターン(クリスマスの急増、夏季の落ち込み)を捉えた予測。
エッジケース
| 入力 | 期待される結果 | 理由 |
|---|---|---|
| 欠損日が多い | Prophet が標準で処理 | ARIMA と異なり、補完が不要 |
| 急なトレンド変化 | 変化点を自動検出 | ARIMA に対する Prophet の主な特長 |
| 乗法的な季節性 | seasonality_mode='multiplicative' を設定 | 季節変動の振幅がトレンドとともに大きくなる場合 |
注意点
- デフォルトの変化点感度:Prophet はトレンドの変化を過剰または過少に検出する場合があります。
changepoint_prior_scale(デフォルトは 0.05)を調整します。値を大きくすると柔軟性が高まり、小さくすると滑らかになります。 - 平坦な予測:トレンドの変化点が保守的すぎると、長期予測が非現実的なほど平坦になることがあります。柔軟性を高めるか、成長の上限を指定してください。
- 祝日の影響には指定が必要:Prophet は祝日を自動的に検出しません。祝日 DataFrame を指定する必要があります。指定されていない祝日はモデル化されません。
- 因果推論には不向き:Prophet はパターンを見つけますが、その理由は説明しません。回帰変数を追加しても、示されるのは相関であり、因果関係ではありません。
- 不確実性区間:残差の自己相関ではなく、過去のトレンド変化の分散に基づきます。残差に構造がある場合、区間が狭すぎることがあります。
参考資料
- Prophet のハイパーパラメーター調整ガイドについては、
references/prophet-tuning.mdを参照してください - 交差検証のベストプラクティスについては、
references/prophet-cv.mdを参照してください
コメント
Markdown 対応