11 人が閲覧(直近 30 日) Python

Prophet(Meta・旧Facebook)とは:時系列予測の使い方とv1.5の開発状況【2026年10月】

Prophet(Meta・旧Facebook)とは:時系列予測の使い方とv1.5の開発状況【2026年10月】

Prophetは、Meta(2021年10月までの社名はFacebook)のCore Data Scienceチームが2017年に公開した時系列予測ライブラリです。日付と値の2列からトレンドと季節性を推定でき、祝日効果は対象国やイベントを追加設定して取り込みます。PythonとRで使えます。2026年8月のv1.4.0で公式が「保守モード」を宣言しました。今後は不具合修正と依存ライブラリへの追従だけになります。この記事では、2026年10月5日公開の最新版v1.5.0を前提に、仕組み・最小コード・精度の上げ方と、今からProphetを選ぶべきかの判断材料をまとめます。

まとめ

Prophetは時系列をトレンド+季節性+休日効果+誤差の和で表す加法モデルで、pip install prophet のあと ds(日付)と y(値)の2列を fit() して predict() すれば予測が出ます。ライセンスはMITで商用利用もできます。最新版はv1.5.0(2026年10月5日)で、動作にはPython 3.10以上が要ります。

開発はv1.4.0(2026年8月1日)で保守モードに入り、新機能の予定はありません。最後に入った新機能は、気温のような外部変数の将来値を専用のProphetモデルで予測し、その不確実性を予測区間に含める regressor_predictor です。

予測の根拠を成分の図で説明したい業務データの予測には、今も最初の選択肢になります。最高精度が要件の予測や、多数の系列をまとめて学ばせたい予測では、季節ナイーブ予測などの単純な手法を基準線に置き、statsforecastや時系列基盤モデルと同じ条件で誤差を比べて決めます。

Prophetとは:MetaのCore Data Scienceチームが公開した時系列予測ライブラリ

Prophetは、Facebook社内の需要予測や計画業務のために作られ、オープンソースとして公開されたライブラリです。手法はSean J. TaylorとBenjamin Lethamの論文「Forecasting at Scale」(The American Statistician 72巻1号、37〜45ページ、2018年)にまとまっています。社名がMetaに変わった後もリポジトリは github.com/facebook/prophet のままで、「Facebook Prophet」「Meta Prophet」はどちらも同じライブラリを指します。読み方は「プロフェット」で、英単語の prophet(預言者)と綴りは同じです。

配布はPythonがPyPI、RがCRANです。ライセンスはリポジトリのLICENSEファイルのとおりMITです。設計の狙いは、統計の専門家でない分析者でも業務データの予測を回せることにあります。定常性の検定や次数の決定を求めず、既定値のまま動かせます。

予測式の4成分:トレンド・季節性・休日・誤差

Prophetのモデルは次の足し算です。

y(t) = g(t) + s(t) + h(t) + ε_t

g(t) はトレンド、s(t) は季節性、h(t) は祝日・イベントの効果、ε_t は誤差です。季節性はフーリエ級数で近似され、fourier_order を上げるほど細かい形まで表せます。トレンドは growth 引数で、既定の linear、上限に向けて伸びが鈍る logistic、水準が変わらない flat の3種類から選びます。

トレンドの折れ曲がり(変化点)は自動で検出されます。既定では学習期間の先頭80%(changepoint_range=0.8)に25個(n_changepoints=25)の候補を置き、効く点だけが残ります。末尾20%に候補を置かないのは、直近の揺れをトレンドの転換と取り違えて予測が暴れるのを防ぐためです。

向くデータと向かないデータ

