二乗平均平方根誤差(RMSE)が最適ではない
ここまでのチューニングを経て精度は上がりましたが、予測結果のいびつさを改善する方法を考えます。

予測のいびつさ?

まず基準となるLinearRegressionの結果をみてください。 ここで赤い線上は完全に予測できていることを意味しますので、赤い線に予測結果が多く集まっていればいるほど良いモデルです。

linear_rmse.png

次に前回チューニングを行ったXGBRegressorの結果です。

xgb_rmse.png

このように可視化するとより分かりやすく精度が上がっていることが確認できます。

ただここで値が小さいほど(グラフの右下)予測値とのずれが大きいことに気づくかと思います。

この原因が損失関数として利用しているRMSE(二乗平均平方根誤差)にありそうなので調べてみましょう。

とにかくはじめます🍛

損失関数による違い

ここまでは損失関数としてRMSEを利用してきましたが、それ以外にも損失関数はたくさん存在します。1

略語名称意味
MAE平均絶対誤差予測差の絶対値の平均
MSE平均二乗誤差予測差の二乗値の平均
MSLE平均二乗対数誤差対数を取ったMSE
MED絶対誤差中央値予測差の絶対値の中央値
EVExplained varianceこちら を参照
R2決定係数こちら を参照

RMSEMSEのルートを取って補正したものなので、ほぼ同じです。

例えば以下のように予測1~4がある場合、どの予測が優れているのでしょうか?

metrics_sample.png

各指標の値を計算すると以下のようになります。

予測MAEMSEMSLEMEDEVR2
予測11.001.000.00611.00.520.50
予測20.881.550.00841.00.220.22
予測31.001.000.00571.01.000.50
予測40.800.800.00511.00.600.60
  • MAEMED単独では評価が無理
  • MSEMSLER2を見ると予測4が良く予測2が悪い
  • 一方で予測1と予測3の優劣はMSER2ではつけられない
  • EV的には予測3が最も良い(予測差異の分散がゼロ)

実は予測3は平行移動すれば正解と一致するので、それを知っていればもっとも実用的です。 しかし単独の指標だけを見ているとそういった事実も見逃してしまうかもしれません。

MSEとMSLEの比較

ここでは特にMSEMSLEの違いに注目してみます。

次の予測5と予測6はどうでしょうか?

metrics_mse_vs_msle.png

指標としてはMSLE以外はすべて同じです。

予測MAEMSEMSLEMEDEVR2
予測50.40.40.00280.00.880.8
予測60.40.40.00180.00.880.8

以下の理由でMSLEは値が異なります

  • MSEは正解との差が1.0であれば、位置に関わらず1.0となります。
  • MSLEは正解との差が1.0でも位置によって値が変わります。
横軸位置MSEMSLE
1.0の点(12-11)^2=1(log(12)-log(11))^2=0.0076
3.0の点(14-13)^2=1(log(14)-log(13))^2=0.0055

言い換えるとlog(12)-log(11)log(12/11)なので、 MSLEは差異の割合を見ていることになります。

逆に言うと差異の割合が同じなら、 MSEは値が大きいほどペナルティを大きくしている言えます。 その結果、時価総額が大きい銘柄を最小化するようにモデルが最適化され、予測のいびつさが生じていたと考えられます。

MSLEのうれしい特徴

ついでに以下のような予測3と予測3'(予測3を平行移動)ではどうでしょうか?

metrics_msle.png

やはりMSLEだけ異なっており、予測3の方が値は小さくなっています。

予測MAEMSEMSLEMEDEVR2
予測31.01.00.00571.01.00.5
予測3'1.01.00.00671.01.00.5

つまりMSLEは値が小さいほどペナルティをかけるので、 MSLEで最適化を行うと予測される値は上振れしやすくなります。

これは今回の例でいえば、株価を高めに予測するということになりますが、割安の株を見つけたいのでこの性質は好都合ということです。 (割安と予測する場合は、それだけ自信があるということ)

MSLEにより予測

というわけで今回のモデルにはMSEではなくMSLEが適していることが分かりました。 実際にRMSLE(MSLEのルートを取るだけ)で評価した結果は以下のようになりました。

xgb_rmsle.png

いびつさがかなり解消されました! また結果が上振れしていることも確認できます。

まとめ

通常、回帰問題には二乗平均平方根誤差(RMSE)が使われますが、常にそれが最善ではないことが分かりました。

なお予測結果のいびつさはを解消する方法は他にもありそうです。 例えば、時価総額が小さいグループと大きいグループの2つに分け、 それぞれ別のモデルで予測を行ってみてはどうでしょうか?

次回はそれをやります。


  1. 3.3. Model evaluation: quantifying the quality of predictions - scikit-learn 0.21.3 documentation ↩︎

最終更新:2019/12/15 15:41 (Sun)