Почему одна и та же модель может выглядеть хорошей и плохой одновременно
С регрессией почти всегда случается один и тот же вопрос: какую метрику смотреть? Если взять только R2, можно получить красивую историю о доле объясненной вариации. Если смотреть только MAE, появится ощущение средней абсолютной ошибки в понятных единицах. Если смотреть RMSE, внимание резко сместится к крупным промахам. И все три истории будут правдивы, но каждая — про свой аспект качества.
Поэтому выбор метрики в регрессии — это не техническая мелочь. Это выбор того, что именно вы считаете дорогой ошибкой.
MAE и RMSE отличаются не только формой записи
$$ RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i - \hat y_i)^2} $$RMSE усиливает влияние крупных ошибок, потому что сначала возводит отклонения в квадрат, а потом только возвращает масштаб через корень. Поэтому эта метрика особенно чувствительна к редким большим промахам модели.
RMSE— корень из средней квадратичной ошибкиn— число наблюдений в выборкеy_i— реальное значение для i-го объекта\hat y_i— предсказание модели для i-го объекта
MAE ведет себя мягче: она считает средний абсолютный промах и поэтому проще интерпретируется в тех же единицах, что и target. Если вы прогнозируете цену квартиры и MAE равна 120 тысячам, это очень читаемый сигнал. RMSE в той же задаче полезнее, если бизнесу особенно больно от редких крупных ошибок и их нужно наказывать сильнее.
А что тогда делает R2
R2 не измеряет ошибку в понятных единицах. Он отвечает на другой вопрос: насколько лучше модель объясняет разброс данных по сравнению с наивным прогнозом среднего. Это полезная метрика, когда нужно быстро понять, есть ли у модели вообще объясняющая сила. Но R2 легко переоценить, если забыть, что он ничего не говорит о масштабе ошибки в рублях, секундах или килограммах.
Поэтому на практике R2 часто идет рядом с MAE или RMSE, а не вместо них.
Как выбирать метрику под задачу
Если тебе важна понятность в бизнес-единицах, начинай с MAE. Если особенно опасны большие промахи, смотри RMSE. Если нужен быстрый сигнал о том, объясняет ли модель данные вообще, смотри R2. В серьезной задаче полезно держать сразу несколько метрик, но при этом понимать, какая из них является главной для принятия решения.
from sklearn.metrics import mean_absolute_error # считаем среднюю абсолютную ошибку в понятных единицах
from sklearn.metrics import mean_squared_error # используем MSE как основу для RMSE
from sklearn.metrics import r2_score # измеряем объясненную долю вариации target
import numpy as np # берем корень из средней квадратичной ошибки
y_true = [100, 120, 130, 160, 200] # реальные значения target
y_pred = [110, 118, 150, 155, 190] # прогнозы модели на тех же объектах
mae = mean_absolute_error(y_true, y_pred) # считаем средний абсолютный промах
rmse = np.sqrt(mean_squared_error(y_true, y_pred)) # усиливаем штраф за крупные ошибки через квадрат
r2 = r2_score(y_true, y_pred) # смотрим, насколько модель лучше простого среднего
print({'mae': round(mae, 3), 'rmse': round(rmse, 3), 'r2': round(r2, 3)}) # читаем все три угла зрения на качествоКогда эти метрики читаются вместе, модель перестает оцениваться «в вакууме». Ты начинаешь видеть, где она просто в среднем неплоха, где опасно ошибается, а где действительно объясняет структуру данных.