MAE・RMSE

入門

4.2.3

MAE・RMSE

最終更新 2020-02-26 読了時間 3 分
まとめ
  • MAE と RMSE は回帰誤差の大きさを絶対値と二乗平均平方根で測る指標です。
  • 数式・数値例・比較表を用いて MAE と RMSE の違いを明確にします。
  • 外れ値への感度、RMSE ≥ MAE の不等式、実務での使い分けガイドを解説します。

1. 定義と性質 #

観測値を \(y_i\)、予測値を \(\hat{y}_i\) とすると、

$$ \mathrm{MAE} = \frac{1}{n} \sum_{i=1}^n |y_i - \hat{y}_i|, \qquad \mathrm{RMSE} = \sqrt{\frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2} $$
  • MAE:誤差の絶対値を平均。外れ値の影響が線形で、中央値に相当するロバスト性がある。
  • RMSE:誤差を二乗して平均し平方根。大きな誤差を強く罰するため、外れ値が多いと増加しやすい。
  • 単位はいずれも元データと同じ。RMSE は二乗の平方根で戻すが、感覚的には「大きな外れを嫌う」設定。

2. Python で計算する #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import numpy as np
from sklearn.metrics import mean_absolute_error, mean_squared_error

y_true = np.array([10, 12, 9, 11, 10])
y_pred = np.array([9.5, 13.0, 8.0, 11.5, 9.0])

mae = mean_absolute_error(y_true, y_pred)
rmse = mean_squared_error(y_true, y_pred, squared=False)

print(f"MAE = {mae:.3f}")
print(f"RMSE = {rmse:.3f}")

mean_squared_error(..., squared=False) とすれば平方根付きで RMSE を得られます。平方根を掛けない場合は MSE です。


3. 外れ値がある場合の比較 #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import numpy as np

rng = np.random.default_rng(42)
baseline = np.linspace(100, 110, 20)
prediction = baseline + rng.normal(0, 1.0, size=baseline.size)

mae_clean = np.mean(np.abs(baseline - prediction))
rmse_clean = np.sqrt(np.mean((baseline - prediction) ** 2))

prediction_with_outlier = prediction.copy()
prediction_with_outlier[0] += 15

mae_outlier = np.mean(np.abs(baseline - prediction_with_outlier))
rmse_outlier = np.sqrt(np.mean((baseline - prediction_with_outlier) ** 2))

print(f"MAE (clean, outlier) = {mae_clean:.2f}, {mae_outlier:.2f}")
print(f"RMSE (clean, outlier) = {rmse_clean:.2f}, {rmse_outlier:.2f}")
  • MAE は外れ値が加わっても緩やかに増加する。
  • RMSE は外れ値に大きく引っ張られ、誤差の跳ね上がりを敏感に捉える。

4. 指標の選び方 #

  • 外れ値が少なく、平均的な誤差を重視 ➜ RMSE を採用すると微妙なずれも評価しやすい。

  • 外れ値が多い、頑健な指標が欲しい ➜ MAE や中央値絶対偏差 (MAD) を併用。

  • 報酬・コストが二乗に比例 ➜ RMSE がしっくり来る (例: エネルギー損失、物理誤差)。

  • 単位をそのまま伝えたい ➜ MAE は直感的に解釈しやすい。「平均で ○○ 単位ずれる」。


5. 追加の指標と組み合わせ #

  • MAPE:百分率誤差。相対的な誤差感を共有したいときに便利。ただしゼロ付近では不安定。
  • RMSLE:対数スケールで RMSE を取る。需要予測などで過小予測を強く罰したいケース。
  • 分位点損失 (Pinball Loss):売上予測の上下限など、リスク区間を評価したい場面で有効。

ノイズと MAE/RMSE #

ノイズ量を変えた場合の MAE と RMSE の変化を確認できます。

6. MAE と RMSE の違い #

MAE と RMSE はどちらも「予測のずれの大きさ」を測る指標ですが、誤差の扱い方が根本的に異なります。

数学的な違い:絶対値 vs 二乗 #

  • MAE は誤差の絶対値を平均する。誤差が 1 でも 10 でも、寄与は線形に増える。
  • RMSE は誤差を二乗してから平均し、最後に平方根を取る。大きな誤差ほど二乗により寄与が急増する。

この違いにより、同じデータに対して RMSE は MAE よりも大きな誤差を「重く」評価します。

なぜ RMSE ≥ MAE が常に成り立つのか #

二乗平均は算術平均以上になるという**二乗平均と算術平均の不等式(QM-AM 不等式)**により、次が常に成り立ちます。

