トラック運送の予測 Prophet

トラック運送の予測

トラック運送の予測を行うための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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import pandas as pd
from fbprophet import Prophet
import matplotlib.pyplot as plt

# 過去のトラック運送データ
data = {
'ds': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06', '2023-01-07', '2023-01-08', '2023-01-09', '2023-01-10'],
'y': [10, 20, 15, 25, 30, 35, 40, 45, 50, 55]
}

# Prophet用のデータフレームに変換
df = pd.DataFrame(data)
df['ds'] = pd.to_datetime(df['ds'])

# 祝日の情報を追加
holidays = pd.DataFrame({
'holiday': 'holiday',
'ds': pd.to_datetime(['2023-01-01', '2023-01-05']),
'lower_window': 0,
'upper_window': 1,
})

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

# 予測期間の設定
future = model.make_future_dataframe(periods=365)

# 予測の実行
forecast = model.predict(future)

# 予測結果のグラフ化
fig, ax = plt.subplots(figsize=(10, 6))
model.plot(forecast, ax=ax)
model.plot_components(forecast, ax=ax)
plt.title('Truck Delivery Forecast')
plt.xlabel('Date')
plt.ylabel('Delivery Volume')
plt.show()

上記のコードでは、過去のトラック運送データをdataとして定義し、Prophet用のデータフレームに変換しています。

また、holidaysというデータフレームを作成し、祝日の情報を追加しています。

モデルの作成時にholidaysを指定し、make_future_dataframeで予測期間を設定しています。

予測の実行後、plotメソッドを使用して予測結果をグラフ化しています。


さらに、plot_componentsメソッドを使用してトレンドや季節性の成分をグラフ化しています。

このサンプルコードを実行すると、トラック運送の予測結果がグラフとして表示されます。





グラフを通じて、予測値と実測値の関係やトレンドの変化、祝日の影響などを視覚的に確認することができます。

ご自身のデータに合わせて適切にカスタマイズし、トラック運送の予測結果をグラフ化してみてください。

ソースコード解説

コードの各部分について説明します。

1. ライブラリのインポート:

  • import pandas as pd: Pandasライブラリをインポートして、データ処理に使用します。
  • from prophet import Prophet: Prophetクラスをインポートして、予測モデルを構築・訓練するために使用します。
  • import matplotlib.pyplot as plt: Matplotlibライブラリをインポートして、グラフの描画に使用します。

2. 日次のデータ生成:

  • pd.date_range: 2020年1月1日から2023年1月1日までの日次の日付データを生成します。
  • pd.DataFrame: 生成した日付データとそのインデックスに対応する連番を含むDataFrameを作成します。
    列名は ‘ds’ と ‘y’ です。’ds’ は日付を、’y’ はその日の連番を表します。

3. モデルのインスタンス化:

  • model = Prophet(): Prophetモデルのインスタンスを作成します。

4. 季節性の追加:

  • model.add_seasonality: モデルに週次と年次の季節性を追加します。
    週次季節性の周期は7日で、フーリエオーダーが3です。
    年次季節性の周期は365.25日(うるう年を考慮)で、フーリエオーダーが10です。

5. 祝日の指定:

  • pd.DataFrame: ‘special_day’ という名前の祝日を指定します。
    祝日の日付は、2020年から2022年までの12月25日です。
    lower_windowupper_window は祝日の前後に適用するウィンドウの日数を指定します。
  • model.add_country_holidays: モデルに国に基づく祝日(この場合はアメリカ)を追加します。

6. データへの適合:

  • model.fit(data): モデルを提供されたデータに適合させます。

7. 予測期間の作成:

  • model.make_future_dataframe: 予測期間のDataFrameを生成します。
    ここでは365日(1年間)の期間を指定しています。

8. 予測の実行:

  • model.predict(future): 予測期間内の予測を実行し、予測結果を得ます。

9. 予測結果の可視化:

  • 予測結果を含むグラフを描画し、plt.titleplt.xlabel でタイトルと横軸ラベルを設定します。

10. 季節性の可視化:

  • model.plot_components: 季節性を構成要素ごとに可視化するグラフを作成します。

以上の手順によって、Prophetモデルを使用して時系列データの予測と可視化が行われます。

結果解説

表示される5つのグラフについて説明します。

1. 予測結果の折れ線グラフ(Forecast Plot):

このグラフは、実測値と予測値を折れ線で表示します。
実測値は黒い点で表され、予測値は青い折れ線で表されます。
このグラフを通じて、予測値が実測値にどれくらい近いかを確認することができます。

2. トレンドのグラフ(Trend Plot):

このグラフは、時間の経過に伴うデータのトレンドを示します。
予測値のトレンドは青い折れ線で表され、過去のデータから未来の予測までの傾向を示します。
このグラフを通じて、データの増減や変化の傾向を把握することができます。

3. 季節性のグラフ(Seasonality Plot):

このグラフは、データの季節性パターンを示します。
季節性は、周期的な変動やパターンを持つデータの特徴です。
Prophetは、季節性を捉えるためにフーリエ変換を使用しています。
このグラフを通じて、データの季節性の変化や周期性を確認することができます。

4. 週次季節性のグラフ(Weekly Seasonality Plot):

このグラフは、週ごとの季節性パターンを示します。
週次季節性は、週単位でのデータの変動やパターンを表します。
Prophetは、週次季節性を捉えるためにフーリエ変換を使用しています。
このグラフを通じて、週ごとのデータの変動や季節性のパターンを確認することができます。

5. 月次季節性のグラフ(Monthly Seasonality Plot):

このグラフは、月ごとの季節性パターンを示します。
月次季節性は、月単位でのデータの変動やパターンを表します。
Prophetは、月次季節性を捉えるためにフーリエ変換を使用しています。
このグラフを通じて、月ごとのデータの変動や季節性のパターンを確認することができます。

これらのグラフを組み合わせることで、データのトレンドや季節性、予測値の信頼性などを詳しく分析することができます。

また、グラフの表示によって、データの特徴や傾向を視覚的に把握することができます。