航空旅客数の予測 Prophet

航空旅客数の予測

Facebookが開発した時系列分析ライブラリProphetを用いて、航空旅客数のデータを分析し、将来の旅客数を予測してみましょう。

まず、以下のようにライブラリをインストールします。

1
!pip install prophet

次に、以下のコードを使ってデータを分析・予測します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import pandas as pd
from prophet import Prophet
import matplotlib.pyplot as plt

# データの読み込み
df = pd.read_csv('https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv')

# 列名の変更
df.columns = ['ds', 'y']
df['ds'] = pd.to_datetime(df['ds'])

# モデルの訓練
m = Prophet(yearly_seasonality=True)
m.fit(df)

# 未来の予測のためのデータフレームの作成
future = m.make_future_dataframe(periods=365)
forecast = m.predict(future)

# 予測のプロット
m.plot(forecast)
plt.show()

# トレンドとコンポーネントの表示
m.plot_components(forecast)
plt.show()

ここでは、航空旅客数のデータを読み込み、Prophetのモデルに適用可能な形式に加工します。

その後、モデルを訓練し、将来の365日にわたる予測を行います。

m.plot(forecast)では、元のデータ(点)予測の結果(線)をプロットしています。

また、m.plot_components(forecast)では、予測の各コンポーネント(トレンド、年間の季節性)をプロットしています。

これらの結果から、旅客数の長期的なトレンド季節的な変動を理解することができ、さらに未来の旅客数を予測することが可能です。

[実行結果]

ソースコード解説

ソースコードの詳細を説明します。

1. データの読み込み

  • pd.read_csv を使用して、航空旅客数の時系列データをURLから読み込みます。
  • データフレームの列名を['ds', 'y'] に変更し、'ds' 列を日付型に変換します。

2. Prophetモデルの訓練

  • Prophetを初期化し、年次の季節性を有効にしてモデルを構築します。
  • 訓練用のデータを使って、m.fit(df) でモデルを訓練します。

3. 未来の予測のためのデータフレームの作成

  • 未来の予測のために、m.make_future_dataframe(periods=365) を使って新しい日付のデータフレームを作成します。
  • この新しいデータフレームに対して m.predict(future) を実行し、将来の予測を行います。

4. 予測のプロット

  • m.plot(forecast) を使って、予測されたデータを含むグラフを表示します。
  • 実際のデータ予測されたデータが可視化され、さらに予測の信頼区間も表示されます。

5. トレンドとコンポーネントの表示

  • m.plot_components(forecast) を使用して、Prophetが検出したトレンド季節性の成分を個別にプロットします。
  • トレンド、年次、週次、日次の季節性成分が表示され、データのパターン季節変動を視覚的に理解するのに役立ちます。

これらのステップにより、Prophetを使って時系列データの予測を行い、その結果をグラフで視覚化する完全な流れが示されています。

グラフ解説

このコードは、Prophetを使って時系列データの予測とその分解を行います。

データセットは航空旅客数の時系列データで、以下の3つのグラフを生成します。

[実行結果]

  1. 全体の時系列データの予測

    • Prophetによる時系列データの予測を可視化します。
      横軸は時間(日付)を、縦軸は航空旅客数を表します。
      黒色の点が実際のデータ、青色の線が予測されたデータを示します。
      さらに、予測の信頼区間も表示されます(水色の領域)。
  2. トレンド

    • Prophetが検出したトレンドを示します。
      時系列データの中での長期的な変動を捉えており、時間に伴う変動や推移を示します。
      年次(yearly)、週次(weekly)、日次(daily)の季節性成分も含まれます。
  3. 季節性成分の表示

    • 季節性成分を個別にプロットし、それぞれの季節パターンを示します。
      年間の季節変動や週ごとのパターン、さらに日単位の変動を示しています。

これらのグラフは、時系列データの予測に使用されるProphetモデルの挙動や、データが持つトレンド季節性などを視覚的に理解するのに役立ちます。