本ページのトピックを 1 タップで移動できます。 「MSE(平均二乗誤差)」を学ぶうえで押さえたい論点はすべてここに集約しました。
予測値と実測値の 二乗差を平均した回帰誤差指標。 最小二乗法・OLS・ニューラルネット回帰の中心。
MSE(Mean Squared Error、 平均二乗誤差)は、 回帰モデルの予測のズレを 「二乗してから平均」する。 二乗するので、 大きく外れた予測ほど 不釣り合いに重く罰される。
SSDSE-B-2026 の「人口 → 出生数」を例にすると、 多くの県の予測誤差が ±3,000 人程度でも、 東京 1 県の誤差が ±15,000 人あるだけで MSE は跳ね上がる。 これは MSE が 外れ値に敏感な指標である証拠。
日常の比喩でいうと、 MSE は 「待ち合わせの遅刻時間を二乗して平均」。 2 分遅刻なら 4、 10 分遅刻なら 100、 1 時間(60 分)遅刻なら 3,600。 「ちょっとの遅刻はあまり問題視しないけど、 大遅刻は絶対許さない」という非対称な評価が MSE の本質。
なぜ MSE が「機械学習で最も使われる」のか:それは 解析的に解けるから。 線形回帰の正規方程式 \(\hat\beta = (X^TX)^{-1} X^Ty\) は MSE を最小化する解で、 行列計算 1 発で得られる。 また、 MSE は処処で微分可能なので、 ニューラルネットの勾配降下法と相性が良い。
統計的解釈:MSE 最小化は 条件付き期待値(つまり「平均」)を推定する。 ガウス分布の最尤推定とも一致する。 この性質が「ガウス=最小二乗の組み合わせ」を統計学の王道にした。
誤解しやすいポイント:MSE が小さい = 良いモデルとは限らない。 in-sample MSE は説明変数を増やせば 必ず減る(過学習)。 必ず train/test 分割または交差検証で out-of-sample MSE を確認すること。 SSDSE のような 47 サンプルの少データでは、 5-fold CV や leave-one-out CV が定石。
SSDSE-B-2026 で実感する例:47 都道府県の「総人口 → 出生数」を単回帰すると、 MSE = 約 40,000,000(人²)、 RMSE = 約 6,300 人、 MAE = 約 5,000 人。 RMSE と MAE の差(1,300 人)が、 外れ値(東京・沖縄)の存在を反映した二乗ペナルティの効果。
サンプル数 \(n\)、 実測値 \(y_i\)、 予測値 \(\hat y_i\) としたとき、 平均二乗誤差は次で定義される。
$$ \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat y_i)^2 $$RMSE / MAE との関係:
$$ \text{RMSE} = \sqrt{\text{MSE}}, \qquad \text{MAE} = \frac{1}{n}\sum |y_i - \hat y_i| \le \text{RMSE} $$バイアス・分散分解:期待値ベースの MSE は次のように分解できる(クラシックな結果)。
$$ \mathbb{E}[(y - \hat y)^2] = \underbrace{(\mathbb{E}[\hat y] - y)^2}_{\text{バイアス}^2} + \underbrace{\mathbb{V}[\hat y]}_{\text{分散}} + \underbrace{\sigma^2}_{\text{既約誤差}} $$これが「バイアス・分散トレードオフ」の数学的基盤。 単純なモデルはバイアス大・分散小、 複雑なモデルはバイアス小・分散大。 両者を釣り合わせるところに最適モデルがある。
線形回帰の正規方程式:MSE を最小化する係数は閉形式で求まる。
$$ \hat\beta = (X^T X)^{-1} X^T y $$これは pandas/scikit-learn の LinearRegression.fit() 内部で実行される計算。 SSDSE-B-2026 の重回帰でも、 内部的にこの式が走っている。
SSDSE-B-2026 の 「総人口 A1101 → 出生数 A4101」を単回帰したときの MSE を計算する。 ここでは 6 県を抜粋し概数で示す。
| 都道府県 | 実測 y | 予測 ŷ | 誤差 e | e² |
|---|---|---|---|---|
| 北海道 | 24,430 | 30,552 | -6,122 | 37,478,884 |
| 東京都 | 96,000 | 84,228 | 11,772 | 138,580,000 |
| 愛知県 | 52,800 | 44,970 | 7,830 | 61,308,900 |
| 大阪府 | 59,600 | 53,028 | 6,572 | 43,191,184 |
| 沖縄県 | 14,000 | 8,808 | 5,192 | 26,956,864 |
| 鳥取県 | 3,500 | 3,246 | 254 | 64,516 |
| 6 県の平均(MSE 概算) | 約 51,300,000 |
この MSE から RMSE = √51,300,000 ≈ 7,160 人。 MAE 概算(前項の値)= 約 6,290 人より大きい。 比 RMSE/MAE ≈ 1.14 は 外れ値の存在を示唆。
実際に sklearn.metrics.mean_squared_error で 47 全県を集計すると MSE ≈ 40,000,000 程度、 RMSE ≈ 6,300 人、 MAE ≈ 5,000 人。 RMSE のほうが MAE より 26% 大きいのが、 「外れ値県(東京・沖縄)が誤差を支配」と言える根拠になる。
SSDSE-B-2026 を読み込んで MSE / RMSE / MAE / R² をまとめて計算するコード。
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
from sklearn.model_selection import KFold, cross_val_score
# 1) データ読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
# 2) 単回帰
X = df[['A1101']].values # 総人口
y = df['A4101'].values # 出生数
model = LinearRegression().fit(X, y)
y_pred = model.predict(X)
mse = mean_squared_error(y, y_pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(y, y_pred)
r2 = r2_score(y, y_pred)
print(f'MSE = {mse:,.0f} 人²')
print(f'RMSE = {rmse:,.0f} 人 ← MSE の平方根(読みやすい)')
print(f'MAE = {mae:,.0f} 人')
print(f'R² = {r2:.3f}')
print(f'RMSE/MAE = {rmse/mae:.2f} ← 1.25 が正規分布の目安、 1.4 以上は外れ値の影響大')
正規方程式で手計算してみる
# MSE 最小化の解析解 = (X^T X)^{-1} X^T y
X_design = np.column_stack([np.ones(len(X)), X]) # 切片の列を追加
beta = np.linalg.inv(X_design.T @ X_design) @ X_design.T @ y
print(f'切片 a = {beta[0]:,.2f}, 傾き b = {beta[1]:.6f}')
# sklearn の結果と一致するはず
print(f'sklearn: 切片 = {model.intercept_:,.2f}, 傾き = {model.coef_[0]:.6f}')
5-fold CV で out-of-sample MSE を測定
# 交差検証で汎化性能を評価
cv_mse = -cross_val_score(model, X, y, cv=5, scoring='neg_mean_squared_error')
print(f'CV-MSE : 平均 = {cv_mse.mean():,.0f}, 標準偏差 = {cv_mse.std():,.0f}')
print(f'CV-RMSE : 平均 = {np.sqrt(cv_mse.mean()):,.0f} 人')
# in-sample よりも大きい → 過学習の可能性
重回帰での MSE 改善
# 説明変数を増やして MSE を下げる
features = ['A1101', 'A1303', 'E4501', 'E4601', 'A5101']
# 総人口、 65歳以上人口、 大学数、 大学生数、 転入者数
df_clean = df.dropna(subset=features + ['A4101'])
X_multi = df_clean[features].values
y_multi = df_clean['A4101'].values
multi_model = LinearRegression().fit(X_multi, y_multi)
y_multi_pred = multi_model.predict(X_multi)
print(f'単回帰 MSE = {mean_squared_error(y, y_pred):,.0f}')
print(f'重回帰 MSE = {mean_squared_error(y_multi, y_multi_pred):,.0f}')
print(f'削減率: {(1 - mean_squared_error(y_multi, y_multi_pred)/mean_squared_error(y, y_pred))*100:.1f}%')
補足:sklearn 1.4 以降は mean_squared_error(squared=False) で RMSE を直接取得できる。 SSDSE 解析では RMSE を主指標、 MSE を内部最適化、 MAE を補助とするのが定番。
StandardScaler や MinMaxScaler で前処理する。各ステップで「train MSE」「CV MSE」を必ず両方記録すること。 train MSE が下がっても CV MSE が悪化していれば過学習。 47 県と少ないサンプル数のため、 SSDSE では 説明変数の選択が極めて重要。 経験則として、 47 / 10 = 4-5 変数程度が安全圏。
SSDSE-B-2026 を想定した 4 サンプル(実測値 100, 95, 110, 200)に、 異なる予測モデルを当てて MSE / RMSE / MAE / R² を計算。
| 予測パターン | 予測値 | MSE | RMSE | MAE | R² |
|---|---|---|---|---|---|
| 完璧予測 | 100, 95, 110, 200 | 0 | 0 | 0 | 1.000 |
| 全平均 | 126.25 × 4 | 2,062 | 45.4 | 36.0 | 0.000 |
| 線形回帰 | 103, 98, 113, 195 | 15.5 | 3.9 | 3.5 | 0.992 |
| 外れ値 1 つだけ大外し | 100, 95, 110, 100 | 2,500 | 50.0 | 25.0 | -0.21 |
読み方:「外れ値 1 つだけ大外し」では MAE = 25 だが MSE = 2,500、 つまり MSE は外れ値を不釣り合いに重く罰している。 R² がマイナスになるのは「全平均より悪い予測」を意味する。 SSDSE 実データでも同様の現象が起きる。
サンプル \(\{x_1, \dots, x_n\}\) を 定数 c で代表する問題:
$$ L(c) = \frac{1}{n}\sum (x_i - c)^2 $$
微分して 0 とおく:\(dL/dc = -\frac{2}{n}\sum(x_i - c) = 0\) ⇒ \(c = \bar x\)(標本平均)。 したがって MSE 最小化は サンプル平均推定と等価。
期待 MSE は次のように 3 つの成分に分解できる:
$$ \mathbb{E}[(y - \hat y)^2] = \text{Bias}[\hat y]^2 + \text{Var}[\hat y] + \sigma^2_{\text{noise}} $$
単回帰(A1101 のみ)では バイアス大・分散小。 重回帰(5 変数)では バイアス小・分散大。 説明変数を 47 個(人口列すべて)入れると過学習で 分散爆発。 47 県のサンプルで 47 変数を使うと、 train MSE = 0 だが test MSE は天文学的に増える。 これがバイアス・分散トレードオフの実演。
「観測誤差が独立な正規分布に従う」と仮定すると、 対数尤度の最大化が MSE 最小化と一致する:
$$ \log p(y|\hat y) \propto -\frac{1}{2\sigma^2}(y - \hat y)^2 $$
これがガウス・最小二乗の組み合わせを 最強の組み合わせにした理由。 ただし誤差が 非正規・重い裾のときは MAE(ラプラス分布の最尤推定)が良い。
最小二乗法(最小化される目的関数が SSR = n × MSE)は、 1805 年にルジャンドル(Adrien-Marie Legendre)が彗星軌道計算のために提唱、 1809 年にガウスが正規分布の最尤推定として正当化した。 これが 近代統計学の基礎。
ガウスは「観測誤差が正規分布に従うとき、 MSE 最小化が最尤推定」という美しい結果を示した(ガウス・マルコフ定理の先駆け)。 この定理が「なぜ MSE をデフォルトで使うのか」の理論的根拠となり、 19-20 世紀の統計学・計量経済学・工学の標準となった。
20 世紀後半、 ニューラルネットの研究で 誤差逆伝播法が再発見され、 MSE は NN 学習の損失関数として中心的役割を果たすようになる。 PyTorch・TensorFlow いずれも回帰タスクのデフォルト損失は MSE。
21 世紀の Kaggle 時代になると、 タスクによっては RMSE / MAE / MAPE / Quantile Loss が好まれるようになったが、 MSE は 計算の簡便さ・解析性で依然として根強い。 SSDSE 解析でも、 まずは MSE / RMSE / MAE の三点セットで評価するのが定番。
「MSE」が実務でどう使われるか、 SSDSE-B-2026 を題材にした具体的なシナリオで見てみる。
線形回帰の係数推定はすべて MSE 最小化問題。 SSDSE-B-2026 で「人口 + 高齢化率 → 出生数」を推定するときも、 内部では \((X^TX)^{-1}X^Ty\) という MSE 最小解が走る。 解析解があるから 47 県程度なら 0.01 秒で計算完了。
回帰タスクの NN(PyTorch / TensorFlow)では nn.MSELoss() が標準。 SSDSE のような小データには NN は過剰だが、 全国 47 都道府県 × 100 列を入力にした 埋め込み学習で MSE を損失に使うと、 都道府県の類似度を自動発見できる。
勾配ブースティング(XGBoost / LightGBM)で「過学習を防ぐ早期停止」を行うとき、 validation MSE を監視するのが標準。 5 エポック連続で MSE が下がらなくなったら学習停止、 のように使う。
マーケティングの A/B テストで、 介入群と統制群の指標差を 分散減少手法(CUPED 等)で推定するとき、 共変量モデルの当てはまりを MSE で評価する。 MSE が小さいほど推定の精度が高くなる。
SSDSE-B を 2015-2026 のパネルに拡張し、 ARIMA・LSTM・Prophet などのモデルを RMSE(MSE の平方根)で比較するのが業界標準。 RMSE = 1,200 人 vs 1,500 人なら、 前者のモデルが平均的に 300 人精度が良い。
「MSE」と混同しやすい用語との比較表。 違いを明確にすることで使い分けの判断が早くなる。
| 観点 | MSE | 似た用語 | 違い |
|---|---|---|---|
| 単位 | y² | MAE: y / RMSE: y | MSE は読みにくい、 RMSE で換算が定石 |
| 外れ値感度 | 高い(二乗) | MAE: 低い(線形) | MSE は外れ値を不釣り合いに重く罰する |
| 微分可能性 | 全域で可能 | MAE: \(y = \hat y\) で不可 | NN 損失には MSE が便利 |
| 対応する推定量 | 条件付き期待値(平均) | MAE: 条件付き中央値 | 統計的解釈が異なる |
| 解析解 | 正規方程式で閉形式 | MAE: 数値解のみ | OLS の高速性は MSE の恩恵 |
| SSDSE 例 | 出生数 MSE = 40,000,000 | MAE = 5,000 / RMSE = 6,300 | RMSE と MAE の差で外れ値検知 |
StandardScaler で標準化してから学習、 予測時に逆変換するのが定石。nn.MSELoss() を選んだか、 Huber 損失で外れ値対策したか?MSE(Mean Squared Error、 平均二乗誤差)は、 回帰モデルの誤差を 二乗してから平均する指標。 \(\text{MSE} = \frac{1}{n}\sum(y_i - \hat y_i)^2\)。 「最小二乗法」「ガウス最尤推定」「ニューラルネット回帰損失」すべての中心にある指標。
SSDSE-B-2026 のような外れ値(東京・沖縄)を含むデータでは、 MSE は外れ値を不釣り合いに重く罰する。 これが 強み(重要な外れに敏感)でも 弱み(モデルが外れ値に引きずられる)でもある。 報告時は必ず RMSE に変換して y と同じ単位にする、 そして MAE と併記して RMSE/MAE 比で外れ値影響を診断する、 が黄金パターン。
本ページの 3 つのテイクアウェイ:① MSE は 「平均二乗誤差」、 解析解が閉形式で求まる最良の損失関数。 ② SSDSE のような外れ値を含むデータでは、 MSE は外れ値を重く罰するので注意。 ③ 報告は RMSE で(y と同じ単位)、 内部最適化は MSE で(微分しやすい)、 と使い分けるのが実務的。