回帰モデルでもクラス分類モデルでも、モデルを構築したら、そのモデルでどれくらいの外挿ができるか、つまりモデルの適用範囲 (Applicability Domain, AD) の外をどのくらい予測できるのか、はとても大事です。AD はモデルが本来の性能を発揮できるデータ領域です。AD についての詳細はこちらをご覧ください。
モデルは、トレーニングデータに近いサンプルしか本来の性能では予測できませんが、モデルでやりたいことは外挿です。トレーニングデータにおける目的変数の最大値を上回る、もしくは最小値を下回る、サンプルがほしいわけです。
推定するサンプルがトレーニングデータから離れるほど、モデルの推定性能は下がる一方で、目的変数の予測値が良好なサンプルは、トレーニングデータから離れたところにある、といった難しさがあります。難しいのは仕方がないのですが、それでも、外挿したときに、つまり推定するサンプルがトレーニングデータから離れたときに、モデルがどれくらいの推定性能になるのかは、押さえておきたいです。推定性能によって、どれくらい外挿できるか検討できるためです。
では、AD の外におけるモデルの推定性能をどのように検証すればよいでしょうか。
方針は、トレーニングデータとテストデータを意図的に作成する、です。たとえば、回帰分析のときに
目的変数の値が一部の範囲に入るサンプルのみをトレーニングデータにする
です。すべてのサンプルにおいて、目的変数の範囲が 1 から 10 であり、目的変数の値が 10 より大きくなるようなサンプルを設計したいとします。このとき、目的変数の値が 1 から 9 までのサンプルのみをトレーニングデータに、それ以外のサンプル (目的変数の値が 9 以上のサンプル) をテストデータとします。
こうすることで、目的変数の値がトレーニングデータ以上になるようなサンプルを、どの程度の精度で推定できるか検証できます。さらに細かく、サンプルがトレーニングデータから離れるほど、そして目的変数の値が 9 より大きくなるほど、どのような傾向で推定誤差が大きくなるか、についても検証できます。このような検証の方法として、上の2つ目のリンクにおける、モデルとの距離 (Distance to Model) が参考になります。
ただし、このやり方は回帰分析のみに有効であり、クラス分類ではできません。クラス分類でもできる検証方法として、
モデルとの距離が小さいサンプルのみをトレーニングデータにする
というのもあります。たとえば、データ密度の高い領域にあるサンプルのみをトレーニングデータにして、それ以外のサンプル (データ密度が低い領域にあるサンプル) をテストデータにします。
こうすることで、モデルとの距離が大きいサンプルを、たとえばデータ密度が低い領域 (つまり外挿領域) にあるサンプルを、どのくらいの性能で推定できるか検証できます。
あとは、データの種類によって異なる検証方法があります。
たとえば、化学構造のデータの場合は、構成する原子の種類でトレーニングデータを制限する方法です。C, H, O のみで構成される化学構造のサンプルをトレーニングデータとして、それ以外の化学構造のサンプルをテストデータとします。このようにすることで、新たな原子の種類を含む化学構造に対する推定性能を検証できます。
時系列データの場合は、ある時刻を基準にして、それより過去のデータをトレーニングデータ、未来のデータをテストデータとする方法があります。これにより、モデル構築時のデータより未来のデータを、どれくらいの性能で推定できるか、検証できます。
もちろん、AD の外をどれくらいの性能で推定できるか検証したあとは、すべてのサンプルを用いてモデルを構築しなおします。ご注意ください。
以上です。
質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。