時系列データを学習用データと検証用データに分割したい

需要予測のように、過去の時系列データから未来の時系列データを予測する場合があります。その際、時系列データを特定の日時を境にして学習用と検証用に分割する方法を説明します。

説明

需要予測や株価予測、異常検知などの時系列予測では、一般的に過去のデータを用いて学習し、未来のデータを予測します。

image.png

このような時系列データの予測では、予測精度を確認するために、既知のデータの一部を過去のデータとして学習し、その後を未来のデータとして検証することが一般的です。実際のデータを使用して学習モデルの精度を確認し、同じ学習方法で未知の未来データに対する予測モデルを作成します。

MSIPでは、学習と検証のためにデータを分割をするための データ分割アイコン が提供されていますが、このアイコンはデータをランダムに分割します。したがって、時系列のように時間的に連続するデータを考慮した分割はおこなえません。
そこで、ここでは時系列を考慮した分割方法として グルーピングアイコン の使用を説明します。

対象となるデータは、日時(datetime)型、日付(date)型、または連続した整数型の列を持つ時系列データです。

ここでは、以下のような日時型の列を持つデータを例にして、手順を示します。

image.png

上記のデータをグラフにした図が以下です。
ここでは、2020年9月より前を過去のデータとして、2020年9月以降を未来のデータとして扱います。

image.png

このデータはMSIPの「共有ワークスペース」 -> 「サンプル」 -> 「Alkano」 -> 「データ」にある、「センサーデータ.dft」というデータです。

使い方

まず、データを学習用と検証用に分割するために、2020年8月31日までデータに「学習用」、2020年9月1日以降のデータに「検証用」というラベルを付与します。

  1. データに グルーピングアイコン を接続します
  2. グルーピングアイコン の設定画面を開き、datetime型の行を選択します
  3. 「グループ名」の欄に「学習用」と入力し、「To」に分割したい日時を入力します
  4. 「グループ化されない項目のグループ名」の欄に「検証用」と入力します
  5. 実行ボタンを押します

image.png

これにより、「DateTime.Grp」列(元列名+Groupの意味)という新しい列が作成され、指定した日時以前の行には「学習用」、それ以降の行には「検証用」のラベルが付与されます。

image.png

その後、付与したラベルを元に、学習用データと検証用データに分割します。

  1. グルーピングアイコン行選択アイコン を接続します
  2. グルーピングアイコン の設定画面を開き、追加された[元の列名].Grpという列を選択します
  3. 「演算子」で「一致する」を選択し、「式」の欄で「学習用」にチェックを入れます
  4. 実行ボタンを押します

image.png

この操作により、指定した期間の学習用データのみが選択されます。同様に、「検証用」を指定して検証に使用するデータを選択することができます。

分析への応用

商品の需要予測などの場合、過去のデータを使用して学習し、未来の需要を予測することが一般的です。
しかし、未来の実際のデータが不明なため、作成したモデルの予測精度を評価することは困難です。
そこで、過去のデータを学習用としてモデルを構築し、その後を検証用として使用することで、モデルの有効性を評価します。
この方法により、実際の未来のデータとの予測の一致度を検証することが可能です。

商品の需要予測の分析方法については、攻略ガイド・テクニカルサンプルプロジェクトの時系列データ予測分析にサンプルプロジェクトおよび解説資料を公開しています。

このサンプルプロジェクトでは、将来の売上を予測するために、過去のデータを用いて 勾配ブースティング決定木アイコン で予測モデルを学習させています。
そして、作成した予測モデルの精度を確認するために、 予測精度検証アイコン に検証用データを入力しています。

image.png

時系列データを過去の学習用データと未来の検証用データに分割するテクニックは、このような場合に必要になります。

OnePoint

データを学習用と検証用に分割して評価する方法は、「ホールドアウト法」として知られています。
時系列データ以外の場合でも、同様の方法でモデルの評価をおこなうことができます。
また「学習用データと検証用データに分割してモデルの評価をしたい」で紹介している方法は、時系列データに対しても適用可能です。

関連項目