得意なのは、週次・年次の季節性がはっきりしていて、数シーズン分の履歴がある日次・週次データです。小売の売上、サイトの訪問数、来店者数が典型です。年次の季節性を推定するなら2年以上の履歴を用意してください。既定の yearly_seasonality="auto" は、履歴が2年未満だと年次の季節性を自動で外します。短い履歴で True を指定して無理に入れると、年次成分が不安定になります。秒・分単位のデータも ds に時刻を入れれば扱え、日内の季節性は自動で当てはめられます(公式の非日次データの章は5分間隔の気温データで例示)。強みが出にくいのは、季節性のないランダムウォークに近い系列です。この場合は前日の値をそのまま使うナイーブ予測と誤差を比べてから採否を決めてください。

2026年の開発状況:v1.4.0で保守モードへ移行

公式リポジトリのREADMEには、v1.4.0と同時に次の告知が加わりました。「Prophetはv1.4.0から保守モードにある。受け付けるのは不具合修正、依存ライブラリの更新、Python版と機能をそろえるためのR版の変更だけで、新機能の予定はない」。開発終了ではありませんが、モデルの表現力はv1.4.0の時点で固定されたと考えてください。

v1.2.2〜v1.5.0のリリース履歴

GitHubのリリース一覧から、直近4つの版の中身を抜き出しました。日付はGitHubでの公開日です。v1.4.0の配布物はビルドを直した「v1.4.0-patched」として8月15日にPyPIへ上がっています。

版 公開日 主な変更
v1.2.2 2026-01-25 R版のCRAN対応、pandas上限の修正
v1.3.0 2026-01-27 pandas 3.0・NumPy 2.4に対応
v1.4.0 2026-08-01 Python 3.10未満を切り捨て、型注釈、regressor_predictor
v1.5.0 2026-10-05 交差検証・performance_metricsの不具合修正

v1.5.0の修正は、cross_validation() が並列実行のプールを閉じない問題や、performance_metrics() が渡した指標リストを書き換えてしまう問題などです(v1.5.0のリリースノート)。交差検証でパラメータを探索している環境なら、v1.5.0へ上げる価値があります。

2023年の方針表明と2026年の保守モードの違い

2023年2月にメンテナのCuong Duongが書いた「facebook/prophet in 2023 and beyond」は、「基礎となるモデルに大きな変更を加える予定はない」としたうえで、導入のしやすさ・実行速度・ドキュメントの改善を続けると書いていました。最先端の手法を求める人にはNeuralProphetとNixtlaのstatsforecastを勧めています。

2023年の時点では「大きな変更はしない」でした。2026年は「新機能を入れない」です。後者のほうが範囲ははっきりしています。Prophetに無い機能(多変量の同時予測、ラグ特徴量など)が必要になったら、待たずに別のライブラリを検討してください。

Prophetのインストールと最小コード

pip install prophet と動作要件

Pythonではpipで入ります。

python -m pip install prophet

この記事のコードと同じ版で再現したい場合は、python -m pip install prophet==1.5.0 のように版を固定します。

PyPIのv1.5.0が要求するのはPython 3.10以上で、依存は cmdstanpy>=1.0.4、pandas>=1.3.5、numpy>=1.21.6、holidays>=0.25,<1 などです。ビルド済みのwheelが配布されているので、通常はStanのコンパイル環境を用意する必要はありません。conda派なら conda install -c conda-forge prophet でも入ります。

古い記事に出てくる fbprophet は、v1.0で prophet に改名される前のパッケージ名です。PyPIの fbprophet は2020年9月の0.7.1で止まっているので、pip install fbprophet や from fbprophet import Prophet は使わないでください。

日本の祝日を入れて90日先を予測するコード

入力は、日付列 ds と数値列 y を持つpandasのDataFrameです。公式のクイックスタートは、ds を YYYY-MM-DD(時刻付きなら YYYY-MM-DD HH:MM:SS)の形式にするよう求めています。

import pandas as pd
from prophet import Prophet

df = pd.read_csv("data.csv")  # 列は ds, y の2列
m = Prophet()
m.add_country_holidays(country_name="JP")  # 日本の祝日効果を追加
m.fit(df)

