Привет! Ты уже научился обучать модели регрессии — например, линейную регрессию для предсказания цен на жильё. Но как понять, насколько хороша твоя модель? Просто посмотреть на предсказанные числа недостаточно. Нужны чёткие численные метрики, которые скажут: «Модель ошибается в среднем на 5 000 долларов» или «Модель объясняет 85% изменчивости данных».
В этой статье мы разберём четыре ключевые метрики для регрессии:
- MAE — средняя абсолютная ошибка
- MSE — среднеквадратическая ошибка
- RMSE — корень из среднеквадратической ошибки
- R² — коэффициент детерминации
Узнаем, что каждая из них говорит о модели, и когда какую выбирать.
- Что нужно знать перед началом
- Основная часть
- Что такое метрики регрессии?
- MAE — Mean Absolute Error (Средняя абсолютная ошибка)
- MSE — Mean Squared Error (Среднеквадратическая ошибка)
- RMSE — Root Mean Squared Error (Корень из среднеквадратической ошибки)
- R² — R-squared (Коэффициент детерминации)
- Сравнение метрик
- Реализация на Python с scikit-learn
- Полный пример: оценка модели на реальных данных
- Вывод: Какую метрику выбрать?
- Задачи для закрепления
- Нюансы и подводные камни
- R² и добавление новых признаков
- MAE, MSE и выбросы
- Масштаб данных
- Частые ошибки и как их избежать
- Ошибка 1: Использовать R² для сравнения моделей с разным количеством признаков
- Ошибка 2: Выбирать модель только по RMSE
- Ошибка 3: Забывать, что R² — это не процент правильных ответов
- Шпаргалка
- Заключение
- КВИЗ
- Что дальше?
Что нужно знать перед началом
Для этого урока тебе понадобится:
- Установленный scikit-learn (
pip install scikit-learn) - Базовое понимание машинного обучения
- Знание линейной регрессии из предыдущих статей
Совет: Никогда не полагайся на одну метрику! Каждая из них показывает разные аспекты качества модели. Используй их в комбинации, чтобы получить полную картину .
Основная часть
Что такое метрики регрессии?
Когда ты предсказываешь непрерывные значения (цену дома, температуру, продажи), ты хочешь понять, насколько близки твои предсказания к реальным данным. В отличие от классификации, где мы просто считаем правильные ответы, здесь мы измеряем расстояние между предсказанным и фактическим значением. Метрики регрессии отвечают на вопрос: «Насколько мы ошиблись?».
Представь, что ты предсказал цены на 10 квартир. Метрики покажут тебе среднюю ошибку, самые большие промахи и насколько вообще модель лучше, чем просто «угадывание» средней цены.
Совет: Ошибка считается как
ошибка = фактическое_значение - предсказанное_значение. Наша задача — сделать эту ошибку как можно меньше.
MAE — Mean Absolute Error (Средняя абсолютная ошибка)
MAE — самая простая для понимания метрика. Она вычисляет среднее абсолютное значение всех ошибок .
Формула:MAE=n1i=1∑n∣yi−y^i∣
Что это значит: Если твоя MAE = 10 000 рублей, это значит, что в среднем твоя модель ошибается на 10 000 рублей (в ту или другую сторону).
Особенности:
- Очень интерпретируема — даёт ответ в тех же единицах, что и предсказываемая переменная. «Наша модель ошибается в среднем на 10 000 $» .
- Устойчива к выбросам. Ошибка 100 000 будет учтена как 100 000, а не как 10 000 000 000 .
- Не штрафует большие ошибки сильнее маленьких. Для MAE ошибка в 100 000 и две ошибки по 50 000 — одно и то же.
Когда использовать: MAE отлично подходит, когда выбросы для тебя не критичны, или когда тебе нужно дать бизнесу понятное объяснение: «В среднем мы ошибаемся на X рублей». Например, для прогноза времени доставки .
MSE — Mean Squared Error (Среднеквадратическая ошибка)
MSE возводит каждую ошибку в квадрат, а затем берёт среднее .
Формула:MSE=n1i=1∑n(yi−y^i)2
Особенности:
- Сильно штрафует большие ошибки. Ошибка 100 000 превращается в 10 000 000 000 .
- Сложно интерпретировать из-за квадрата. Если предсказываешь рубли, то MSE измеряется в «квадратных рублях».
Когда использовать: MSE хорошо подходит, когда большие ошибки критически важны. Например, в финансовом прогнозировании, где ошибка в предсказании цены акции может стоить огромных денег, лучше выбрать модель с меньшей MSE .
RMSE — Root Mean Squared Error (Корень из среднеквадратической ошибки)
RMSE — это квадратный корень из MSE .
Формула:RMSE=MSE=n1i=1∑n(yi−y^i)2
Особенности:
- Интерпретируема и штрафует большие ошибки. RMSE возвращает нас в исходные единицы измерения (рубли, метры, градусы). Как и MSE, RMSE сильнее чувствительна к большим ошибкам .
- Является наиболее популярной метрикой в отчётах .
Когда использовать: RMSE — золотая середина. Используй её, когда хочешь «наказать» модель за большие ошибки, но при этом хочешь получить ответ в понятных единицах (например, «стандартное отклонение ошибки составляет 10 000 рублей») .
R² — R-squared (Коэффициент детерминации)
R² — это не мера ошибки, а мера объяснённой дисперсии. Он показывает, насколько хорошо модель объясняет изменения целевой переменной по сравнению с самой простой моделью — предсказанием среднего значения .
Формула (упрощённо):R2=1−Сумма квадратов отклонений от среднегоСумма квадратов ошибок модели
Интерпретация:
1.0— идеальная модель (ошибок нет) .0.0— модель не лучше, чем просто предсказание среднего .< 0.0— модель хуже, чем предсказание среднего .
Особенности:
- Безразмерная и универсальная. Можно сравнивать качество моделей на разных задачах.
- Может вводить в заблуждение. R² всегда увеличивается при добавлении новых признаков, даже если они бесполезны .
Когда использовать: R² — отличный «быстрый диагноз». Если R² = 0.85, это значит, что модель объясняет 85% изменчивости данных . Это хороший способ объяснить качество модели нетехническим специалистам.
Сравнение метрик
| Метрика | Единицы измерения | Чувствительность к выбросам | Лучшее значение |
|---|---|---|---|
| MAE | Исходные | Низкая | 0 |
| MSE | Квадрат исходных | Высокая | 0 |
| RMSE | Исходные | Высокая | 0 |
| R² | Безразмерная | Зависит | 1 |
Совет: Используй MAE, если хочешь понять реальный средний размер ошибки. Используй RMSE, если хочешь наказать модель за большие промахи. Используй R², чтобы оценить, насколько модель вообще «полезнее» среднего значения.
Реализация на Python с scikit-learn
import numpy as np
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
# Пример данных
y_true = [300000, 150000, 200000, 350000, 500000]
y_pred = [310000, 140000, 220000, 330000, 490000]
# 1. MAE
mae = mean_absolute_error(y_true, y_pred)
print(f"MAE: {mae:.2f} руб.")
# 2. MSE
mse = mean_squared_error(y_true, y_pred)
print(f"MSE: {mse:.2f} руб.²")
# 3. RMSE
# Для RMSE нужно передать squared=False, либо взять корень
rmse = mean_squared_error(y_true, y_pred, squared=False)
print(f"RMSE: {rmse:.2f} руб.")
# 4. R²
r2 = r2_score(y_true, y_pred)
print(f"R²: {r2:.3f}")Результат:
MAE: 14000.00 руб.
MSE: 270000000.00 руб.²
RMSE: 16431.68 руб.
R²: 0.938Что мы видим:
- MAE = 14 000 руб. — модель ошибается в среднем на 14 000 рублей.
- RMSE = 16 432 руб. — большие ошибки (например, промах на 20 000) немного «поднимают» этот показатель.
- R² = 0.938 — модель объясняет почти 94% изменчивости цен. Это очень хороший результат.
Полный пример: оценка модели на реальных данных
import pandas as pd
import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
# 1. Загружаем данные
housing = fetch_california_housing()
X = housing.data
y = housing.target
# 2. Делим на train/test
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 3. Обучаем модель
model = LinearRegression()
model.fit(X_train, y_train)
# 4. Предсказываем
y_pred = model.predict(X_test)
# 5. Считаем метрики
mae = mean_absolute_error(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
rmse = mean_squared_error(y_test, y_pred, squared=False)
r2 = r2_score(y_test, y_pred)
print("=== Оценка модели ===")
print(f"MAE: {mae:.3f} (цена дома в 100 000 $)")
print(f"MSE: {mse:.3f}")
print(f"RMSE: {rmse:.3f} (цена дома в 100 000 $)")
print(f"R²: {r2:.3f}")Результат (примерный):
=== Оценка модели ===
MAE: 0.532 (цена дома в 100 000 $)
MSE: 0.556
RMSE: 0.746 (цена дома в 100 000 $)
R²: 0.576Интерпретация: Модель на тестовых данных объясняет 57.6% дисперсии цен на жильё в Калифорнии. В среднем она ошибается на 53 200 долларов.
Вывод: Какую метрику выбрать?
- Выбери MAE, если хочешь сказать бизнесу: «Мы ошибаемся в среднем на X». Если большие ошибки для тебя не катастрофа.
- Выбери RMSE, если хочешь «наказать» модель за большие ошибки, но при этом сохранить интерпретацию в исходных единицах.
- Используй R², как универсальную меру качества. Всегда смотри на него в первую очередь, но не принимай решение только по нему. Сравнивай R² нескольких моделей на одних и тех же данных.
- Не полагайся на одну метрику. Используй минимум две — одну для размера ошибки (MAE/RMSE) и R² для объяснённой дисперсии.
Задачи для закрепления
Задача 1. Вычисли MAE для y_true = [1, 2, 3] и y_pred = [2, 2, 4].
Задача 2. Вычисли MSE для тех же данных.
Задача 3. В чём главное отличие MAE от MSE/RMSE?
Задача 4. Что означает R² = 0.85?
Задача 5. Напиши код для вычисления RMSE и R² с помощью scikit-learn.
Ответы:
Задача 1.
mae = mean_absolute_error([1, 2, 3], [2, 2, 4]) # 0.667Задача 2.
mse = mean_squared_error([1, 2, 3], [2, 2, 4]) # 0.667Задача 3.
MAE не штрафует большие ошибки сильнее маленьких. MSE (и RMSE) возводят ошибки в квадрат, поэтому большие ошибки дают больший вклад в итоговую метрику.
Задача 4.
Модель объясняет 85% изменчивости целевой переменной. Оставшиеся 15% — вариация, которую модель не смогла уловить.
Задача 5.
from sklearn.metrics import mean_squared_error, r2_score
rmse = mean_squared_error(y_true, y_pred, squared=False)
r2 = r2_score(y_true, y_pred)Нюансы и подводные камни
R² и добавление новых признаков
R² почти всегда увеличивается при добавлении нового признака, даже если он не помогает. Для корректировки используй Adjusted R² (скорректированный R²), который штрафует за лишние признаки.
MAE, MSE и выбросы
Если у тебя в данных есть выбросы (например, одно аномально дорогое жильё), MAE даст более «честную» оценку средней ошибки, чем MSE/RMSE, которые «дёрнутся» из-за этого выброса.
Масштаб данных
R² безразмерен, поэтому его можно использовать для сравнения разных задач. MAE и RMSE зависят от масштаба. RMSE в задаче о ценах на рубли будет в 100 раз больше, чем в задаче о ценах на доллары.
Частые ошибки и как их избежать
Ошибка 1: Использовать R² для сравнения моделей с разным количеством признаков
# R² может быть выше у модели с большим числом признаков
# Используй Adjusted R² или Cross-ValidationОшибка 2: Выбирать модель только по RMSE
# Модель может предсказывать нестабильно
# Проверь распределение ошибокОшибка 3: Забывать, что R² — это не процент правильных ответов
R² — это доля объяснённой дисперсии, а не процент правильных предсказаний.
Шпаргалка
| Что нужно | Как пишется |
|---|---|
| MAE | mean_absolute_error(y_true, y_pred) |
| MSE | mean_squared_error(y_true, y_pred) |
| RMSE | mean_squared_error(y_true, y_pred, squared=False) |
| R² | r2_score(y_true, y_pred) |
| Подсчёт метрик | from sklearn.metrics import ... |
Заключение
Сегодня мы узнали:
- MAE — средняя абсолютная ошибка. Самая интуитивная и устойчивая к выбросам .
- MSE — среднеквадратическая ошибка. Сильно штрафует большие ошибки .
- RMSE — корень из MSE. Интерпретируема, как и MAE, но также чувствительна к выбросам .
- R² — коэффициент детерминации. Показывает, насколько модель лучше, чем «просто среднее» .




