LoginSignup
2
3

More than 3 years have passed since last update.

【機械学習】時系列データでのトレーニング/テストデータの作成で注意すべきこと

Last updated at Posted at 2020-06-04

はじめに

トレーニングデータ、テストデータに分割するときに、テストデータにトレーニングデータを含ませないのは機械学習の基本です。

しかし、時系列データだとその間違いは気付かないうちに起きやすいので、簡単に図でまとめてみました。

今回は、予測対象日から1日前〜3日前のデータを用いて予測するというケースについて考えます。

分かりやすさを考え、予測対象のデータ(目的変数)と予測に使うデータ(説明変数)は別種類のデータとし、さらに説明変数を1種類としました。

ダメな手順の例

  1. 予測に使うデータ(説明変数)を1〜3日分ずらし、1日前〜3日前の説明変数を作成する
  2. トレーニングデータ、テストデータに分割する

この順番に行うとどうなるでしょうか。

もちろん目的変数も時系列で変化しますが、注目すべき説明変数にアルファベットを付けました。

1の操作を行うと次の図のようになります。
06E6B9CA-4E42-4C58-9ED1-A0D6D43459BA.jpeg
エクセルの表のように時系列で並んでいるとお考えください。

さて、ここで2の操作を行うとどうなるでしょうか。
7C0D71B2-0F21-4E7C-8231-4410220AD40C.jpeg

(さすがにこんなところで分けることはないですが簡略化ということで・・・)

この後、欠損値を含む列を削除したとすると、確かに3日分の説明変数を用いて予測できそうです。
しかし、この説明変数をよくみると、トレーニングデータで使われてるBとCの値がテストデータにも含まれてしまっていることがわかります。これではダメですね。

正しい手順の例

これはずばり、ダメな手順の例の反転です。

  1. トレーニングデータ、テストデータに分割する
  2. 予測に使うデータ(説明変数)を1~3日分ずらし、1日前〜3日前の説明変数を作成する

こうして作成されるデータは次の図のようになります。
DBF32EE6-1E4B-4A8C-A7D8-DDFCADA342DD.jpeg

これでトレーニングデータとテストデータが重複なく分けられました!

分割してからずらしたため、欠損値がダメな手順より増えることになります。

欠損値がある列は削除するなどして、前処理を加えたあとモデル作成へと進んでください。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3