складність 1/5 Безкоштовно
MSE
Середнє квадратів різниць між передбаченими й фактичними значеннями — стандартний спосіб виміряти, наскільки хибними є прогнози регресійної моделі.
Інтуїція
Візьміть кожен прогноз, виміряйте, наскільки він схибив, піднесіть цей розрив до квадрата й усередніть результати. Це середнє і є MSE.
Піднесення до квадрата робить дві речі одразу. Воно прибирає знак, тож перестрілити на 3 і недострілити на 3 важать однаково. І воно карає великі промахи куди сильніше за малі — схибити на 10 коштує у сто разів більше, ніж схибити на 1, а не в десять. Модель, налаштована на цю метрику, тяжко працюватиме, щоб уникнути поодинокої катастрофи, навіть ціною бути трохи гіршою в середньому [2, §3.1.1.2].
Формальне визначення
Підсумуйте квадрати залишків по всіх спостереженнях і поділіть на кількість спостережень. Результат завжди невід’ємний і дорівнює нулю лише тоді, коли кожен прогноз точно правильний [1, return value].
Одиниці є квадратом одиниць цілі. Якщо ви передбачаєте ціни в доларах, MSE вимірюється в доларах у квадраті — саме тому натомість часто подають її квадратний корінь, RMSE, коли число має читати людина.
Як це працює
MSE вживають у двох окремих ролях, і плутанина між ними спричиняє справжні проблеми:
- Як функцію втрати, яку мінімізують під час підгонки. Саме це робить лінійна регресія, коли обирає свої коефіцієнти [2, §3.1.1.2].
- Як метрику оцінювання, обчислену на відкладених даних, щоб оцінити, як модель поводитиметься на даних, яких вона ніколи не бачила [3, §3.6.1].
Формула та сама, але низьке значення на навчанні й низьке значення на тесті означають дуже різні речі. Модель може загнати перше майже до нуля, запам’ятавши навчальну вибірку, тоді як друге погіршується.
Де застосовується
- Підгонка регресійних моделей — типова ціль для найменших квадратів.
- Вибір моделі — порівняння моделей-кандидатів на тому самому відкладеному поділі.
- Рання зупинка — спостереження за тим, як валідаційна MSE росте, щоб вирішити, коли спинити навчання.
- Пошук гіперпараметрів — як
neg_mean_squared_errorу scikit-learn, узята з мінусом, щоб більше означало краще, відповідно до угоди, за якою «більші повернені значення кращі за менші» [4, §3.4.3.1].
Чому і коли
Беріть MSE, коли великі похибки справді гірші за малі — прогнозування попиту, де великий промах спустошує склад, або оцінювання дози, де перестрілити небезпечно. Піднесення до квадрата кодує це судження прямо.
Беріть щось інше, коли у ваших даних є викиди, за якими ви не хочете, щоб модель гналася. Одна дика точка може запанувати над усією MSE й потягти підгонку до себе. Середня абсолютна похибка ставиться до всіх похибок пропорційно і є звичайною альтернативою; втрата Huber сидить між цими двома.
Практичний приклад
Python 7 рядків Показати код Сховати код
from sklearn.metrics import mean_squared_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
mean_squared_error(y_true, y_pred)
# 0.375Варто один раз зробити руками. Похибки становлять 0.5, −0.5, 0 і −1. У квадраті вони дають 0.25, 0.25, 0 і 1, що в сумі 1.5. Поділене на чотири спостереження, це 0.375 [1, examples].
Ті самі похибки, чотирма способами. Один набір із 200 прогнозів, оцінений шістьма метриками, поки щоразу змінюється одне: один прогноз дуже помиляється, ціль зсунуто ближче до нуля, одиниці зроблено вдесятеро меншими.
Python 39 рядків Показати код Сховати код
import numpy as np
from sklearn.metrics import (
mean_absolute_error,
mean_absolute_percentage_error,
mean_squared_error,
r2_score,
)
rng = np.random.default_rng(20261021)
N, DELTA = 200, 5.0
y = rng.normal(50, 10, N)
pred = y + rng.normal(0, 3, N)
def huber(t, p, delta=DELTA):
r = np.abs(t - p)
return float(np.mean(np.where(r <= delta, 0.5 * r**2, delta * (r - 0.5 * delta))))
outlier = pred.copy()
outlier[0] += 60
shift = y.min() - 0.05 # the smallest target lands at 0.05
cases = {
"clean": (y, pred),
"one-outlier": (y, outlier),
"near-zero": (y - shift, pred - shift),
"x10-units": (10 * y, 10 * pred),
}
print(f" {N} targets, the same noise in every row; Huber delta = {DELTA:g}")
print(f"{'case':>13}{'MSE':>10}{'RMSE':>9}{'MAE':>9}{'R²':>8}{'MAPE':>10}{'Huber':>9}")
for name, (t, p) in cases.items():
mse = mean_squared_error(t, p)
print(
f"{name:>13}{mse:>10.2f}{np.sqrt(mse):>9.2f}{mean_absolute_error(t, p):>9.2f}"
f"{r2_score(t, p):>8.3f}{mean_absolute_percentage_error(t, p):>10.3f}{huber(t, p):>9.2f}"
)Вивід
200 targets, the same noise in every row; Huber delta = 5
case MSE RMSE MAE R² MAPE Huber
clean 8.99 3.00 2.42 0.926 0.050 4.40
one-outlier 27.07 5.20 2.72 0.777 0.059 5.84
near-zero 8.99 3.00 2.42 0.926 0.215 4.40
x10-units 898.78 29.98 24.22 0.926 0.050 109.03Один поганий прогноз потроює MSE і ледве зрушує MAE. Один промах на 60 серед 200 підіймає MSE з 8.99 до 27.07 і знижує R² з 0.926 до 0.777, тоді як MAE змінюється з 2.42 до 2.72. Саме піднесення до квадрата дає одній похибці таку вагу.
Зсуньте ціль до нуля — і рухається лише MAPE. Похибки ті самі до останньої цифри, тож MSE, RMSE, MAE, R² і Huber не змінюються; MAPE зростає з 0.050 до 0.215, майже повністю через одну ціль, що тепер дорівнює 0.05.
Змініть одиниці — і на місці лишаються лише R² і MAPE. Удесятеро більші значення роблять MSE у сто разів більшою, а RMSE і MAE — удесятеро; Huber не росте ні так, ні так, а в 24.8 раза, бо δ лишається 5, а похибки виростають за нього.
Варіанти
| Метрика | Зв’язок із MSE | Навіщо її брати |
|---|---|---|
| RMSE | Її квадратний корінь | Читається у власних одиницях цілі |
| MAE | Абсолютна похибка замість квадрата | Куди менш чутлива до викидів |
| Huber | Квадрат для малих похибок, модуль для великих | Компроміс між цими двома |
| R² | MSE, перемасштабована проти прогнозування середнього | Без одиниць: читається як частка дисперсії цілі |
Типові помилки
MSE не є порівнянною між наборами даних. Вона несе масштаб цілі [2, §3.1.1.2]. MSE, що дорівнює 4, є чудовою, коли ви передбачаєте ціни на житло в тисячах, і неможливою, коли ви передбачаєте ймовірність, бо там жоден квадрат похибки не перевищує 1.
MSE на навчанні не є оцінкою продуктивності. Вона каже лише те, наскільки добре модель підігналася під дані, які вона вже бачила. Число, яке важить, обчислюють на даних, притримуваних від підгонки [3, §3.6.1].
Піднесення до квадрата — це рішення, а не технічна дрібниця. Обравши MSE, ви оголосили, що одна похибка на 10 гірша за десять похибок на 1. Якщо для вашої задачі це не так, метрика нишком оптимізує не те [2, §3.1.1.2].
Ще не прочитаноДочитайте сторінку до кінця — і вона вважатиметься прочитаною.
Зберігайте свій прогресЗ доступом назавжди кожна дочитана сторінка позначається, і ви продовжуєте з того місця, де зупинилися, на всіх своїх пристроях.
Відкрити доступПеревірте себе
3 запитання
Кожну відповідь пояснено: який розділ вона перевіряє і з якого джерела.
На шпаргалці: Regression metrics and losses →
Джерела
- scikit-learn — sklearn.metrics.mean_squared_errordocs · звірено 2026-08-29https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html
- Dive into Deep Learning — 3.1 Linear Regressionbookhttps://d2l.ai/chapter_linear-regression/linear-regression.html
- Dive into Deep Learning — 3.6 Generalizationbookhttps://d2l.ai/chapter_linear-regression/generalization.html
- scikit-learn User Guide — Metrics and scoringdocs · звірено 2026-10-06https://scikit-learn.org/stable/modules/model_evaluation.html