$$ \mathrm{MAE} \leq \mathrm{RMSE} \leq \sqrt{n} \cdot \mathrm{MAE} $$

直感的には、RMSE は大きな誤差を二乗で膨らませるため、絶対値だけの MAE を下回ることはありません。等号が成り立つのはすべての誤差が同じ大きさのときだけです。逆に、上界の \(\sqrt{n} \cdot \mathrm{MAE}\) に達するのは 1 個だけ誤差があり残りがすべて 0 の極端なケースです。

つまり MAE > RMSE になることは数学的にあり得ません。もし手元の計算でそうなった場合は、計算ミスか指標の取り違えを疑ってください。

外れ値への感度の比較 #

誤差が \(e\) のとき、MAE への寄与は \(|e|\)、RMSE への寄与(二乗ベース)は \(e^2\) です。たとえば誤差 10 は MAE には 10 として、RMSE の二乗和には 100 として効きます。このため外れ値が 1 つあるだけで RMSE は大きく跳ね上がりますが、MAE の変化は穏やかです。

数値例で確認する #

5 件の予測がある場合を考えます。

データ\(y\)\(\hat{y}\)誤差 \(e\)\(|e|\)\(e^2\)
11011−111
22019111
33028224
44041−111
550455525
$$ \mathrm{MAE} = \frac{1+1+2+1+5}{5} = 2.0 $$$$ \mathrm{RMSE} = \sqrt{\frac{1+1+4+1+25}{5}} = \sqrt{6.4} \approx 2.53 $$

5 番目のデータに誤差 5 という「外れ値的な誤差」があるため、RMSE は MAE より約 26% 大きくなっています。もしすべての誤差が同じ 2.0 であれば、MAE = RMSE = 2.0 と一致します。


7. MAE と RMSE の比較表 #

特性MAERMSE
計算方法絶対値の平均二乗平均の平方根
外れ値への感度低い(線形)高い(二乗で増幅)
微分可能性0 で不連続(勾配不定)どこでも微分可能
解釈平均的な誤差の大きさ二乗平均平方根誤差
単位目的変数と同じ目的変数と同じ
不等式MAE ≤ RMSERMSE ≤ √n × MAE
最適化との相性中央値を推定(L1 回帰)平均値を推定(L2 回帰)
勾配ベース学習勾配が ±1 で一定勾配が誤差に比例

8. 使い分けガイド #

RMSE を選ぶ場面 #

  • 大きな誤差をとくに避けたい場合:医療予測や安全関連のシステムでは、1 件でも大きく外れると致命的。RMSE なら外れ値を強くペナルティするため、極端な予測ミスが見えやすい。
  • 勾配ベースの最適化を行う場合:MSE / RMSE はどこでも微分可能なため、ニューラルネットワークの損失関数として扱いやすい。
  • コストが誤差の二乗に比例する場合:物理シミュレーションやエネルギー損失計算など、ずれの二乗がそのまま実コストになる領域では RMSE が自然。

MAE を選ぶ場面 #

  • 外れ値が多いデータ:不動産価格やユーザー行動データなど、分布の裾が重いデータでは MAE のほうが安定した評価ができる。
  • 解釈のしやすさを重視する場合:「平均して ○○ 円ずれる」と一言で説明できるため、ビジネスの非技術者にも伝えやすい。
  • 頑健な中央値推定が目的の場合:MAE を最小化すると条件付き中央値を推定することになり、偏った分布に強い。

両方を併用する #

実務では MAE と RMSE を並べて報告するのがもっとも情報量が多い。両者の差(RMSE − MAE)が大きいほど、誤差のばらつき(=外れ値の存在)が大きいことを示します。

1
2
3
4
5
6
7
8
9
import numpy as np

errors = np.array([1, 1, 2, 1, 5])
mae = np.mean(np.abs(errors))
rmse = np.sqrt(np.mean(errors ** 2))

print(f"MAE  = {mae:.2f}")
print(f"RMSE = {rmse:.2f}")
print(f"差   = {rmse - mae:.2f}  ← 大きいほど外れ値の影響が強い")

9. まとめ #

  • MAE と RMSE はいずれも回帰誤差を正確に可視化する基礎指標だが、外れ値への感度が異なる。

  • RMSE は常に MAE 以上の値を取り、両者の差が大きいほど外れ値の影響が強いことを意味する。

  • MAE は解釈が容易でロバスト、RMSE は大きな誤差を重視し勾配最適化と相性が良い。それぞれの特性を理解し、ビジネス上のコスト構造に合わせて選択する。

  • 実務では両方を並べて確認し、MAPE や RMSLE など関連指標も組み合わせてモデル改善の方向性を多角的に把握しよう。