📘

学習用データと予測用データの違いと準備方法

学習用データと予測用データの違いと準備方法

Node-AI で作成したモデルを実業務の課題に適用するには、新たなデータに対して 予測 (推論とも言う)を行うことにより未来の値を取得する必要があります。
予測を行うには予測カード(📘モデル活用 - 予測 を参照)を使用するか、リアルタイム性が求められる場合は Node-AI モデルAPIサービス(📓Node-AI モデルAPIサービスの概要 を参照)や Node-AI Berry の利用(📙Node-AI Berryの概要 を参照)を検討します。
予測カードの利用イメージについては こちらの記事 もあわせてご確認ください。
ここでは予測カードを利用して予測を行う場合の、学習用データと予測用データの準備の方法について説明します。
 

データ形式とデータ量

学習用データと予測用データはどちらも 📘Node-AIで扱える時系列データの形式 である必要があります。
ただし以下の違いがあります。
  • 学習用データには予測対象である 目的変数 のカラムが必要であるが、予測用データには目的変数カラムは含まれなくてよい。
    • ただし予測用データに目的変数カラムが含まれない場合は、予測カードにおける可視化結果に目的変数の値が表示されません。
  • 学習用データは時間窓切出し(📘モデル準備 - 時間窓切り出し を参照)で設定する 窓幅 Mよりも十分大きなデータ量 が必要であるが、予測用データには 最低窓幅M のデータがあればよい。
    • ただし、Node-AI では 未来Nの1時点の値を予測する ため、現在時刻から未来Nまでの連続的な区間の予測値が必要な場合、予測データは M+N のデータ量が必要です。
    • また、予測カードにおける可視化結果を直感的に理解するには、ある程度過去のデータも含んでいるほうがよい場合があります。
これらをまとめると以下のようになります。
要件学習用データ予測用データ
目的変数カラム必要任意
データ量Mより十分大きな量最低M
例として、1日ごとのリンゴの売上数をデータとし、7日後のりんごの売上数を予測したいとします。
りんごの売上数はおよそ4週間前から現在の売上数により予測できると考えたあなたは、時間窓切り出しの窓幅Mを28と設定しました。
このとき、現在を 2023/04/01 だとすると以下のような学習用データが考えられます。
Dateりんごの売上数
2022/04/01320
2022/04/02145
2023/03/30213
2023/03/31198
この1年分の学習用データを Node-AI にアップロードし、学習モデルの作成と評価まで実施します。
学習時、評価時には 2023/03/31 までの目的変数の値を正解値として構成されたデータによりモデルが作成されます。
次に、知りたいのは7日後の未来(2023/04/07)の値であるため、予測用のデータは以下のようなデータを用意します。
Dateりんごの売上数
2023/03/03132
2023/03/04165
2023/03/30213
2023/03/31198
この場合は “りんごの売上数” が目的変数であると同時に説明変数にもなっているため、予測用のデータにも必須となります。
学習用データと異なる点として、予測用データは窓幅M(28日分)のデータのみでよいということです。
予測カードの実行により、以下のデータが取得できます。
Date実測値予測値
2023/03/03132
2023/03/04165
2023/03/30213
2023/03/31198
2023/04/01
2023/04/02
2023/04/03
2023/04/04
2023/04/05
2023/04/06
2023/04/07281
データ量がちょうど窓幅Mであるため、7日後の未来の予測値だけが取得できます。
2023/04/01~04/06 の予測値も欲しい場合、予測用データをさらに7日分増やし 2023/02/25 からのデータとします。
このとき予測カードにより以下が得られます。
Date実測値予測値
2023/02/25281
2023/02/26190
2023/03/30213230
2023/03/31198188
2023/04/01221
2023/04/02137
2023/04/03110
2023/04/04223
2023/04/05331
2023/04/06187
2023/04/07281
この4/1~4/7のりんごの売上数の予測値に基づき、ビジネス課題の解決に使用します。
 

学習と予測のライフサイクル

これまでの手順で、予測により未来の値を取得し、業務課題に適用することで何らかのインサイトを得たり業務フローの改善ができたとします。
しかし、一度予測をしてしまえば終わりということはなく、継続的に未来を予測し続けることを検討する段階に移ります。
前項の “りんごの売上数” のデータを例に考えましょう。
あなたは1週間後までのりんごの売上数の予測値を用いて発注量を最適化する改善案を実施し、実際に効果が得られることを確認したとします。
発注量の最適化は1週間単位で行えばよいとすると、次に予測を実行すべきなのは4/7までのデータが揃った段階となります。
4/8の時点では4/7のデータが得られているため、以下のようなデータが準備できます。
Dateりんごの売上数
2023/02/25281
2023/02/26190
2023/03/30213
2023/03/31198
2023/04/01210
2023/04/02142
2023/04/03118
2023/04/04231
2023/04/05307
2023/04/06195
2023/04/07266
4/1~4/7の売上数は、予測した値ではなく実際に売り上げた個数であることに注意してください。
予測モデルの予測値には必ず誤差が含まれるため、データとしては実測値を投入する必要があります。
Date実測値予測値
2023/02/25281
2023/02/26190
2023/03/30213230
2023/03/31198188
2023/04/01210221
2023/04/02142137
2023/04/03118110
2023/04/04231223
2023/04/05307331
2023/04/06195187
2023/04/07266281
2023/04/08156
2023/04/09271
2023/04/10229
2023/04/11167
2023/04/12335
2023/04/13267
2023/04/14312
4/8~4/14の売上数の予測値が得られました。学習したモデルをそのまま使う場合は、4/1~4/7の予測値は変わっていません。
さて、この方法でも繰り返し予測を行うことで継続的に業務適用はできますが、「4/7までの実測値は得られているので、4/7までのデータを使ってモデルを再度学習させればより精度が出るのではないか」という仮説が立てられます。
この仮説は正しい場合もあれば、誤っている場合もあります。一般にデータ量を増やせばモデルの精度は上がる可能性はありますが、それはデータに依存しています。
仮に4/7までのデータを使って再学習したとしても、4/1~4/7のデータが特殊な特徴を持っているかもしれません。
例えば4/1~4/3の期間に、これまで実施したことがない大規模セールを打っていたとしましょう。今後このような同様のセールを行わないのであれば、学習用データに含めることでノイズとなる可能性があります。
一方、これは一つの考え方に過ぎず、「セールを打つ」という特徴を新たに説明変数として追加することの契機であるかもしれません。
このように、学習用データと予測用データは常にアップデートするかを検討しながら継続的にモデルの作成と予測の実行を繰り返す必要があります。