時系列分析とは

AI

時系列分析とは

時間に従って変化する事象のデータを時系列データ(time series data)と呼び、その分析を時系列分析(time series analysis)と言います。
例えば、気温や株価などが代表的な時系列データです。これらの時系列データを用いて将来の値を予測することで、事前に有益なアクションを取ることが可能になります。

簡易的な時系列分析

今回は、簡易的な時系列分析として Prophet を使って予測を立ててみます。
プログラムは、以下サイトにある Prophet 公式のサンプルプログラムを用いて確認していきます。
このプログラムでは、Prophetライブラリを使用してPeyton ManningのWikipediaページビュー数の時系列予測を行います。

⬜︎ データについて
– Peyton Manningという有名なアメフト選手のWikipediaのpv数
– データソース: https://en.wikipedia.org/wiki/Peyton_Manning

学習データの読み込み

# 必要なライブラリのインポート
import pandas as pd
from prophet import Prophet

# データの読み込み
df = pd.read_csv(
    "https://raw.githubusercontent.com/facebook/prophet/main/examples/example_wp_log_peyton_manning.csv"
)

データの確認

# データの最後の5行を確認
df.tail()
実行結果

モデルの学習

以下のようにインスタンス化して、読み込んだデータフレームを学習させます。

# モデルのインスタンス化・学習
m = Prophet()
m.fit(df)

未来予測の準備

# 未来の日付データを作成
future = m.make_future_dataframe(periods=365)
future.tail()
- make_future_dataframe(periods=365):365日分の未来の日付データを作成する関数
- m : すでに学習済みのProphetモデル
- periods=365 :「今日から365日先まで」の日付を生成するという意味
- 返却値 : ds(日付)列を持つpandas.DataFrame
- 予測値 : 元の学習データの最後の日付の次の日から始まる。
実行結果

「データの確認」で確認した日付から、365日後までの日付が生成されている。

予測の実行

# 予測の実行
forecast = m.predict(future)
forecast[["ds", "yhat", "yhat_lower", "yhat_upper"]].tail()
実行結果
- "ds" (Date Stamp)
意味: 日付(タイムスタンプ)
内容: 予測対象の日付

- "yhat" (Y Hat)
意味: 予測値(予測された値)
内容: モデルが予測したメインの値

- "yhat_lower" (Y Hat Lower)
意味: 予測の下限値
内容: 信頼区間の下限(不確実性を考慮した最小予測値)

- "yhat_upper" (Y Hat Upper)
意味: 予測の上限値
内容: 信頼区間の上限(不確実性を考慮した最大予測値)

可視化

Matplotlib ベースの可視化

Prophet では、Matplotlib と Plotly ベースでの可視化関数が組み込まれています。

# Matplotlibベースの予測結果の可視化
fig1 = m.plot(forecast)

2016 〜 2017 年の範囲でなんとなく過去の傾向から予測結果が出力されていることが確認できます。(黒:実績値、濃い青:予測値、薄い青:信頼区間)

Plotly ベースの可視化

Plotly で描画すると、Matplotlib の静的表示と比較して、動的に表示するグラフを描画することができます。(カーソルを合わせると、数値を動的に表示します。)

# plotly ベースで表示(グラフの動的表示)
from prophet.plot import plot_plotly, plot_components_plotly

fig_plotly = plot_plotly(m, forecast)
fig_plotly

まとめ

今回は、時系列分析とはいったいどのようなものなのかを整理しました。
時系列分析で比較的簡単に実装できる Prophet の使い方に関しても簡易的な予測に関して説明しました。その他にも祝日などの各国特有の影響因子を組み込むこともできるので、使用方法を確認してみてください。

コメント

タイトルとURLをコピーしました