目的変数 Y と説明変数 X との間で回帰モデル Y = f(X) を構築するとき、Y が物性・活性などの何らかの測定値である場合をはじめとして、一般的には X の値が全く同じであっても、Y は測定誤差などによってばらつきます。回帰分析では基本的に、Y の実測値と推定値との間の誤差を 0 にするようにモデルが構築されますので、本来であれば Y には測定誤差が含まれるため誤差が 0 であるモデルはあり得ない状況でも、結果的に誤差が 0 になる回帰モデルが構築されることが起こります。回帰モデルとして適切ではありませんので、Y の測定誤差などのばらつきを考慮しながら、回帰モデルを構築したほうがよいと考えられます。
事前に Y のばらつきが分かっているとき
たとえば、事前に Y の測定誤差の標準偏差などの Y のばらつきが分かっているときは、その情報を積極的に使うとよいでしょう。たとえばガウス過程回帰 (Gaussian Process Regression, GPR) では
Y の測定誤差の分散を、精度 β によって考慮できます。β = 1/(測定誤差の分散) ですので、そのように β を設定して GPR モデルを構築します。
サポートベクター回帰 (Support Vector Regression, SVR) では、
ε として設定します。SVR では、−ε から +ε までの Y の誤差は 0 として扱われますので、ε で測定誤差の最大値を設定すれば、そのような測定誤差に依存しない回帰モデルの構築が可能になります。ε = 測定誤差の最大値 として設定して SVR モデルを構築します。
以上の方法では、回帰分析手法が GPR や SVR に限られてしまったり、すべてのサンプルで Y の測定誤差のばらつきは等しいと仮定する必要があったりします。任意の回帰分析手法を使用したり、サンプルごとに Y の測定誤差のばらつきが異なったりするときは、元のデータセットを次のように変換するとよいです。
まず、サンプルごとに Y の値とその標準偏差もしくは分散を割り当てます。次に、サンプルごとに Y の分布を正規分布と仮定して、Y の値を正規分布の平均値、Y の分散を正規分布の分散として用いて、その正規分布に従うようにサンプルを生成します。たとえばサンプルごとに 30 サンプルや 100 サンプルなど、X の値はまったく同じで、Y の値だけ異なるサンプルを生成するわけです。もともと 50 サンプルあり、サンプルごとに 30 サンプルを生成したとすると、結果的に 50 × 30 = 1500 サンプルになります。そして、このデータセット使って、回帰モデルを構築します。
もともと X の値が同じサンプルにおいて、複数の Y の測定値があるときには、それらすべてをサンプルとして用いてもよいですし、複数の Y の測定値で標準偏差を計算して、上の方法を用いてもよいです。
この方法でモデル構築をするときは、モデルの検証に注意する必要があります。
トレーニングデータとテストデータにランダムに分割するとき、サンプル生成前にトレーニングデータとテストデータに分けてから、トレーニングデータとテストデータのそれぞれでサンプル生成をするようにしましょう。たとえば、もともとの 50 サンプルを、トレーニングデータ 40 サンプルとテストデータ 10 サンプルに分けてから、それぞれサンプルごとに 30 サンプル生成します。結果的に、トレーニングデータが 40 × 30 = 1200 サンプル、テストデータが 10 × 30 = 300 サンプルになります。
サンプルを生成してからトレーニングデータとテストデータにランダムに分割してしまうと、オリジナルのあるサンプルにおいて、それに基づいて生成したサンプルが、トレーニングデータにもテストデータにも両方に含まれることになります。そのため、テストデータのそのサンプルを簡単に予測できてしまい、オーバーフィッティング (過学習) を防ぐことができません。事前にサンプルをトレーニングデータとテストデータに分けてから、それぞれサンプル生成をするようにしましょう。
以上のように、測定誤差などの Y のばらつきがあり、それが事前に分かっているときには、それを考慮してモデリングするとよいと思います。
Y のばらつきが分からないとき
Y のばらつきに関する情報がありませんので、それを利用してモデリングすることはできません。このようなときは、サンプルごとに予測値を計算するだけでなく、予測値の標準偏差も計算するようにするとよいです。このような回帰分析を、conformal regression と呼んだりします。モデルの適用範囲 (Applicability Domain, AD) を考慮した回帰分析、と言い換えることもできます。
予測値の標準偏差を計算する代表的な方法はアンサンブル学習です。複数の回帰モデルを構築することで、あるサンプルの Y の値を予測するときには、回帰モデルの数だけ予測値を計算できるため、それらの平均値だけでなく標準偏差を計算できます。他にも、標準偏差を予測するモデルを別に構築したり、トレーニングデータからの平均からの距離に基づいて標準偏差を計算したり、主成分分析や t-SNE などで低次元化してから周辺のサンプルで標準偏差を計算したりする、いろいろな方法があります。
以上です。
質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。