Гайд · TNWS AI

Как оценить MLPRegressor по MAE, RMSE и R²

5 мин—

Три проверяемые регрессионные метрики: MAE в исходных единицах, чувствительный к крупным ошибкам RMSE и R² относительно среднего baseline.

Задача и применимость

Актуальный запрос: «как оценить MLPRegressor MAE RMSE R2». Не сводить оценку числового прогноза к одному score. MAE показывает среднюю абсолютную ошибку в единицах target. RMSE сильнее реагирует на крупные отклонения. R² сравнивает качество с константным прогнозом среднего и может быть отрицательным. Метрики отвечают на разные вопросы и должны считаться на одной зафиксированной test-выборке.

Материал применим к scikit-learn 1.8.0 и числовой регрессии на табличных данных. MLPRegressor — полносвязный многослойный перцептрон, который предсказывает непрерывные значения; это не классификатор и не генеративная модель. Пример использует синтетические данные, чтобы результат можно было повторить без внешних файлов, ключей и персональных сведений. Порог теста подтверждает именно код примера и не является обещанием для рабочего набора. Перед запуском убедитесь, что используется указанная версия API и отдельное воспроизводимое окружение с закреплёнными зависимостями.

Пошаговое решение

  1. Обучите Pipeline на train.
  2. Получите один массив predictions для test.
  3. Посчитайте MAE, RMSE и R² из одних y_true/y_pred.
  4. Сравните с DummyRegressor(strategy='mean') как baseline.

Готовый проверяемый шаблон

from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split

X, y = make_regression(n_samples=600, n_features=8, n_informative=6,
                       noise=5.0, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.25, random_state=42
)
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPRegressor
from sklearn.dummy import DummyRegressor
from sklearn.metrics import mean_absolute_error, root_mean_squared_error, r2_score

model = make_pipeline(StandardScaler(), MLPRegressor(hidden_layer_sizes=(8,), solver="lbfgs", max_iter=2000, random_state=42))
model.fit(X_train, y_train); pred = model.predict(X_test)
mae = mean_absolute_error(y_test, pred)
rmse = root_mean_squared_error(y_test, pred)
r2 = r2_score(y_test, pred)
dummy = DummyRegressor(strategy="mean").fit(X_train, y_train)
dummy_rmse = root_mean_squared_error(y_test, dummy.predict(X_test))
assert 0 <= mae <= rmse < dummy_rmse
assert r2 > 0.95
print(round(mae,2), round(rmse,2), round(r2,3), round(dummy_rmse,2))

Вход и ожидаемый результат

На тесте из 150 строк получаются четыре числа: MAE, RMSE, R² и RMSE простого среднего baseline. Для фиксированного набора ошибка нейросети меньше baseline, MAE <= RMSE, а R² выше 0,95.

Как проверить результат

Проверьте одинаковую длину y_test и pred, отсутствие NaN и единицы измерения. Добавьте доверительный разброс по нескольким split, если данных мало. Не сравнивайте RMSE проектов с разным масштабом target без нормировки.

Перенос на рабочую нейросеть

Перед заменой синтетики опишите единицу target, допустимый диапазон и момент времени, на который делается прогноз. Сформируйте признаки так, чтобы ни один столбец не содержал будущую информацию. Все преобразования X объединяйте с estimator в Pipeline, а преобразование y — в явно проверяемую обёртку. Зафиксируйте имена и порядок колонок, обработку пропусков, категории и версии данных. Разделяйте строки с учётом времени или групп, если обычный случайный split смешивает связанные наблюдения.

Критерии приёмки

  1. Train и test не пересекаются, индексы разбиения сохранены.
  2. Preprocessing обучается только на train.
  3. Prediction имеет ожидаемую форму, исходные единицы и только конечные значения.
  4. Модель превосходит заранее выбранный простой baseline.
  5. MAE или RMSE проверяется вместе с R² и хвостовой ошибкой.
  6. Повторный запуск в закреплённом окружении воспроизводит контрольный массив predictions.

Регрессионный протокол

Сохраните небольшой обезличенный набор X, y и ожидаемые predictions с численным допуском. После изменения данных или параметров сравните метрики, квантили residuals, число итераций, время fit и latency predict. Гиперпараметры выбирайте на validation либо внутри кросс-валидации; test используйте один раз для оценки окончательной процедуры. Не принимайте выпуск по лучшему случайному split: при небольшом наборе сообщайте разброс нескольких повторов.

Диагностика расхождений

При резком изменении результата проверяйте по порядку: версию набора, target, split, порядок и dtype столбцов, статистики scaler, версии NumPy/SciPy/scikit-learn, random_state, затем optimizer и архитектуру. Сравните одну сохранённую строку до и после preprocessing и prediction двух выпусков. Не увеличивайте сеть до выяснения причины: дополнительная ёмкость может скрыть утечку или усилить переобучение.

Контроль после внедрения

В эксплуатации журналируйте версию модели, схему и агрегированные показатели без исходных персональных признаков. Установите пределы для latency, доли невалидных входов и ошибок на отложенной разметке. Контролируйте drift признаков и residuals. При нарушении порога переключайтесь на предыдущий проверенный артефакт; автоматическое дообучение без независимой проверки не считается безопасным восстановлением.

Границы применимости

Отдельно проверьте область применимости. Интерполяция внутри знакомого диапазона признаков и прогноз для новых условий — разные режимы риска. Зафиксируйте минимумы, максимумы и долю входов вне train-диапазона. Не обрезайте такие значения молча: либо отклоняйте запрос по явному правилу, либо отмечайте низкую надёжность. Для денежных, медицинских и иных критичных величин задайте предметные ограничения результата после консультации с владельцем процесса, а не извлекайте их из случайного синтетического примера.

Типичные ошибки и чего не делать

  • Не называйте R² процентом точности.
  • Не извлекайте квадратный корень из уже готового root_mean_squared_error.
  • Не выбирайте метрику после просмотра выгодного результата.

Не выбирайте конфигурацию по test и не публикуйте одну выгодную метрику без baseline и размера выборки. Не используйте чувствительные признаки без необходимости и правового основания. Для решений с материальными последствиями предусмотрите человеческую проверку, мониторинг и безопасный отказ.

FAQ

Почему RMSE обычно не меньше MAE?

Квадрат сильнее увеличивает вклад больших ошибок.

Может ли R² быть отрицательным?

Да, если модель хуже прогноза среднего на оценочной выборке.

Зачем baseline?

Чтобы понять, превосходит ли модель простое правило.

Официальные источники

Частые вопросы

Почему RMSE обычно не меньше MAE?

Квадрат сильнее увеличивает вклад больших ошибок.

Может ли R² быть отрицательным?

Да, если модель хуже прогноза среднего на оценочной выборке.

Зачем baseline?

Чтобы понять, превосходит ли модель простое правило.

Читайте также

Комментарии

Пока тихо. Скажите первое слово