DatabricksでProphetを利用して時系列予測をしてみた

DatabricksでProphetを利用して時系列予測をしてみた

Clock Icon2025.05.09

データ事業本部のueharaです。

今回は、DatabricksでProphetを利用して時系列予測をしてみたいと思います。

前提

私の手元のDatabricks環境では、既に airline_passengers というテーブルが用意してあります。

0509_databricks_01

こちらのテーブルの元になっているデータは AirPassangers という有名なデータセットで、1949〜1960年の米国の旅客機の月間搭乗者数のデータで、「年月」「乗客数」といったシンプルなカラムで構成されています。

https://www.kaggle.com/datasets/chirag19/air-passengers?select=AirPassengers.csv

今回の時系列予測ではこちらのデータを利用したいと思います。

やってみた

Notebookの準備

まず、新規でNotebookを作成します。

0509_databricks_02

Notebookが開いたら、右側のタブの『Envirinment』から、prophetをDependenciesに追加しておきます。

0509_databricks_03

スクリプト実行

準備ができたので、まずはテーブルのデータを読み込んでみます。

# テーブルの読み込み
spark_df = spark.table("default.airline_passengers")

# 表示
spark_df.show(5)

0509_databricks_05

次に、pandas DataFrameへの変換やProphetに入力するための前準備、データの可視化を行います。

import pandas as pd
import matplotlib.pyplot as plt

df = spark_df.select("*").toPandas()

# monthをDatetimeにして、カラム名をProphetに合わせ変更
df["month"] = pd.DatetimeIndex(df["month"]) 
df.rename(columns={"month":"ds", "passengers":"y"}, inplace=True) 

# 可視化
plt.plot(df["ds"], df["y"])
plt.xlabel('month')
plt.ylabel('passengers')
plt.show()

可視化した結果は次の通りで、周期性を持ちながら右肩上がりのグラフであることが分かります。

0509_databricks_06

次にProphetを利用して時系列予測をしてみます。

from prophet import Prophet

# インスタンス作成(季節性を考慮)
m = Prophet(seasonality_mode="multiplicative")
# モデルの学習
m.fit(df)
# 12ヶ月先までのデータがdsカラムに入っているDataFrameを用意する
future = m.make_future_dataframe(periods=12, freq='MS')
# 予測する
forecast = m.predict(future)
# 予測結果を可視化
fig = m.plot(forecast)

結果は次の通りで、赤枠部分が予測された部分になります。

0509_databricks_07

実際に数値でデータを見ると次のようになっています。

# 結果の一部表示
forecast.tail(5)

0509_databricks_08

トレンドと周期性も以下の通り確認してみます。

# トレンド性と周期性の抽出
m.plot_components(forecast)
plt.show()

0509_databricks_09

結果を見ると、トレンドとしては乗客数は右肩上がりで実データと同じ傾向であることが分かります。

周期性については夏が多く、秋から冬にかけて少なくなっているという季節変動の大枠が捉えられています。

なお上記はシンプルな時系列予測でしたが、Databricksの強みを活かしSparkを利用して大規模に実施したい場合などは以下が参考になりそうです。

https://www.databricks.com/jp/blog/2020/01/27/time-series-forecasting-prophet-spark.html

最後に

今回は、DatabricksでProphetを利用して時系列予測をしてみました。

参考になりましたら幸いです。

参考文献

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.