</>
Тема 2 из 6

Проверка модели

Модель обучилась. Но насколько хорошо она будет работать на новых данных? Это главный вопрос машинного обучения, и отвечать на него нужно честно.

Переобучение

Представь ученика, который выучил ответы к задачам из учебника наизусть. На этих задачах он получит «отлично», а на контрольной с новыми задачами — провалится. Модели ведут себя так же: сложная модель может запомнить обучающие примеры вместе со случайным шумом и плохо работать на новых данных. Это называется переобучением.

Поэтому качество модели проверяют на данных, которых она не видела при обучении.

train_test_split

Обычно часть данных откладывают как тестовую выборку:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • test_size=0.2 — 20 % объектов уйдут в тест (можно и целым числом — количество);
  • объекты перемешиваются перед разбиением;
  • random_state — «зерно» перемешивания: с одним и тем же значением разбиение всегда одинаковое. Это важно, чтобы результаты можно было повторить;
  • можно передать несколько массивов сразу — все разобьются согласованно.

Схема работы:

  1. разбить данные;
  2. обучить модель только на X_train, y_train;
  3. предсказать для X_test и сравнить с y_test.

Метрики регрессии

Пусть y_true — правильные ответы, y_pred — предсказания.

Метрика Что считает Смысл
MAE среднее модулей ошибок на сколько в среднем ошибается модель, в единицах ответа
MSE среднее квадратов ошибок сильно наказывает большие ошибки
RMSE корень из MSE как MSE, но в единицах ответа
R² доля объяснённого разброса 1 — идеально, 0 — как предсказание средним, < 0 — хуже среднего
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

y_true = [100, 150, 200]
y_pred = [110, 140, 230]
print(mean_absolute_error(y_true, y_pred))     # 16.67
print(mean_squared_error(y_true, y_pred))      # 366.67
print(mean_squared_error(y_true, y_pred) ** 0.5)   # RMSE ≈ 19.15
print(r2_score(y_true, y_pred))                # ≈ 0.78

Порядок аргументов важен: сначала правильные ответы, потом предсказания. Для MAE и MSE это не играет роли, а для R² — играет.

Какую метрику выбрать

  • MAE понятнее для человека: «в среднем ошибаемся на 17 тысяч рублей»;
  • MSE и RMSE строже к крупным промахам — если редкие большие ошибки особенно опасны;
  • R² удобен для сравнения разных задач: он не зависит от единиц измерения.

Также полезно

  • model.score(X_test, y_test) у регрессоров сразу возвращает R²;
  • сравнивайте модель с простым «базовым» прогнозом — например, средним по обучающей выборке. Если модель не лучше, она бесполезна.

Итог

  • проверять модель нужно на данных, которых она не видела;
  • train_test_split(X, y, test_size=..., random_state=...) — отложенная выборка, random_state делает разбиение воспроизводимым;
  • MAE, MSE, RMSE — величина ошибки; R² — качество относительно предсказания средним;
  • метрики вызываются как метрика(y_true, y_pred).