論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
平均二乗誤差 (MSE)
Mean Squared Error
回帰評価指標

🔖 キーワード索引

本ページのトピックを 1 タップで移動できます。 「MSE(平均二乗誤差)」を学ぶうえで押さえたい論点はすべてここに集約しました。

30秒で結論文脈ボックス直感で掴む数式・定義記号の意味実値で計算Python実装落とし穴関連手法関連用語グループ教材深掘り歴史背景FAQ

💡 30秒で分かる結論

予測値と実測値の 二乗差を平均した回帰誤差指標。 最小二乗法・OLS・ニューラルネット回帰の中心。

📍 あなたが今見ているもの

分野:機械学習・回帰分析の 損失関数・評価指標。 SSDSE-B-2026 の都道府県データに対する単回帰・重回帰モデルで標準的に使う。

位置づけ:「最小二乗法(OLS)の目的関数」そのもの。 線形回帰の係数推定は MSE を最小化する \(a, b\) を求めることに他ならない。

関連MAE(絶対誤差版)、 RMSE(平方根版)、 (説明力指標)。

🎨 直感で掴む

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 の重回帰でも、 内部的にこの式が走っている。

🔬 数式を言葉で読み解く

記号意味
nサンプル数。 SSDSE-B-2026 全国で集計するなら 47。
y_ii 番目のサンプルの実測値。 例:i = 東京都の出生数 = 96,000 人。
ŷ_iモデルが予測した値。 線形回帰なら \(\hat y_i = X_i \hat\beta\)。
(·)²二乗。 「大きな誤差ほど不釣り合いに重く」効くキーオペレーター。
Σ総和。 全サンプルで二乗誤差を足し上げる。
MSE平均二乗誤差。 単位は y² 。「人²」では読みにくい。
RMSEMSE の平方根。 単位は y と同じ。 報告書で使う際はこちらが好まれる。
σ²既約誤差(モデルでは説明できない真のノイズ)。 MSE の下限。
β̂推定された回帰係数ベクトル。 OLS では \((X^TX)^{-1}X^Ty\)。
X計画行列(n × p)。 SSDSE の重回帰なら、 各列が 1 つの説明変数(人口・年齢など)。

🧮 実値で計算してみる(SSDSE-B-2026)

SSDSE-B-2026 の 「総人口 A1101 → 出生数 A4101」を単回帰したときの MSE を計算する。 ここでは 6 県を抜粋し概数で示す。

都道府県 実測 y 予測 ŷ 誤差 e
北海道24,43030,552-6,12237,478,884
東京都96,00084,22811,772138,580,000
愛知県52,80044,9707,83061,308,900
大阪府59,60053,0286,57243,191,184
沖縄県14,0008,8085,19226,956,864
鳥取県3,5003,24625464,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% 大きいのが、 「外れ値県(東京・沖縄)が誤差を支配」と言える根拠になる。

🐍 Python 実装

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 を補助とするのが定番。

⚠️ 落とし穴

❌ 単位が y² で読みにくい
出生数の MSE = 40,000,000 と言われてもピンとこない。 必ず RMSE = √MSE に変換して「人」単位で報告する。 学術論文でも MSE と RMSE は併記が普通。
❌ 外れ値の存在を見落とす
東京・沖縄のような 特異な県を残したまま MSE を最小化すると、 モデルが 外れ値に引きずられる。 散布図と残差プロットでの確認を怠らない。
❌ スケールに敏感
説明変数のスケール(人口は百万単位、 高齢化率は 0-1 単位)が違うと MSE 最小化の収束が遅くなる。 StandardScalerMinMaxScaler で前処理する。
❌ 過学習の検出ができない
in-sample MSE は説明変数を増やせば 必ず減る。 これだけ見るとモデル選択を間違える。 必ず CV-MSE または train/test 分割で out-of-sample を測る。
❌ 正則化を忘れる
重回帰で MSE 最小化すると、 説明変数間の相関で係数が暴れる(多重共線性)。 Ridge(L2 正則化)や Lasso(L1)で MSE + 罰則項を最小化するのが実務的。

🛠 実践演習:SSDSE で MSE を最小化する 5 ステップ

  1. データ理解:SSDSE-B-2026.csv を読み、 出生数 A4101 のヒストグラム・要約統計を確認。 平均・中央値・最大・最小を把握する。
  2. ベースライン構築:「全平均で予測」のベースラインモデルで MSE / RMSE を測る。 これを improvement の基準に。
  3. 単回帰:A1101(総人口)を説明変数に単回帰。 MSE がどれくらい下がるか確認。
  4. 重回帰:A1303、 E4501、 A5101 などを追加。 train MSE と CV MSE の 乖離に注意。
  5. 正則化:Ridge / Lasso で MSE + 罰則項を最小化。 ハイパーパラメータ α を CV で調整。

各ステップで「train MSE」「CV MSE」を必ず両方記録すること。 train MSE が下がっても CV MSE が悪化していれば過学習。 47 県と少ないサンプル数のため、 SSDSE では 説明変数の選択が極めて重要。 経験則として、 47 / 10 = 4-5 変数程度が安全圏。

📊 MSE と他指標の数値比較

