目的変数は標準化する?標準化が予測精度と学習時間に与える影響

Python,データサイエンス,機械学習,統計

回帰分析を題材に、特徴量と目的変数それぞれを標準化するかしないかでどのように結果が変わるかを確認してみます。

なお、標準化の定義は以下の式の通り、平均0分散1にスケーリングするものとします。また、テストデータに対する標準化には学習データで計算された統計量を使うものとします。

$$z_i = \frac{x_i – (xの標本平均)}{\sqrt{xの不偏分散}}$$

使用データ、モデル

カリフォルニアの住宅価格データを使います。このデータはブロックと呼ばれる単位で集計された価格の中央値(今回で目的変数として扱う)と、部屋数の中央値などの8つの特徴量からなる20,640サンプルのデータです。モデルは、構造のバリエーションを考えて以下の4つを使います。なお、RidgeとLightGBMのハイパラに関してはデフォルトを使い、NNはエポック数10にしています。

  • 線型回帰(正則化なし)
  • Ridge 回帰
  • LightGBM
  • 3層Neural Network(ReLU, 隠れ層ユニット数は全て30)

DNNはKeras、それ以外はscikit-learnのパッケージを使用しています。

実験の設定

それぞれのモデルに対し、特徴量を標準化するorしない×目的変数を標準化するorしないの合計4パターンのデータを学習・予測させます。標準化パターンごとに、以下の項目を比較します。

  • RMSE
  • MAPE
  • 学習にかかった時間

カリフォルニア住宅価格データは2万行ほどサンプルがありますが、データ数が少ない場合と十分にある場合を考慮し、サンプルサイズを50, 1万の二通りでやります(2万にしないのは学習に時間がかかりすぎるため)。

それぞれの設定で、学習データとテストデータを7:3で分割し、テストデータに対する予測結果と学習にかかった時間を比較します。

なお、データによるばらつきを考慮するため、「データ分割→学習→予測」のサイクルを30回繰り返し、その平均と標準誤差で結果を考察します。

\(N=50\)の場合

モデルごとにRMSE, MAPE, 学習にかかった時間(time)を可視化します。それぞれの項目はさらに、

  • 特徴量のみ標準化(X)
  • 目的変数のみ標準化(y)
  • 特徴と目的変数を標準化(Xとy)
  • 標準化なし(なし)

という処理ごとの結果に分かれています。

線型回帰

RMSE, MAPEに関しては完全に同じ値です、線型回帰は標準化が予測結果に影響を与えることはありません。例えば、変数\(X_1\)とそれに対応する回帰係数\(\beta_1\)について、\(X_1\)が100でも10でも、それに合わせて\(\beta_1\)のスケールも変化するためです。ただし、実行時間に関しては非常に若干ではありますが、特徴量の標準化が効いているようです。なんとなくな推測ですが、最小二乗法の解に登場する共分散行列の逆行列の計算に SVD が使われており、その際に共分散行列の要素の値が小さいところでまとまっていると高速に収束する、ということなのではと思っています。

Ridge

精度に関しては、Xを標準化した方が若干精度が改善しています。これは、正則化なしの線型回帰と異なり、Ridge の場合は各偏回帰係数の大きさに罰則が課せられるため、スケールが揃っていないと不当に縮小推定されてしまうことが原因として挙げられます。たとえば\(X_1\)の値は900~1100をとるのに対し、\(X_2\)の値は-1~1をとるとします。この時、二つの変数が共にyに対して同程度に影響するのであれば、それぞれの回帰係数\(\beta_1, \beta_2\)は\(\beta_1 < \beta_2\)となりそうです。しかし、罰則は平等に行われるため、\(\beta_2\)が過小評価されてしまう、ということです。Ridgeの場合の推定方法は正則化なしの線型回帰と同じようなものなので、学習時間の差も似たような傾向になっています。

LightGBM

標標準化によって精度、実行時間ともにほとんど変わりません。ツリー系のモデルは各変数に対して閾値ベースで学習され、スケール違いで変数同士が影響しあうことがないためだと考えられます。

NN

特徴量の標準化によって精度が大幅に改善しています。これは、特徴量を標準化していない場合、ネットワーク中の重みの大きさがバラバラで、誤差逆伝播法によるパラメータ更新が非効率になってしまうためだと考えられます。目的変数の標準化に関しては、一歳しないものと比べると分散は小さくなっていそうです。学習時間に関してはエポック数が10固定で、どのケースでも最大エポック分学習が回るので、ほとんど変わらないという結果になっているのかと思います。

\(N=10000\)の場合

線型回帰

精度に関してはサンプルサイズを変えても前処理による影響はありません。時間に関しては結構バラついてきました。計算時間に関しては、\(N=30\)の場合と概ね同じ傾向ですが、なぜか分散が異常に大きくなっています。

Ridge

サンプルサイズが大きい場合、Ridge正則化の影響が小さくなるためか、精度はほとんど正則化なしの線型回帰と一緒です。驚くべきは計算時間で、\(N=50\)の場合とほとんど結果が変わっていません!原因についてはちょっとよくわかりませんが、どなたか教えてください。

LightGBM

サンプルサイズに関わらず、やはり標準化の影響はどのケースでも受けていないようです。ついでにいうと分散も小さいですね。

NN

\(N=50\)の場合と同様、精度に関してはやはり標準化の影響を最も大きく受けています。一方で、目的変数だけを標準化するくらいならしないほうがマシ、という結果になりました。これに関してより詳細な分析は行ってませんが、過学習気味になっているため、学習データの情報でテストデータに対する予測値の標準化を行うところでおかしなことになっているんじゃないかなと思っています(よくわかっていません、教えてください)。学習時間もサンプルサイズが小さい時と同様の傾向で、標準化による影響が小さいです。

まとめ

  • 線型回帰(正則化なし)
    • 特徴量の標準化
      • 予測精度には影響なし、学習時間に関しては若干スピードが上がりそう
    • 目的変数の標準化
      • 効果なし

  • Ridge 回帰
    • 特徴量の標準化
      • サンプルサイズが大きくなければ、予測精度に影響あるので、正則化が効くような設定なら必ず正則化しましょう。学習時間に関しては若干スピードが上がりそう。
    • 目的変数の標準化
      • 効果なし

  • LightGBM
    • 特徴量、目的変数のどちらとも、標準化しても精度、学習時間ともに影響なさそう。

  • 3層Neural Network(ReLU, 隠れ層ユニット数は全て30)
    • 特徴量の標準化
      • 予測精度に大幅に影響、必ず標準化しましょう。時間に関しては、今回の設定では変わらなかったが、学習の仕方(エポック数、バッチサイズなどもろもろ)によっては変わる可能性が大いにあります。
    • 目的変数の標準化
      • 目的変数のみを標準化すると精度が悪化、学習時間はほぼ変わらず。

全体を通して、特徴量に関しては標準化したほうが良いケースが多く、目的変数に関しては標準化しなくてもいいかもしれないという結果となりました。今回は一つのデータセットのみを用いて検証しましたが、特にDNNはデータによって結果は大きく変わってくるかと思います。

Follow me!