回帰モデル性能評価関数:それぞれ特徴と適用先

sckit-learnで使える回帰モデルの評価関数をベースに、それぞれの違いと使い道についてまとめます。yiは真のy、上にバーがあるのがは予測値を示します。

回帰モデル性能評価関数

平均2乗誤差(MSE, RMSE)

$$\text{MSE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_\text{samples} – 1} (y_i – \hat{y}_i(予測値))^2.$$

平均二乗誤差(MSE:Mean squared error, RMSE:Root mean squared error)は、誤差の2乗和の平均を最小化するようにモデルを調整する。RMSEは2乗した後に平方根をとり、次元をyとあわせている。

第一選択の評価関数。大きな値を重視する(大きな値ほど2乗誤差は大きくなる)ので外れ値の影響を受けやすいが、正規分布のように外れ値が指数的に減少する多くの状況で有用。

平均絶対誤差(MAE)

$$\text{MAE}(y, \hat{y}) = \frac{1}{n_{\text{samples}}} \sum_{i=0}^{n_{\text{samples}}-1} \left| y_i – \hat{y}_i \right|.$$

平均絶対誤差(MAE:Mean absolute error)は、誤差の絶対値和の平均を最小化するようにモデルを調整する。

MSEより外れ値に強く、ロバストな評価手法。逆に値が大きく異なるデータの学習が弱い。ただ大きな値を重視する傾向は残っている。外れ値に影響が大きいデータセットに。

平均2乗対数誤差 (Mean squared logarithmic error)

$$\text{MSLE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_\text{samples} – 1} (\log_e (1 + y_i) – \log_e (1 + \hat{y}_i) )^2.$$

平均2乗対数誤差は、対数化したyの誤差にたいする2乗和の平均。人口、年間の商品売上など、yが指数関数的に増加するタスクで適用される。過大側の予測より、過小側の予測により大きなペナルティがつく。

絶対誤差の中央値(MedAE:Median absolute error)

$$R^2(y, \hat{y}) = 1 – \frac{\sum_{i=1}^{n} (y_i – \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i – \bar{y})^2}$$

予測値それぞれの絶対誤差の中央値を最小化する。外れ値ほど誤差が大きくなるが、誤差の中央値はそれにはほとんど影響されないという原理。

MAEよりさらにロバストなため、少数のサンプルしかないデータや、外れ値が気になるが除けないデータで有用。

平均パーセンテージ誤差(MPE:Mean percentage error)

{\text{MPE}}={\frac  {100\%}{n}}\sum _{{t=1}}^{n}{\frac  {a_{t}-f_{t}}{a_{t}}}

平均パーセンテージ誤差は、実測値から外れた割合(%:パーセント)の平均を最小化するようにはたらく。sckit-learnには実装されていない。どのような領域の値も、その大小に関係なく同じ重みの誤差として扱われるため、良さそうであるが、実用にはいくつか問題がある(yが0ではエラーになったり、非常に小さい値では%誤差が発散するなど:英語版wikipediaより

R2スコア(決定係数)

真の値と予測値の相関関係を示し、y-y plotの当てはまり具合に相当する。完全に一致している場合のR2スコアは1となる。R2スコアはデータセットに依存するため、異なるデータセット間でR²を比較できない。

まとめ

基本的にはR2スコアと平均2乗誤差(MSE)R2スコアと平均絶対誤差(MAE)の併用がベスト
大きな値を重視したい・外れ値もしっかり学習したいなら、RMSE
外れ値の重みは減らしたいなら、MAE

予測対象が指数関数的に変化する値であれば平均2乗対数誤差もありだが、これはyを対数化するのでも対処できる。

少数のデータしかない場合や、外れ値の影響が大きいものの除外したくないという場合は、絶対誤差の中央値(MedAE)を用いる。