SSDSE-B-2026 を想定した 4 サンプル(実測値 100, 95, 110, 200)に、 異なる予測モデルを当てて MSE / RMSE / MAE / R² を計算。

予測パターン 予測値 MSE RMSE MAE
完璧予測100, 95, 110, 2000001.000
全平均126.25 × 42,06245.436.00.000
線形回帰103, 98, 113, 19515.53.93.50.992
外れ値 1 つだけ大外し100, 95, 110, 1002,50050.025.0-0.21

読み方:「外れ値 1 つだけ大外し」では MAE = 25 だが MSE = 2,500、 つまり MSE は外れ値を不釣り合いに重く罰している。 R² がマイナスになるのは「全平均より悪い予測」を意味する。 SSDSE 実データでも同様の現象が起きる。

🔍 深掘り:MSE の数理

なぜ MSE 最小化は平均値推定になるのか

サンプル \(\{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}} $$

SSDSE での実例:単回帰 vs 重回帰

単回帰(A1101 のみ)では バイアス大・分散小。 重回帰(5 変数)では バイアス小・分散大。 説明変数を 47 個(人口列すべて)入れると過学習で 分散爆発。 47 県のサンプルで 47 変数を使うと、 train MSE = 0 だが test MSE は天文学的に増える。 これがバイアス・分散トレードオフの実演。

なぜガウスは 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 を題材にした具体的なシナリオで見てみる。

シナリオ 1:最小二乗法の解析解

線形回帰の係数推定はすべて MSE 最小化問題。 SSDSE-B-2026 で「人口 + 高齢化率 → 出生数」を推定するときも、 内部では \((X^TX)^{-1}X^Ty\) という MSE 最小解が走る。 解析解があるから 47 県程度なら 0.01 秒で計算完了

シナリオ 2:ニューラルネット学習

回帰タスクの NN(PyTorch / TensorFlow)では nn.MSELoss() が標準。 SSDSE のような小データには NN は過剰だが、 全国 47 都道府県 × 100 列を入力にした 埋め込み学習で MSE を損失に使うと、 都道府県の類似度を自動発見できる。

シナリオ 3:早期停止(Early Stopping)の判定

勾配ブースティング(XGBoost / LightGBM)で「過学習を防ぐ早期停止」を行うとき、 validation MSE を監視するのが標準。 5 エポック連続で MSE が下がらなくなったら学習停止、 のように使う。

シナリオ 4:A/B テストの効果量推定

マーケティングの A/B テストで、 介入群と統制群の指標差を 分散減少手法(CUPED 等)で推定するとき、 共変量モデルの当てはまりを MSE で評価する。 MSE が小さいほど推定の精度が高くなる。

シナリオ 5:時系列予測のベンチマーク

SSDSE-B を 2015-2026 のパネルに拡張し、 ARIMA・LSTM・Prophet などのモデルを RMSE(MSE の平方根)で比較するのが業界標準。 RMSE = 1,200 人 vs 1,500 人なら、 前者のモデルが平均的に 300 人精度が良い。

🔄 似た概念との比較

「MSE」と混同しやすい用語との比較表。 違いを明確にすることで使い分けの判断が早くなる。

観点MSE似た用語違い
単位MAE: y / RMSE: yMSE は読みにくい、 RMSE で換算が定石
外れ値感度高い(二乗)MAE: 低い(線形)MSE は外れ値を不釣り合いに重く罰する
微分可能性全域で可能MAE: \(y = \hat y\) で不可NN 損失には MSE が便利
対応する推定量条件付き期待値(平均)MAE: 条件付き中央値統計的解釈が異なる
解析解正規方程式で閉形式MAE: 数値解のみOLS の高速性は MSE の恩恵
SSDSE 例出生数 MSE = 40,000,000MAE = 5,000 / RMSE = 6,300RMSE と MAE の差で外れ値検知

❓ よくある質問(FAQ)

Q. MSE と RMSE どちらを報告すべき?
A. RMSEを主、 MSE を補助。 RMSE は y と同じ単位で読みやすい。 学術論文では両方記載が無難。
Q. 対数変換した目的変数の MSE は元のスケールに戻せる?
A. 完全には戻せない(ヤンセンの不等式)。 ただし \(\hat y = \exp(\hat{\log y})\) で逆変換した予測値の RMSE は計算可能。 対数変換は外れ値対策として人気だが、 評価時のスケール変換に注意。
Q. MSE 損失で勾配消失する場合は?
A. 出力スケールが極端に小さいときに発生。 目的変数を StandardScaler で標準化してから学習、 予測時に逆変換するのが定石。
Q. Huber 損失は MSE と MAE の使い分けが面倒なときに使える?
A. その通り。 Huber は誤差が閾値 δ 以内なら MSE、 超えたら MAE という滑らかな結合。 \(\delta\) の選択は CV で行う。
Q. SSDSE で MSE を使うときの典型的なスケール?
A. 出生数 → MSE = 数千万人²、 RMSE = 数千人。 大学数 → MSE = 数百件²、 RMSE = 約 15 件。 必ず単位確認。

✅ 実施前チェックリスト

📝 本ページまとめ — 「MSE」を一言で

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 で(微分しやすい)、 と使い分けるのが実務的。