コンテンツにスキップ

第7章 時系列解析

1 prophet

気温など時間とともに変化するデータを線形回帰で予測することは困難です。季節ごとに周期的に変化したり、曜日により変化したりするためです。そこで、時系列解析専用のライブラリであるProphetを利用します。ProphetはMeta社より公開されているライブラリです。

Prophetは以下の計算式で予測を行います。

トレンド+季節など周期性の変化+イベント+ノイズ

トレンドは長期的な変化の方向性です。イベントは特定の休日などによる変化です。ノイズはその他の要因となります。

インストールを以下のように行います。

pip install prophet

2 データの読み込み

熊本市の気温データをダウンロードします。 過去10年間の熊本市の最高気温、最低気温を以下よりダウンロードしたkion.csvを使用します。

https://www.data.jma.go.jp/gmd/risk/obsdl/index.php

jikei.ipynb に記述します。

import pandas as pd

df = pd.read_csv("kion.csv")
df

3 モデルの構築と学習

prophetでは日付データの列を ds 、解析データの列を y という名前で指定します。 そこで、dfの列名を変更したdf2を作成します。

df2 = df.rename(columns={'年月日': 'ds', '最高気温': 'y'})
df2

では、モデルを構築します。Prophetをインポートし、インスタンスを生成したら、fitで学習させます。

from prophet import Prophet

model = Prophet()
model.fit(df2)

4 予測

予測を行うには、まず予測結果をいれるためのデータフレームを作成します。そのときに使用するのがmake_future_dataframeです。これで日数をperiodsで指定します。なお、月単位のデータの場合、freq='M' を指定します。

future = model.make_future_dataframe(periods=365*2)
future

予測はmodel.predictで行います。結果のうち、大事な列のみを表示します。

forecast = model.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']]    

yhat が予測値、yhat_lower が予測値の下限、yhat_upperが予測値の上限となります。

指定の日付のみを表示してみます。

forecast[forecast['ds']=="2025-03-24"]

5 グラフの表示

グラフで予測値、実測値を表示してみます。

fig1 = model.plot(forecast)

黒い点が実測値です。青い線が予測値です。どれだけモデルが一致しているかが分かります。

予測の内容別にグラフを表示します。

fig2 = model.plot_components(forecast)

trendは長期的な変化、weeklyは曜日毎の変化、yearlyは月ごとの変化となります。