Анализ ошибок регрессии: от общей MAE к следующему эксперименту
Общая ошибка регрессии показывает масштаб проблемы, но редко подсказывает исправление. Разберём остатки по знаку и диапазонам, чтобы выбрать следующий эксперимент с данными и признаками.
У одинаковой MAE бывают разные причины
Модель прогнозирует время доставки. MAE равна восьми минутам: примерно такой результат был и до добавления новых признаков. Сама цифра не объясняет, что делать дальше. Возможно, модель слегка ошибается на большинстве заказов. Возможно, она почти точна в городе и сильно недооценивает дальние доставки. Эти ситуации требуют разной работы.
Сохраните для каждой проверочной строки факт y и прогноз p. Определим остаток как p−y: отрицательное значение означает недооценку, положительное — переоценку. Это соглашение надо написать в отчёте один раз, потому что в статистических пакетах нередко используют противоположный знак. Средний остаток показывает направление смещения, MAE — размер ошибки без взаимного погашения знаков.
Начните с нескольких заранее понятных срезов: расстояние, зона доставки, тип товара, время суток. Они должны существовать на момент решения. Разбиение по фактическому времени тоже бывает полезно для расследования, но его нельзя использовать как маршрутизатор модели: факт ещё неизвестен при прогнозе.
Отчёт для коротких и длинных маршрутов
В примере расстояние уже превращено в два операционных диапазона. Четыре близкие доставки прогнозируются с разнонаправленной небольшой ошибкой, две дальние систематически занижены. Код считает численность, MAE и средний остаток. Для настоящей таблицы добавьте id заказа, чтобы от строки отчёта можно было перейти к исходным сведениям.
Используем данные независимой проверки. Остатки на обучающих строках помогут найти ошибки данных, но они не покажут ожидаемое качество на новых заказах. Сначала сохраните исходную оценку, затем расследуйте обнаруженную закономерность и проверяйте исправление на новом периоде.
rows = [
("near", 20, 18), ("near", 20, 22),
("near", 30, 28), ("near", 30, 32),
("far", 60, 40), ("far", 80, 60),
]
for group in ["near", "far"]:
errors = [p-y for g, y, p in rows if g == group]
mae = sum(abs(e) for e in errors) / len(errors)
bias = sum(errors) / len(errors)
print(group, "n=", len(errors), "MAE=", mae, "bias=", bias)
if group == "far":
assert mae == 20 and bias == -20
Для near получатся MAE 2 и смещение 0. Для far — MAE 20 и смещение −20. У дальних маршрутов ошибки смотрят в одну сторону. Прибавить двадцать минут всем прогнозам было бы плохим следующим шагом: близкие доставки уже в среднем сбалансированы. Нужна гипотеза, объясняющая различие групп.
Откройте дальние заказы и проверьте входы. Бывает, расстояние считалось по прямой, а переправа удлиняет маршрут; отсутствует признак загородной зоны; время ожидания на складе входит в целевую переменную, но признаки описывают только движение курьера. Каждый вариант переводится в конкретный эксперимент: исправить расчёт расстояния, добавить доступный заранее признак либо изменить определение задачи.
Дальше посмотрите распределение ошибок внутри far. Две строки в примере одинаковы по величине недооценки, а в реальном наборе могут существовать десятки небольших ошибок и одна аномальная запись. Проверьте единицы времени, часовые пояса и статус отменённых заказов до усложнения модели. Если нужны графики, полезны остаток против прогноза и остаток против расстояния; обе оси должны иметь подписанные единицы.
Выбранную гипотезу оформите как изменение с ожидаемым эффектом: уменьшаем отрицательное смещение на дальних маршрутах, сохраняем MAE близких. После обучения пересчитайте тот же отчёт. Если менять сразу признаки, фильтры строк и функцию потерь, вы получите новый результат, но потеряете понимание причины. Одна проверяемая идея облегчает и разработку, и объяснение модели коллегам.
Для следующего шага пригодится сравнение штрафов MAE и RMSE.
В платном курсе «ML Engineer / Data Scientist: табличные модели в продакшн» вы будете создавать признаки и разбирать причины ошибок табличных моделей. Результат каждого эксперимента сохраняется в проверяемом артефакте: например, отчёте метрик или ноутбуке. Это удобный путь от обнаруженного смещения к проверке новой гипотезы. Откройте программу курса.
Продолжить на практике
- ML Engineer / Data Scientist: табличные модели в продакшн ↗
Практический курс для тех, кто хочет получить навыки ML Engineer / Data Scientist на реальных табличных задачах. В курсе Вы не просто обучите CatBoost/LightGBM, а соберёте полноценный production-style пайплайн: подготовка данных, feature engineering (генерация признаков), корректная валидация, защита от leakage (утечек), тюнинг через Optuna, интерпретация через SHAP, batch-инференс и REST API для предсказаний.