future = m.make_future_dataframe(periods=90)  # 90日先まで
forecast = m.predict(future)
print(forecast[["ds", "yhat", "yhat_lower", "yhat_upper"]].tail())

fig1 = m.plot(forecast)             # 実績・予測・予測区間
fig2 = m.plot_components(forecast)  # トレンド・週次・年次・祝日に分解

add_country_holidays() は、依存パッケージ holidays の日本の祝日表(元日、成人の日、建国記念の日など)を休日効果として取り込みます。祝日に来店や売上が動く業種では、fit() の前に必ず入れてください。欠損日は事前に埋める必要がありません。外れ値は、公式ドキュメントの外れ値の章のとおり値をNaNにすると学習から外れます。

R版の導入元:CRANとGitHubリリースの違い

R版は install.packages('prophet') でも入ります。ただ、CRANの版は1.1.7(2026年1月22日公開)で、Python版の1.5.0より古いままです。READMEも「CRAN版はかなり古いので、最新の不具合修正と祝日データが欲しければ最新リリースを入れる」よう勧めています。

install.packages('remotes')
remotes::install_github('facebook/prophet@*release', subdir = 'R')

予測結果の読み方:yhatと予測区間の前提

predict() の戻り値で見る列は、点予測の yhat と予測区間の yhat_lower・yhat_upper です。区間の既定は80%(interval_width=0.80)で、95%にしたければ Prophet(interval_width=0.95) と指定します。

区間に含まれるものには注意が要ります。公式ドキュメントの不確実性の章によると、既定(mcmc_samples=0)の区間に含まれるのはトレンドと観測ノイズの不確実性だけで、季節性の不確実性は入りません。季節性まで含めるには mcmc_samples=300 などでフルベイズ推定を回します。そのぶん計算時間は大きく伸びます。同じ章は、将来も過去と同じ頻度と大きさでトレンドが変わるという前提で区間を出しているので、区間の被覆率を正確だと期待しないよう書いています。

plot_components() の分解図は成分ごとの寄与を見るもので、変化点の印は出ません。変化点は prophet.plot の add_changepoints_to_plot() で予測図に重ねて表示し、実際の出来事(サイト改修、値上げ、需要の急変)と重なっているかを確かめます。

from prophet.plot import add_changepoints_to_plot

fig = m.plot(forecast)
add_changepoints_to_plot(fig.gca(), m, forecast)

既知の出来事と一致しないだけで過学習とは断定できません。交差検証でトレンドの過学習が疑われる場合は、次の章の changepoint_prior_scale を下げてください。

精度を上げる設定と効果の測り方

changepoint_prior_scale:トレンドの追従度

既定は0.05です。予測が過去の凸凹に反応して暴れるなら0.01などへ下げ、直近の明らかな転換に追いつけていないなら0.1〜0.5へ上げます。実務でいちばん触る引数です。

m = Prophet(changepoint_prior_scale=0.1)
m.fit(df)

seasonality_mode:規模が大きいほど季節の振れ幅も大きい系列

成長中のECの日次売上のように、売上の水準が上がるほど季節の山と谷の差も広がる系列では、既定の加法(additive)ではなく乗法(multiplicative)が合います。月次の周期を足したい場合は add_seasonality() で周期と fourier_order を指定します。

m = Prophet(seasonality_mode="multiplicative")
m.add_seasonality(name="monthly", period=30.5, fourier_order=5)
m.fit(df)

外部変数の将来値もProphetに予測させるregressor_predictor(v1.4.0)

販促フラグや気温を説明変数に入れるのが add_regressor() です。ただし従来は、予測する期間の値も自分で埋める必要がありました。埋め忘れると predict() は ValueError: Regressor 'temp' missing from dataframe で止まります。埋めた値は確定値として扱われるため、気温の予報のように外れうる値でも、その不確実性は予測区間に入りませんでした。

