Проверка модели
Модель обучилась. Но насколько хорошо она будет работать на новых данных? Это главный вопрос машинного обучения, и отвечать на него нужно честно.
Переобучение
Представь ученика, который выучил ответы к задачам из учебника наизусть. На этих задачах он получит «отлично», а на контрольной с новыми задачами — провалится. Модели ведут себя так же: сложная модель может запомнить обучающие примеры вместе со случайным шумом и плохо работать на новых данных. Это называется переобучением.
Поэтому качество модели проверяют на данных, которых она не видела при обучении.
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— «зерно» перемешивания: с одним и тем же значением разбиение всегда одинаковое. Это важно, чтобы результаты можно было повторить;- можно передать несколько массивов сразу — все разобьются согласованно.
Схема работы:
- разбить данные;
- обучить модель только на
X_train, y_train; - предсказать для
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).