時系列予測モデル”Prophet”とは?概要からビジネス活用例まで詳しく解説!

目次

Prophetとは

Prophetとは2017年にFacebook(現Meta社)が開発し、オープンソースとして公開した時系列予測のライブラリです。PythonとR言語を使って誰でも利用することができます。
Prophetの最大の特徴は、「高度な統計の知識を持たない人でも、手軽に実用的な予測が行える」という点にあります。

時系列予測について

時系列予測とは、時間経過に伴って変化する数値のデータを元に、将来の数値を予測する統計手法です。ビジネスの現場においては、「来月の商品の売上高」や「週末の店舗への来場者数」「ウェブサイトのアクセス数」などを予測することができ、ビジネスの意思決定を支援できます。時系列分析の基礎や具体的な手法については、以下の記事で詳しく解説しています。ぜひ合わせてご覧ください。

従来の時系列予測

時系列モデルの代表的手法として、ARIMAモデル、SARIMAモデルが挙げられます。それぞれのモデルについて簡単にご紹介します。

ARIMAモデル(自己回帰和分移動平均:Auto Regressive Integrated Moving Average)

ARIMAモデルは、d階差分系列

\[\Delta^d y_t = \Delta^{d-1} y_t – \Delta^{d-1} y_{t-1}\]

を以下のような式で表します。

\[\Delta^d y_t = \phi_1 \Delta^d y_{t-1} + \cdots + \phi_p \Delta^d y_{t-p} + \epsilon_t + \theta_1 \epsilon_{t-1} + \cdots + \theta_q \epsilon_{t-q}\]

$$
\begin{eqnarray} y_t &:& \text{予測したい } t \text{ 時点のパラメータ} \\
\phi &:& \text{自己回帰係数(AR パラメータ)} \\
\theta &:& \text{移動平均係数(MA パラメータ)}
\\ \epsilon &:& \text{ホワイトノイズ}
\end{eqnarray}
$$

ARIMAモデルは「3つの異なるアプローチ」を組み合わせたもので、それぞれ以下の要素で構成されています。

  • 自己回帰(AutoRegressive):過去のデータが未来にも影響を与える
  • 和分(Integrated):右肩上がり、右肩下がりといった「トレンド」をデータから取り除きデータを平坦にする処理
  • 移動平均(Moving Average):過去に起きた突発的な誤差が未来にも影響を与える

ARIMAモデルに対して季節性や周期性を追加しているのがSARIMAモデルです。ARIMAモデルで用いる自己回帰(AR)、差分(I)、移動平均(MA)を、季節周期にも適用することで、季節性を持つデータをモデル化しています。

これらのモデルも予測精度が高い手法ではありますが、各パラメータの調節が難しく、統計の専門知識および業務上のドメイン知識の両方を兼ね備えていないと、ビジネスの現場では運用しづらいといったデメリットがあります。そのデメリットを解決するのがProphetです。

Prophetについて

従来の時系列予測モデルで課題となっていた、ビジネスの現場での運用のしづらさという参入ハードルを下げたモデルとして、Prophetが挙げられます。Prophetではトレンド、周期性、休日やイベント日などをモデルに組み込むことで、予測結果を得ることができるため、直感的なモデル構築が可能です。

Prophetの予測は一般化加法モデルに基づき、以下の3つの主要な成分と誤差項を足し合わされる数式で表されています。

\[y(t) = g(t) + s(t) + h(t) + \varepsilon_t\]

$$
\begin{array}{ll} g(t) & : \text{トレンド成分(長期的な傾向)} \\
s(t) & : \text{季節性成分} \\ h(t) & : \text{イベント成分} \\
\varepsilon_t & : \text{誤差項(モデルでは説明できない残差)}
\end{array}
$$

それぞれの成分について一つずつ説明していきます。各成分の数式については本節の最後にコラムとして掲載しておりますので、ご参照ください。

お気軽にご相談ください!

当サイトの運営会社であるデータアナリティクスラボ株式会社は、データサイエンティストのプロフェッショナルサービスを提供しています。Prophetをはじめとしたデータ分析の実績も多数ございますので、お気軽にご相談ください。

ご相談・お問い合わせはこちらから

トレンド成分

トレンド成分は、日々の細かな上下変動や季節の波を取り除いた数か月・数年単位でじわじわと変化する傾向を表します。Prophetではトレンドは2種類のモデルから定義されており、データの性質に合わせて適切なモデルを選定することで、精度よく予測を行うことができます。