v1.4.0のプルリクエスト#2703で、add_regressor() に regressor_predictor 引数が加わりました。True を渡すと、その変数専用のProphetモデルが既定のパラメータで将来値を予測し、その不確実性も予測区間に反映します。辞書を渡すと、専用モデルの Prophet() コンストラクタに引数として渡ります(forecaster.pyのadd_regressorのdocstring)。

m = Prophet()
m.add_regressor("temp", regressor_predictor={"changepoint_prior_scale": 0.01})  # 気温は専用モデルで予測
m.add_regressor("promo")  # 販促フラグは計画どおりの値を自分で入れる
m.fit(df)  # df は ds, y, temp, promo の4列

future = m.make_future_dataframe(periods=90)
future["promo"] = 0  # temp 列は埋めなくてよい
forecast = m.predict(future)

使い分けの基準は、その変数が予測時点で決まっているかどうかです。販促の実施日や営業日のように計画で決まる変数は、従来どおり自分で値を入れます。気温や来訪者数のように予測が要る変数だけ regressor_predictor に任せます。この機能はオプトインで、指定しなければ従来の動きのままです。cross_validation() でも検証期間の外部変数を実績値ではなく専用モデルの予測値で置き換えて評価するので、本番に近い誤差が出ます。その代わり、各期間で専用モデルも学習し直す分だけ実行時間が延びます。

cross_validationによる調整効果の定量評価

パラメータを変えたら、見た目ではなく時系列の交差検証で比べます。initial(最初の学習期間)、period(予測の起点をずらす幅)、horizon(予測する長さ)を指定すると、「過去のその時点で予測していたらどれだけ外れたか」を再現します。

from prophet.diagnostics import cross_validation, performance_metrics

cv = cross_validation(m, initial="730 days", period="90 days", horizon="90 days")
metrics = performance_metrics(cv)  # mse, rmse, mae, mape, mdape, smape, coverage
print(metrics.head())

水準が異なる系列の比較にはMAPEが使えますが、実績がゼロまたはゼロに近い系列には向きません。MAEは元の値と同じ単位で解釈でき、RMSEより大きな誤差の影響を抑えられます。coverage は実績が予測区間に入った割合で、80%区間なのに大きく下回るなら区間を過信しないほうがよいという合図です。initial には年次の季節性を学べるよう730日以上を取り、horizon は本番の予測期間(ここでは90日)にそろえます。履歴は initial と horizon の合計より長く必要です。時間がかかるときは parallel="processes" で並列化できます(公式の診断の章は、大きすぎない問題ならこの指定を勧めています)。WindowsやmacOSのようにプロセスをspawn方式で起動する環境では、モデルの作成から交差検証までを関数にまとめ、if __name__ == "__main__": の下から呼び出してください。

Prophetを選ぶ条件と乗り換え先の現況

Prophetの立ち位置は「結果を説明しやすい予測モデル」です。2023年に公式が勧めた乗り換え先のうち、NeuralProphetはGitHubで依存の更新は続いていますが、PyPIの最新版は2024年6月21日の0.9.0のままです。新しいリリースが出ているのはstatsforecast(2026年7月16日に2.1.1)のほうです。

観点 Prophet statsforecast NeuralProphet TimesFM
配布・提供形態 PyPI 1.5.0(2026-10) PyPI 2.1.1(2026-07) PyPI 0.9.0(2024-06) 重み公開・BigQuery ML
学習 系列ごと 系列ごと 単一系列・複数系列の共同学習 不要(事前学習済み)
主なモデル 加法モデル AutoARIMA・ETS等 PyTorch実装の加法モデル 基盤モデル
結果の説明 成分の分解図 係数・次数 成分の分解図 難しい
開発状況 保守モード リリース継続 2024年6月以降リリースなし 3.0公開済み

TimesFM 3.0は、公式リポジトリのライセンス注記のとおり、ダウンロードして自前で動かす重みは非商用・非本番用途に限られます。業務で使うならBigQuery MLなど、Google Cloudの許可されたサービス経由になります。

