説明変数 x と目的変数 y の間で構築されたモデル y = f(x) の目的として、未来の予測をすることもあります。未来のことはわからないとはいえ、モデルを構築できるということはデータがあるわけですから、データを用いて、構築されたモデルで本当に未来を予測できるのかを検証する必要があります。ただ、間違った検証の仕方をしてしまうと、モデルが精度よく未来予測できると誤解してしまう (その後、実際は未来予測できない) ことがあるため、本当に未来を予測できるのか、適切な方法で検証する必要があります。
一般的な分子設計、材料設計、ソフトセンサーにおけるモデルの検証の仕方とは異なることがあるため、注意が必要です。一般的には、例えばランダムにトレーニングデータとテストデータに分けますが、これは未来予測を検証するときには適していません。なぜならランダムに分けるということは、未来のデータがトレーニングデータに、過去のデータがトレーニングデータに含まれることがあるためです。未来のデータで、過去をいくら精度よく予測できたとしても、意味がないわけですね。では、どのように未来予測の検証をすればよいのでしょうか。
基本的なスタンスとしては、モデルが使われる状況に即したトレーニングデータとテストデータ、そして x と y を準備します。ただ具体的には、未来予測といってもいろいろな目的があるため、場合分けして考えてみます。
ある時刻までの x と y の値を用いてモデルを構築し、先の時刻の x の値を用いて y の値を予測したいとき
例えば、バッチプロセスの設計をすることなどがこれにあたります。ある日までに運転されたバッチのデータを用いてモデルを構築し、その次のバッチの (終点の) y が目標値になるように、バッチの運転条件、例えば温度プロファイルなどを設計するときなどです。
この場合にモデルを検証するとき、テストデータとしてもちろん y の値は使用できませんが、x の値は未来の値を使用することができます。バッチにおける実際の x の値から終点の y の予測ができるのならば、モデルの逆解析によって y が望ましい値になるような x の値を設計できるだろう、ということです。
このような状況のときは、ある時刻までの x と y をトレーニングデータにして、それ以降の時刻の x と y をテストデータにして、一般的な検証するのがよいでしょう。なお、バッチごとに x で表現できないような差異がないデータであれば、1バッチを1グループとして、グループごとにトレーニングデータとテストデータにランダムに分けても問題ないと思います。
ある時刻までの x と y の値を用いてモデルを構築し、その時刻までの x の値を用いて、その先の時刻の y の値を予測したいとき
本当の意味での “未来” 予測になります。この場合は、まず x と y の設定から注意しましょう。過去の x の値から、未来の y の値を予測できる仕組みにする必要があります (実際に予測できるモデルを構築できるかは別の話です)。一つのサンプルとしては、ある時刻における x の値と、それより先の時刻における y の値をセットとして準備します。その上で、y の時刻を基準として、ある時刻までのサンプルをトレーニングデータ、その先の時刻をテストデータとして、検証します。
なおこの場合、適応型ソフトセンサーを使用するときには注意が必要です。
すなわち、新たなサンプルを用いてモデルもしくはデータベースを更新するわけですが、「今」の時刻から先の時刻の y の値を予測するとき、「今」と仮定している時刻より未来の測定結果である y の値のサンプルは、まだ使用できません。この注意点は、ソフトセンサーにおいて y の測定時間がかかるときに、測定時間分の時間が経過しないと、そのサンプルを用いることができないことに似ています。このように、検証するときのサンプルの扱いについても注意する必要があります。
以上の内容に注意しながら、未来予測をするモデルの検証を適切に行うようにしましょう。
以上です。
質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。