①ロジスティック非線形トレンド

 会員数、アプリのダウンロード数、ある商品の市場普及率のように、最終的にはある水準で頭打ちになるデータに適したトレンドです。新しいサービスが市場に出たとき、最初は利用者が急速に増えますが、市場の大半に普及するとそれ以上は増えにくくなります。このS字を描くような成長パターンをモデルで表現できます。

こちらのトレンドを使用する際には、このデータの上限をあらかじめ指定する必要があります。上限値の設定には、データの収集以外に、市場調査やその業界に対するドメイン知識も必要になるため注意が必要です。

②線形トレンド

 売上高・Webのアクセス数、受注件数のように理論的に増え続ける可能性のあるデータに適したトレンドです。このモデルの特徴として、成長の勢いが途中で切り替わる時点、いわゆるトレンドの変化点を自動で検出することができます。たとえばあるサービスが開始して1年目では徐々に知名度を上げ、2年目では口コミが増えて急速に利用者も増加し、その後競合他社の参入により伸びが鈍化したというような「傾きの変化」を、データを見ながら自動的に捉えることができます。

ビジネスの現場では予測したい値に影響を与える要因が多くあり、成長速度が一定でない場合が多くあります。このモデルでは現実に柔軟に対応できる点が特徴です。

季節性成分

季節性成分は、一定の周期で繰り返されるデータの変動を表します。年間を通して繁忙期や閑散期があるデータの場合や、1週間の間で売上に周期的な変化がある場合は、この成分で表現することができます。売上高や来場者数などのデータには多くの周期的なパターンが潜んでいます。下記がその一例です。

  • 週次周期:オフィス街のカフェは月曜〜金曜に売上が増加、土日は減少。
  • 月次周期:給料日後の週末は消費が増える傾向があり、売上が増加。
  • 年次周期:アイスクリームの売上は夏に急増、冬に減少。

また前節で紹介したARIMAモデル、SARIMAモデルなどの予測モデルでは複数の周期を同時に扱おうとした場合、モデルが複雑になり推定するパラメータが増えてしまうデメリットがありましたが、Prophetではこうした複数の周期を同時に学習することができます。

イベント成分

イベント成分は、特定の日付に起こる一時的な変動を表します。トレンド成分や季節性成分とは異なり、毎週・毎年規則的に繰り返さないものの、その日だけ売上や来場者数が大きく変動する場合にはこの成分で表現することができます。ビジネスの現場において「イベント日」は多く存在します。

  • ゴールデンウィークや年末年始などの大型連休によって売上が増加。
  • 自社のキャンペーンや特売日によって一時的に売上が急増。
  • 自然災害や工事など客足が下がる要因が起こった際に一時的に売上が減少。

Prophetではこうした通常とは異なる日を「イベント日」としてモデルに組み込むことで、その影響をモデルで学習することができます。これらの各成分の和として予測値が得られるため、各成分を独立して可視化できるというモデルの解釈性が高い点も、他のモデルとの違いになります。

それに加え、予測結果では信頼区間も一緒に計算されるため、予測より売上が大きく伸びた際の「楽観シナリオ」と売上が予測より伸びなかった際の「悲観シナリオ」もあらかじめ考慮して商品の在庫計画を立てることができる点もビジネス面において扱いやすい点の一つです。

各成分の数式

  • トレンド成分①

$$g(t) = \frac{C(t)}{1 + \exp\left(-\left(k + a(t)^T \delta\right)\left(t – \left(m + a(t)^T \gamma\right)\right)\right)}$$

$$
\begin{array}{ll}
C(t) & : \text{時間とともに変化しうる上限値(キャパシティ)} \\
k & : \text{成長率(傾き)} \\
a(t) & : \text{特定の日付が変化点を過ぎたかどうかを示すベクトル} \\
\delta & : \text{変化点ごとに「どれだけ傾きが変わるか」を示すベクトル} \\
m & : \text{切片}
\end{array}
$$

  • トレンド成分②

$$g(t) = \left(k + a(t)^T \delta\right)t + \left(m + a(t)^T \gamma\right)$$

$$
\begin{array}{ll}
\gamma & : \text{変化点でトレンドが連続につながるように切片を調整する値}
\end{array}
$$

  • 季節性成分

$$s(t) = \sum_{n=1}^{N} \left( a_n \cos\left(\frac{2\pi nt}{P}\right) + b_n \sin\left(\frac{2\pi nt}{P}\right) \right)$$

$$
\begin{array}{ll} P & : \text{季節性の周期(年単位なら365.25、週単位なら7など)} \\
N & : \text{フーリエ級数の次数(大きいほど複雑な季節パターンを表現できる)} \\
a_n, b_n & : \text{各フーリエ項の係数(データから推定される)}
\end{array}
$$

  • イベント成分

