Метрики регрессии: MAE, MSE, RMSE, R2

Метрики регрессии: MAE, MSE, RMSE, R2 Scikit-learn

Привет! Ты уже научился обучать модели регрессии — например, линейную регрессию для предсказания цен на жильё. Но как понять, насколько хороша твоя модель? Просто посмотреть на предсказанные числа недостаточно. Нужны чёткие численные метрики, которые скажут: «Модель ошибается в среднем на 5 000 долларов» или «Модель объясняет 85% изменчивости данных».

В этой статье мы разберём четыре ключевые метрики для регрессии:

  • MAE — средняя абсолютная ошибка
  • MSE — среднеквадратическая ошибка
  • RMSE — корень из среднеквадратической ошибки
  •  — коэффициент детерминации

Узнаем, что каждая из них говорит о модели, и когда какую выбирать.

Что нужно знать перед началом

Для этого урока тебе понадобится:

  • Установленный scikit-learn (pip install scikit-learn)
  • Базовое понимание машинного обучения
  • Знание линейной регрессии из предыдущих статей

Совет: Никогда не полагайся на одну метрику! Каждая из них показывает разные аспекты качества модели. Используй их в комбинации, чтобы получить полную картину .

Основная часть

Что такое метрики регрессии?

Когда ты предсказываешь непрерывные значения (цену дома, температуру, продажи), ты хочешь понять, насколько близки твои предсказания к реальным данным. В отличие от классификации, где мы просто считаем правильные ответы, здесь мы измеряем расстояние между предсказанным и фактическим значением. Метрики регрессии отвечают на вопрос: «Насколько мы ошиблись?». 

Представь, что ты предсказал цены на 10 квартир. Метрики покажут тебе среднюю ошибку, самые большие промахи и насколько вообще модель лучше, чем просто «угадывание» средней цены.

Совет: Ошибка считается как ошибка = фактическое_значение - предсказанное_значение. Наша задача — сделать эту ошибку как можно меньше.

MAE — Mean Absolute Error (Средняя абсолютная ошибка)

MAE — самая простая для понимания метрика. Она вычисляет среднее абсолютное значение всех ошибок .

Формула:MAE=1ni=1nyiy^iMAE=n1​i=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=1ni=1n(yiy^i)2MSE=n1​i=1∑n​(yi​−y^​i​)2

Особенности:

  • Сильно штрафует большие ошибки. Ошибка 100 000 превращается в 10 000 000 000 .
  • Сложно интерпретировать из-за квадрата. Если предсказываешь рубли, то MSE измеряется в «квадратных рублях».

Когда использовать: MSE хорошо подходит, когда большие ошибки критически важны. Например, в финансовом прогнозировании, где ошибка в предсказании цены акции может стоить огромных денег, лучше выбрать модель с меньшей MSE .

RMSE — Root Mean Squared Error (Корень из среднеквадратической ошибки)

RMSE — это квадратный корень из MSE .

Формула:RMSE=MSE=1ni=1n(yiy^i)2RMSE=MSE​=n1​i=1∑n​(yi​−y^​i​)2​

Особенности:

  • Интерпретируема и штрафует большие ошибки. RMSE возвращает нас в исходные единицы измерения (рубли, метры, градусы). Как и MSE, RMSE сильнее чувствительна к большим ошибкам .
  • Является наиболее популярной метрикой в отчётах .

Когда использовать: RMSE — золотая середина. Используй её, когда хочешь «наказать» модель за большие ошибки, но при этом хочешь получить ответ в понятных единицах (например, «стандартное отклонение ошибки составляет 10 000 рублей») .

R² — R-squared (Коэффициент детерминации)

R² — это не мера ошибки, а мера объяснённой дисперсии. Он показывает, насколько хорошо модель объясняет изменения целевой переменной по сравнению с самой простой моделью — предсказанием среднего значения .

Формула (упрощённо):R2=1Сумма квадратов ошибок моделиСумма квадратов отклонений от среднегоR2=1−Сумма квадратов отклонений от среднегоСумма квадратов ошибок модели​

Интерпретация:

  • 1.0 — идеальная модель (ошибок нет) .
  • 0.0 — модель не лучше, чем просто предсказание среднего .
  • < 0.0 — модель хуже, чем предсказание среднего .

Особенности:

  • Безразмерная и универсальная. Можно сравнивать качество моделей на разных задачах.
  • Может вводить в заблуждение. R² всегда увеличивается при добавлении новых признаков, даже если они бесполезны .

Когда использовать: R² — отличный «быстрый диагноз». Если R² = 0.85, это значит, что модель объясняет 85% изменчивости данных . Это хороший способ объяснить качество модели нетехническим специалистам.

Сравнение метрик

МетрикаЕдиницы измеренияЧувствительность к выбросамЛучшее значение
MAEИсходныеНизкая0
MSEКвадрат исходныхВысокая0
RMSEИсходныеВысокая0
БезразмернаяЗависит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 долларов.

Вывод: Какую метрику выбрать?

  1. Выбери MAE, если хочешь сказать бизнесу: «Мы ошибаемся в среднем на X». Если большие ошибки для тебя не катастрофа.
  2. Выбери RMSE, если хочешь «наказать» модель за большие ошибки, но при этом сохранить интерпретацию в исходных единицах.
  3. Используй R², как универсальную меру качества. Всегда смотри на него в первую очередь, но не принимай решение только по нему. Сравнивай R² нескольких моделей на одних и тех же данных.
  4. Не полагайся на одну метрику. Используй минимум две — одну для размера ошибки (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² — это доля объяснённой дисперсии, а не процент правильных предсказаний.

Шпаргалка

Что нужноКак пишется
MAEmean_absolute_error(y_true, y_pred)
MSEmean_squared_error(y_true, y_pred)
RMSEmean_squared_error(y_true, y_pred, squared=False)
r2_score(y_true, y_pred)
Подсчёт метрикfrom sklearn.metrics import ...

Заключение

Сегодня мы узнали:

  • MAE — средняя абсолютная ошибка. Самая интуитивная и устойчивая к выбросам .
  • MSE — среднеквадратическая ошибка. Сильно штрафует большие ошибки .
  • RMSE — корень из MSE. Интерпретируема, как и MAE, но также чувствительна к выбросам .
  •  — коэффициент детерминации. Показывает, насколько модель лучше, чем «просто среднее» .

КВИЗ

Что дальше?

Оцените статью
IMI-DS - PYTHON LERNEN
Содержание
Оглавление ×