ビジネス実務で昔からあるデータ活用の1つが時系列予測です。
来月や来年の売上を予測したいであるとか、明日や来週のPVを予測したいであるとか、1時間先や明日の電力消費量を予測したいであるとか、時間という概念の紐付いた、時系列予測は昔からあります。
このような予測をするために、時系列予測モデルを構築し活用するケースが多いです。
例えば、4月の売上を予測するとき、昨年の4月の売上を参考に予測する、というのも、ある種の時系列予測モデルと言えます。
このような時系列予測モデルを使ったとき、予測対象が複数(例:1日先から7日先、来月から1年間、など)になることが多いです。
今回は、「時系列予測モデルの複数先予測(Multi-Step ahead prediction)」というお話しをします。
Contents
時系列予測
時系列予測モデルを検討するとき、運用時の予測対象期間と学習データ期間を明確にしておく必要があります。
- 予測時点
- 学習データ期間
- 予測対象期間
実務運用を見据えて明確にします。
ある企業のあるサービスの見込み顧客数予測の例ですと……
- 予測時点:各月の第3周の金曜日
- 学習データ期間:予測時点の前日を含む90日間
- 予測対象期間:翌月(日単位)、翌月から3ヶ月間(月単位)
この企業のあるサービス(一般消費者向けのサービス)の売上は、見込み顧客数と非常に相関しています。見込み顧客数を増やすために色々なマーケティング施策を実施しており、計画していたマーケティング施策をもとに、翌月の日単位の予測と、翌月から3ヶ月月間の予測を実施しています。
見込み顧客予測の結果が芳しくないとき、マーケティング施策の修正のための検討を、各月の第3周の金曜日に実施します。
例えば、その月が30日間で第3周の金曜日が28日の場合、翌月が1日は4期先予測、2日は5期先予測、…と複数先予測をすることになります。
複数先予測
時系列予測モデルの基本は1期先予測です。
日単位であると想定すると、1期先予測とは、学習データ期間の次の日です。2期先予測とは、学習データ期間の翌々日です。3期先予測とは、学習データ期間の翌翌々日です。
ここで1つ問題が起こります。
1期先予測の予測モデルは、例えば日単位の場合、前日までの学習データ期間のデータを使いモデル構築します。
しかし、2期先予測の予測モデルの場合、そうは行きません。2期先予測対象日の前日は、学習データ期間ではなく、1期先予測対象日だからです。
どうすればいいでしょうか?
複数先予測を実現する時系列予測モデル群
複数先予測を実現する方法がいくつかあります。
よくある方法が以下の4つです。
- n期先予測モデルを個々に作る方法(観測データのみ利用)
- 1期先予測モデルを1つ作り再帰的に利用する方法
- n期先予測モデルを個々に作る方法(観測データ+予測データ)
- 時系列の多変量予測モデルを1つ作る方法
n期先予測モデルを個々に作る方法(観測データのみ利用)
一番わかり易いのが、n期先別に個々に予測モデルを構築する方法です。
学習データ期間は同じで……
- 1期先予測モデル:例えば、1期先予測対象日前の過去90日間のデータを使う
- 2期先予測モデル:例えば、1期先予測対象日前の過去90日間のデータを使う
- 3期先予測モデル:例えば、1期先予測対象日前の過去90日間のデータを使う
……と必要なだけ作ります。
翌月を日単位で予測するならば、31個の予測モデルを準備しておく、ということです。
ただ、例えば30期先予測モデルだと、学習データ期間が離れすぎている、という気持ち悪さがあります。
1期先予測モデルを1つ作り再帰的に利用する方法
1期先予測モデルを使いまわして、複数先予測を実現しようという考え方もあります。
例えば、過去90日間のデータを使う予測モデルの場合、利用するデータ期間をスライドさせながら……
- 1期先予測:1期先予測対象日前の過去90日間のデータを使う
- 2期先予測:1期先予測対象日前の過去89日間のデータ+前日の予測値のデータを使う
- 3期先予測:1期先予測対象日前の過去88日間のデータ+前日と前々日の予測値のデータを使う
……といった感じで、予測データを使いながら予測を実施します。
予測モデルが1つで済むというのが利点です。ただ、2期先予測、3期先予測、……をするとき、その前までの予測値を過去の観測データの代わりに予測データを利用するという気持ち悪さは生まれます。
n期先予測モデルを個々に作る方法(観測データ+予測データ)
その前までの予測値を過去データの代わりに利用する、ということを前提にした予測モデルを作ったほうがいのでは、という考え方もあります。
というこことで、1期先予測モデルを使いまわすのではなく、学習データ期間を変化させながらn期先別に個々に予測モデルを構築しようとなります。
学習データ期間を変化させながら……
- 1期先予測モデル:例えば、1期先予測対象日前の過去90日間のデータを使う
- 2期先予測モデル:例えば、1期先予測対象日前の過去89日間のデータ+前日の予測値のデータを使う
- 3期先予測モデル:例えば、1期先予測対象日前の過去88日間のデータ+前日と前々日の予測値のデータを使う
……と必要なだけ作ります。
翌月を日単位で予測するならば、31個の予測モデルを準備しておく、ということです。
時系列の多変量予測モデルを1つ作る方法
以上の3つの時系列予測モデルは、単変量(1変量)の時系列予測モデルを前提にしています。
単変量(1変量)ではなく、多変量の時系列予測モデルを構築すればいいのでは、という考え方もあります。
多変量とは、(1期先、2期先、3期先、……)というベクトルにする、ということです。
学習データ期間が、1期先、2期先、3期先、…とも同じになります。
時系列予測モデル
時系列予測モデルで利用できる数理モデルは色々あります。
例えば、以下のような時系列に特化した数理モデルもあります。
- 指数平滑化モデル
- ARIMAモデル(SARIMAX、VARIMAを含む)
- 状態空間モデル
- Prophetモデル
- 時系列系のニューラルネットワークモデル(RNN,LSTM,GRUなど)
時系列に特化した数理モデルは、多くのツールで再帰的に複数先予測を実施してくれる機能がついている場合が多いです。
通常のテーブルデータ系の数理モデル(線形回帰やGLMM、階層線形、決定木、ランダムフォレスト、XGBoostなど)も、時系列データから時系列特徴量を生成し説明変数とすることで利用できます。
テーブルデータ系の数理モデル(線形回帰やGLMM、階層線形、決定木、ランダムフォレスト、XGBoostなど)で時系列予測を実施する場合、多くのツールには再帰的に複数先予測を実施してくれる機能はないので、自分自身でなんとかする必要があります。
今回のまとめ
今回は、「時系列予測モデルの複数先予測(Multi-Step ahead prediction)」というお話しをしました。
ビジネス実務で昔からあるデータ活用の1つが時系列予測です。
来月や来年の売上を予測したいであるとか、明日や来週のPVを予測したいであるとか、1時間先や明日の電力消費量を予測したいであるとか、時間という概念の紐付いた、時系列予測は昔からあります。
このような予測をするために、時系列予測モデルを構築し活用するケースが多いです。
例えば、4月の売上を予測するとき、昨年の4月の売上を参考に予測する、というのも、ある種の時系列予測モデルと言えます。
このような時系列予測モデルを使ったとき、予測対象が複数(例:1日先から7日先、来月から1年間、など)になることが多いです。
時系列予測モデルを構築するとき、参考にして頂ければと思います。