$$Z(t) = \left[ \mathbf{1}(t \in D_1), \ldots, \mathbf{1}(t \in D_L) \right]$$

$$h(t) = Z(t)\kappa$$

$$
\begin{array}{ll} \mathbf{1}(t \in D_i) & : \text{日付 } t \text{ が休日 } D_i \text{ に含まれるなら1、そうでなければ0を返す関数} \\
\kappa & : \text{その休日がもたらす効果の大きさを表すパラメータ} \\
L & : \text{考慮する休日の数}
\end{array}
$$

必要なデータ

Prophetの入力として最低限必要となるデータは非常にシンプルで、データを得た日付や時間(ds)と予測したい値(y)の2種類をモデルに入力します。

dsy(予測したい値)
2025-01-01120
2025-01-02135
2025-01-0398

必要となるデータの期間は予測したい周期によって変わり、1年後までの予測値がほしいのであれば過去2~3年分のデータが必要となり、1週間後までの予測値がほしいのであれば過去数週間分のデータが必要となります。また、データに一部欠損がある場合でも予測が行えるため、欠損値の補完などの前処理は不要です。

さらにモデルに追加すると予測精度が上がる可能性があるデータを紹介します。

休日、イベント日の情報

「休日は平日に比べて売上が上がる」「イベントの開催によって通常の売上より伸びた」といったパターンを考慮することができます。

外的変数

 気温、降水量などの予測したい数値に影響を与えそうな変数を追加することもできます。ただし外的変数を入れて予測を行う場合は、予測期間分の値を用意する必要があることに注意してください。(気温を入れる場合、将来の気温の予測値も用意する必要があります。)

Prophetの活用例

オフィスビルの人流予測

本節ではオフィスビルの在館人数をProphetを用いて予測し、ビジネス施策の判断材料や混雑回避などに活用した事例を紹介します。今回使用するデータは、オフィスビルの人流を想定して作成したダミーデータで、差分から在館人数を算出しています。

STEP
分析目的の設定

今回は「オフィスビルの在館人数を、時刻単位で定量的に予測すること」を分析の目的として設定します。この予測結果は人員配置や設備運用の計画に活用することを想定しています。

STEP
データ前処理・整形

在館人数の予測モデルの作成のために入館人数と退館人数の差分を取り、在館人数を算出します。検出の誤差により在館人数がマイナスになる場合、人の出入りが起こらない時間帯(お正月などの休館日や深夜帯)はデータを0で置換します。

またProphetに入力する際に時系列をds、 予測したい値をyとカラム名を変更して以下のようなデータを整形します。

ds入館人数退館人数y(在館人数)
2025/1/6 6:50000
2025/1/6 7:00624
2025/1/6 10:00153898
2025/1/6 23:0000-2 → 0に置換

このデータを「モデルの構築に使用する学習用データ」と「モデルの精度評価に使用する検証用データ」の2つに分割します。時系列が最新の2週間分のデータを検証用として、残りを学習用のデータとしています。

STEP
モデル構築

Prophetには学習データに加えて、以下の3点を設定しています。

  • 祝日リスト(元日、成人の日などの日本の祝日)
  • 季節性の指定(1日周期・1週間周期のパターンを学習するように指定)
  • 平日と休日で人流のピークが異なるため、日次周期を別々で学習させる

Prophetはこれらの情報を元に在館人数の推移を「トレンド成分」「季節性成分」「イベント成分」の3成分に分解して学習します。予測値はこれらの成分の合計として算出されます。

上のグラフはProphetの予測結果とその期間の実測した値をプロットしています。予測値の周囲にある水色の帯は予測区間で、モデルが正しいという仮定のもとで、実測値が約80%の確率でこの範囲に収まると想定される範囲です(80%という水準は変更可能)。帯が広いほど、その時点の予測に不確かさが大きいことを表します。

上のグラフは、Prophetが予測値をどのような成分に分解しているかを示しています。各成分の縦軸は、平均的な水準からの増減(人数)を表しています。たとえば週次季節性が (+130) であれば、その曜日は平均より130人多いという意味です。

  • トレンド:年始は稼働が少なく低い水準から始まり、通常稼働に戻る1月中旬にかけて水準が上昇。
  • 祝日効果:祝日にどれだけ人数が増減するかを表す。今回の予測では約300人減少すると推定。
  • 週次季節性:曜日による在館人数の差を表す。平日は水準が高く、休日は大きく減少。
  • 日次季節性(休日):休日における1日の中での時間帯ごとの変動を表す。
  • 日次季節性(平日):平日における1日の中での時間帯ごとの変動を表す。