Prophetを選ぶのは、①予測の根拠を成分の図で関係者に説明する必要がある、②系列が数十〜数百本で1本ずつ短時間で回したい、③祝日やキャンペーンの効果を明示的に入れたい、のいずれかに当てはまるときです。定常性の仮定や次数を詰めるARIMA系の考え方は時系列とは?意味と分析手法の使い分けで整理しています。学習なしで予測できる基盤モデルは、BigQueryから使う手順をTimesFMとは:BigQueryのAI.FORECASTで試す時系列予測で解説しています。学習不要でCPUだけで動く基盤モデルの選択肢はTimestralとは:Mistralの時系列基盤モデルをCPUで動かす手順で扱っています。

Prophetを選ばないほうがよい場面

多数の系列に共通するパターンを1つのモデルで学ばせたい予測では、系列ごとに学習するProphetは第一候補になりません。説明責任が薄く精度だけが問われるバッチ予測なら、最初からstatsforecastやLightGBMなどの勾配ブースティングと誤差を比べてください。保守モードなので、足りない機能が今後追加されることもありません。比較の基準線には、ナイーブ予測や季節ナイーブ予測など、データに合う単純な手法を置きます。同じ検証条件で誤差を比べ、説明可能性や計算負荷も含めて採否を決めます。予測モデルを業務システムに組み込むところまで任せたい場合は、AI予測分析開発・需要予測開発でデータの確認から相談できます。

よくある質問

Prophetの読み方は?fbprophetとは違うライブラリですか?

読み方は「プロフェット」です。fbprophet はv1.0で prophet に改名される前の名前で、同じライブラリの古い版です。今は pip install prophet で入れ、from prophet import Prophet で読み込みます。

Prophetは開発終了したのですか?

終了していません。2026年10月5日にv1.5.0が出ています。ただしv1.4.0から保守モードで、受け付けるのは不具合修正・依存ライブラリの更新・R版の追随だけです。新機能の予定はありません。

Prophetのライセンスは?商用利用できますか?

MITライセンスです。著作権表示とライセンス文を残せば、商用利用・改変・再配布ができます。

Prophetの的中率(予測精度)はどれくらいですか?

データ次第で、一律の数字はありません。自分のデータで cross_validation() を回し、performance_metrics() でMAPEやMAEを計算する方法があります。時系列順に分けた未学習データで予測を評価する方法も使えます。同じ検証期間で季節ナイーブ予測(前年同日の値)やARIMAの誤差も出し、それを下回るかで採否を決めてください。

数千本の系列をまとめて予測できますか?

Prophetは1系列に1モデルが基本です。本数が多いときは系列ごとの学習を並列で回します。PyPI版には parallel extra としてDask連携の依存が用意されています。Sparkで回したい場合、READMEは2026年10月から、Amadeusが開発したScala製の簡略版再実装Helter Skelterを紹介しています。こちらは別実装なので、Prophetと同じ結果になるとは限りません。

関連記事

お気に入りに入れた記事の一覧

この記事は以下の記事からリンクされています

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.28 テックブログ リンツ不正アクセス:314万件の対象確認とパスワード強制リセット後の対処
  2. 2026.10.27 テックブログ Brotli 脆弱性:CVE-2026-111497の影響確認とNode.js・Python・.NETの更新手順
  3. 2026.10.29 テックブログ ソニー生命の不正アクセス:38.5万件の対象確認と窓口、停止中の手続き
  4. 2026.10.30 テックブログ Cisco ASAの脆弱性CVE-2026-76418:二次認証の設定確認と8月修正版からの再更新
  5. 2026.01.30 コラム 税務調査は個人と法人で何が違う?担当部署・件数・調べられる点と追徴税額を比較【令和6事務年度】

RELATED POSTS 関連記事

目次