第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は月ごとの変化となります。