最近、ビジネスの世界で、売上などの時系列データを使い予測モデルを構築し、近未来を予測しながらビジネス活動する人や組織が増えてきました。
ただ、予測モデルを構築するとき……
- どのモデル(アルゴリズム)がいいのか?
- どの説明変数Xの組み合わせがいいのか?
- どのハイパーパラメータの値の組み合わせがいいのか?
……は、モデル構築前に通常はわかりません。
そのため、色々な組み合わせパターンで試す必要があります。
試すとき、予測モデルを構築するために利用するデータセットを、「訓練データ」と「検証データ」します。
色々なパターン(モデルと説明変数Xとハイパーパラメータの値などの組み合わせ)で、「訓練データ」で予測モデルを学習し求め「検証データ」で検証し、より良いパターンを探索します。
ここで、データセットを「訓練データ」と「検証データ」に分割しチューニングする場合、どう分割するのかという問題があります。
そのやり方の1つが、クロスバリデーション法です。
今回は、「時系列データに対するクロスバリデーション法」というお話しをします。
クロスバリデーション法とは?
クロスバリデーション法とは、データセットを複数に分割し、「訓練データ」による予測モデルの学習と「検証データ」による評価を、複数回実施する方法です。
例えば、データセットをランダムに10個に分けます。
このとき、「訓練データ」と「検証データ」のデータセットの組み合わせを10セット作ります。
それぞれのセットで予測モデルを学習し評価することで、個々の評価結果を出します。
最終的にその評価結果を取りまとめ総合評価結果とします。
クロスバリデーション法のイメージ
もう少し分かりやすく説明します。
1セット目です。
10分割したデータの1つを「検証データ」とします。それ以外の9個のデータを「訓練データ」とします。
この「訓練データ」で予測モデルを学習し、「検証データ」を使い評価します。
2セット目です。
10分割したデータの中から、1セット目と異なる「検証データ」を1つ選択し「検証データ」とします。それ以外の9個のデータを「訓練データ」とします。
この「訓練データ」で予測モデルを学習し、「検証データ」を使い評価します。
このような感じで、3セット目以降も同様に「訓練データ」による予測モデルの学習と「検証データ」による評価を実施します。
最終的に、10個の評価結果が手に入ります。
多くの場合、評価結果の平均を取り総合評価とします。
もちろん、平均ではなく最大値や最小値などを求め、「最悪のケース」を総合評価とすることもあります。
そのまま時系列データに適用したとき起こる問題
今説明したクロスバリデーション法は、時間軸を考慮した予測モデルのチューニングをするとき問題が起きます。
「訓練データ」は「検証データ」よりも時間的に過去のデータである必要があります。
ランダムに分割すると「過去のデータで予測モデルを学習し、未来の目的変数yを予測する」という前提を満たさない可能性が高いからです。
そのため、ある時点で2つにデータセットを分割し、時間的に前のデータを「訓練データ」 、時間的に後のデータを「検証データ」とします。
時系列データに対するクロスバリデーション法
クロスバリデーション法は複数の「訓練データ」と「検証データ」のセットを準備し、それぞれのセットで予測モデルを学習し評価し、最終的にその評価結果を取りまとめ総合評価結果とします。
時系列データの場合には、次のように「訓練データ」と「検証データ」を分割する時点を複数設け、その時点ごとに「訓練データ」と「検証データ」のセットを作ります。
訓練データの期間を伸ばしていくエクスパディング型と、訓練データの期間を常に一定とするローリング型の2通りの方法があります。
実務で予測モデルを構築し活用するとき、どちらの使い方に近いかで考えればいいと思います。
- エクステパディング型:実務で予測モデルを構築するとき、手に入る過去データをできるだけ使うケース
- ローリング型:実務で予測モデルを構築するとき、ある一定の期間の過去データを使うケース(もしくは、古いデータを定期的に破棄するケース)
今回のまとめ
今回は、「時系列データに対するクロスバリデーション法」というお話しをしました。
最近、ビジネスの世界で、売上などの時系列データを使い予測モデルを構築し、近未来を予測しながらビジネス活動する人や組織が増えてきました。
ただ、予測モデルを構築するとき……
- どのモデル(アルゴリズム)がいいのか?
- どの説明変数Xの組み合わせがいいのか?
- どのハイパーパラメータの値の組み合わせがいいのか?
……は、モデル構築前に通常はわかりません。
そのため、色々な組み合わせパターンで試す必要があります。
そのやり方の1つが、クロスバリデーション法です。
ただ、通常のテーブルデータに実施するクロスバリデーション法を、そのまま時系列データで実施すると問題が起こります。
「過去のデータで予測モデルを学習し、未来の目的変数yを予測する」という前提を満たさない可能性が高いからです。
そのため、時系列データで構築する予測モデルの場合、時系列データに対するクロスバリデーション法を使っていきましょう。