Честная проверка модели

Утечка цели и неправильное разделение

Содержание курса

В прошлом уроке мы убедились, что ошибка на train обычно оптимистична как оценка качества на новых данных: модель видела эти строки при fit и частично «запомнила» их. Но это нормальная, ожидаемая оптимистичность. Сегодня разберём другую — патологическую: когда в матрицу X попадает информация, которой у модели в реальной жизни просто не будет. Утечка такого рода может искусственно улучшить показатели и на train, и на test — а значит, даже «хорошая» цифра на test перестаёт быть честной оценкой, и модель окажется бесполезной при первом же реальном прогнозе.

Утечка цели: признак, производный от будущего ответа

Представьте задачу: предсказать, сдаст ли студент экзамен (passed). Датафрейм содержит три признака — hours_studied, attendance_pct и final_score. Всё выглядит разумно, пока не задать один вопрос: будет ли значение final_score известно до того, как станет известен ответ?

Очевидно, нет. Итоговый балл появляется именно тогда, когда экзамен сдан или провален — то есть одновременно с целевой переменной или даже после неё. Признак final_score не просто коррелирует с passed; он фактически и есть passed, выраженный по-другому. Модель, обученная с таким признаком, «предсказывает» исход, зная его заранее.

Это и называется утечкой цели: в X попадает информация, производная от y или доступная только после того, как y известен. Когда признак почти однозначно кодирует целевую переменную, модель может обнаружить эту связь и показать очень низкую ошибку — и на train, и на test, если утечка присутствует в обеих частях. Насколько именно упадёт ошибка, зависит от модели, конкретного разбиения и того, насколько точно признак кодирует цель. Но даже если ошибка снизится лишь умеренно, проблема не исчезает: в реальном прогнозе final_score будет недоступен, и оценка качества на test попросту не отражает то, как модель поведёт себя в реальной задаче.

Диагностика строится не на значении ошибки, а на происхождении признака. Для каждого столбца X нужно спросить: «Это значение существует раньше, чем возникает вопрос, на который мы отвечаем?» Для hours_studied ответ — да, студент занимался до экзамена. Для attendance_pct — да, посещаемость накапливается в течение семестра. Для final_score — нет, этот факт появляется вместе с ответом. Именно поэтому низкая или высокая ошибка на test сама по себе не доказывает наличие или отсутствие утечки: ошибка — следствие, а не причина.

Другой пример: при прогнозе страхового случая (claim=1/0) признак «сумма выплаты» — явная утечка. Размер выплаты становится известен лишь после того, как случай произошёл и урегулирован; в момент, когда модель должна предсказать исход, этого числа ещё не существует. Дополнительный аргумент не нужен: само время появления данных делает признак недопустимым.

Важная граница: утечка — это не «признак сильно коррелирует с y». Высокая корреляция сама по себе норма и желательна. Нарушение возникает тогда, когда признак несёт информацию об исходе, которая в момент реального прогноза ещё недоступна.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения и доступны преподавателям курса. Чтобы попросить преподавателя подключиться, отправьте обращение из диалога.

Проверка решения остаётся отдельным действием.