時系列モデル「Prophet」とは。Python例も一緒に紹介

はじめに

ビジネスの現場では、需要予測やキャパシティプランニング、異常検知など、時系列予測が必要な場面が数多くあります。しかし、信頼性が高く高品質な予測を作成するアナリストは限られています。

FacebookのデータサイエンティストであるSean J. TaylorとBenjamin Lethamは、この課題を解決するために開発された時系列予測ツール「Prophet」について、こちらについて紹介していきます。

「Prophet」の論文は下記となります。

Forecasting at scale
Forecasting is a common data science task that helps organizations with capacity planning, goal setting, and anomaly detection. Despite its importance, there ar...

データ分析の際にはしっかりと分布を確認しながら適切な方法を進めていくことが重要です。これらについて、経験豊富な方とマンツーマンで学習していくのもオススメです。

従来の時系列手法

当時、Facebook上のイベント作成数という実データを例に、既存の自動予測手法のARIMAやETSなどの手法は、トレンドの変化、年末年始の落ち込みなどの季節性を適切に処理できないことが示されました。

ただ、それらのパラメータを適切にチューニングして高品質な分析モデルを作るのは一般には難しく、拡張性に優れていませんでした。

そのため、多数の人が予測でき、様々な予測に対応したうえで自動化された評価を実施するために作られたのがProphetとなります。

Prophetのアプローチ:アナリスト・イン・ザ・ループ

Prophetの最大の特徴は、「アナリスト・イン・ザ・ループ」という設計思想です。

ビジネス時系列の一般的な特徴を扱い、基礎となるモデルの詳細を知らなくても調整できる直感的なパラメータを持つように設計されています 。

モデルの構造

Prophetは、時系列を3つの主要コンポーネントに分解します。

$$ y(t) = g(t) + s(t) + h(t) + \varepsilon_t $$
  • \( g(t) \):トレンド成分
  • \( s(t) \):周期性成分(週次、年次の季節成分)
  • \( h(t) \):休日や不規則なイベント
  • \( \varepsilon_t \):誤差項

この分解可能な設計により、各コンポーネントを個別に可視化・調整できます。

直感的なパラメータ設定

統計の専門知識がなくても調整できるよう、パラメータは実務的な意味を持つように設計されています。

  • キャパシティ: 市場規模に関する外部データを直接適用できる 。
  • 変化点:製品変更の既知の日付などを直接指定できる 。
  • 休日と季節性:影響を与える休日や季節性の時間スケールを直接入力できる 。
  • スムージングパラメータ:トレンドや周期性の柔軟性を調整できる。

予測評価の自動化

Prophetではシミュレーションされた過去の予測(SHFs)を用いて評価を実施しています。

過去の複数時点で予測を行い、実際の値と比較することで、予測精度を事前評価します。予測期間Hに対してH/2ごとにシミュレーション予測を実施し、LOESSなどの非パラメトリック手法で予測誤差を推定します。

Python実装例

Prophetの使い方は非常にシンプルです。基本的な実装例を見てみます。

import pandas as pd
from prophet import Prophet
import seaborn as sns
import matplotlib.pyplot as plt

# 航空旅客数データの読み込み
flights = sns.load_dataset('flights')

# Prophetの形式に変換(dsとyの2列が必須)
df = pd.DataFrame({
    'ds': pd.to_datetime(flights['year'].astype(str) + '-' + 
                         flights['month'].astype(str) + '-01'),
    'y': flights['passengers']
})

print(df.head())

# モデルの作成と学習
model = Prophet()
model.fit(df)

# 未来2年間の予測
future = model.make_future_dataframe(periods=24, freq='MS')  # 24ヶ月先まで
forecast = model.predict(future)

# 結果の可視化
fig1 = model.plot(forecast)
plt.title('航空旅客数の予測')
plt.xlabel('年')
plt.ylabel('旅客数')

# トレンドと季節性を個別表示
fig2 = model.plot_components(forecast)

カスタマイズ例

ドメイン知識を活用した調整も簡単です:

# 成長の上限を設定
df['cap'] = 600  # 最大旅客数を600と仮定
future['cap'] = 600

# ロジスティック成長モデル
model = Prophet(growth='logistic')
model.fit(df)
forecast = model.predict(future)

model.plot(forecast)
plt.title('ロジスティック成長モデルでの予測')

これらのコードにより、簡単にProphetを実装できました。

まとめ

Prophetは「スケールする予測」という課題に対して、技術的なスケーラビリティだけでなく、人的なスケーラビリティも重視した解決策を提供しています。

実装例から分かるように、数行のコードで基本的な予測ができる一方、ドメイン知識を活かした細かな調整も可能です。人間の判断を適切に組み込むことで、より信頼性の高い予測システムを構築できます。

Prophetを学ぶのにオススメの方法

Pythonによる時系列分析

こちらはProphetモデルも含め、様々なモデルの説明が書かれており、ビジネス活用例もたくさん書かれています。初心者の方にも分かりやすい内容となっているため、初めて時系列分析する方にもオススメです。

スクール:現役データサイエンティストに教えてもらう

Prophetモデルは様々な時系列分析に使われているため、重要な分析手法になります。難しいと感じる場合は、相談しながら進められるスクールもオススメです。

データサイエンティストになるためにオススメのスクール5選。
はじめに近年、多くの企業でデータ活用が進み、AIやデータ分析への期待がますます高まっています。そのため、データサイエンティストは現代のビジネス界で最も需要のある職業の一つです。データ分析、機械学習、統計学、プログラミングなど多岐に...

コメント

Copied title and URL