また、Prophetには気温や近隣イベントの有無といった外的変数を予測に組み込む機能もあります。今回のモデルでは使用していませんが、人流に影響する外部の情報を追加することでさらなる精度改善が期待できます。

STEP
モデル評価

モデルの評価には先ほど分割した検証用データを用います。検証用データと同じ期間をモデルで予測して、予測値と実測値を比較することで、未知のデータに対する予測精度を定量的に評価できます。

今回は評価指標として、MAE(平均絶対誤差)と決定係数を用いて評価します。

MAE(平均絶対誤差)

予測値と実測値の差の絶対値を全時点で平均したもので、「予測から平均でどれだけずれたか」を表し、値が小さいほど精度が高いことを意味します。

決定係数:

実測値の変動をモデルがどの程度再現できているかを表す指標です。0から1の値を取り、1に近いほど実測の変動を良く捉えていることを意味します。

今回のモデルでは決定係数が0.954であるため、モデルが実測の変動を良くとらえており、誤差も少ないということが分かります。またMAEは79.6(人)で人員配置や設備運用の計画に活用する目的を考えると、許容できる誤差と考えられます。

このように定量的な評価を行うことで条件を変えたモデル同士の比較や予測モデルを実用化させるかどうかの判断材料になります。

お気軽にご相談ください!

当サイトの運営会社であるデータアナリティクスラボ株式会社は、データサイエンティストのプロフェッショナルサービスを提供しています。Prophetをはじめとしたデータ分析の実績も多数ございますので、お気軽にご相談ください。

ご相談・お問い合わせはこちらから

商品の需要予測

ある小売事業では、日ごとの店舗×商品という細かい単位での需要予測にProphetが活用されています。他の時系列予測モデルより扱いやすいというProphetの特徴を活かし、店舗数×商品数という膨大な組み合わせに対してモデルを構築することで、各店舗の過去売上に沿った、より正確な予測結果を得ることができ、売上の最大化や無駄な商品の廃棄のリスクを低減することができます。

注意点

過去のデータでは見られない突発的な変化を予測できない

時系列モデル全般に言える注意点ではありますが、Prophetはあくまで過去のデータのパターンを学習して未来を予測するモデルであるため、過去に一度も起きていない出来事の影響は予測に反映できません。例として新型感染症の流行、大規模な自然災害、競合他社の参入などが起こり、予測したい値に影響が出た場合は、その期間をイベントとして登録するなどの対処が必要になります。

データに特殊な期間を含んでいる場合は、その期間を排除して予測を行うか特殊な期間であることを明示的に学習させることが重要になります。

また、そのような出来事が起こった期間のデータを学習に使用する際も注意が必要です。新型感染症によって一時的に起こった数値の急落や急回復などを学習してしまい、将来もこのような増減が起こると誤った予測をしてしまう場合があります。

予測期間が過去のデータから遠くなるほど精度は落ちる

こちらもProphetに限らず時系列予測のモデル全般に言えることですが、予測する未来が遠くなるほど不確実性が高まり、予測精度は下がります。どこまでの予測期間であれば精度が保証されるという明確な基準はなく、データの規則性や周囲の環境にも左右されます。そのため、どこまで先を精度高く予測できるかは慎重に判断する必要があります。

過去のデータに定期的な空白がある場合は予測範囲も合わせる

データが平日や営業日のみといったように規則的に欠けている場合、その空白部分(休日・休業日)もProphetが予測しようとしてしまい、実態とは合わない予測値が出力されてしまう場合があります。これを防ぐため、予測対象の期間もデータと同じ粒度に揃えることが重要です。

まとめ

今回は時系列予測モデルのProphetについて解説いたしました。本記事のまとめは以下の通りです。

  • Prophetは従来のモデルと比較して、直感的なモデル構築が可能
  • トレンド、周期性、イベントの効果を独立して可視化できるためモデルの解釈性が高い
  • 必要に応じて、外的変数を使用して予測することが可能
  • 突発的な変化は予測が難しく、学習データに使用する際にも対処が必要になる

Prophetの特性や注意点を踏まえた、一歩深い分析の役に立てていただければ幸いです。

お気軽にご相談ください!

当サイトの運営会社であるデータアナリティクスラボ株式会社は、データサイエンティストのプロフェッショナルサービスを提供しています。Prophetをはじめとしたデータ分析の実績も多数ございますので、お気軽にご相談ください。

ご相談・お問い合わせはこちらから

こちらもご覧ください

よかったらシェアしてね!

この記事を書いた人

Data Analytics Magazine 編集部です!
ビジネスとデータサイエンスをつなぐメディアとして、日々情報発信いたします!

目次