train_test_split без рассинхронизации X и y
Содержание курса
Тестовая выборка только для оценки: запрет передачи X_test в fit
После разбиения у нас четыре переменных, и их назначение строго разделено: X_train и y_train идут в обучение, X_test и y_test — только в оценку после обучения. Правило записывается так:
model.fit(X_train, y_train) # правильно
# model.fit(X_test, y_test) # ошибка по смыслу
# model.fit(pd.concat([X_train, X_test]), ...) # тоже ошибка
Почему это важно? fit подстраивает параметры модели под те строки, которые она видит. Если в fit попадают строки из X_test, модель обучается на тех же объектах, на которых её потом будут оценивать. Тестовая выборка перестаёт быть независимой, и её метрика начинает отражать не способность модели обобщаться, а то, насколько хорошо она подогналась под конкретные строки.
Это называют утечкой тестовых данных (data leakage). Её эффект — оптимистическое смещение оценки: метрика на тесте может казаться лучше, чем покажет модель на реально новых данных. При этом смещение не обязательно будет большим — оно может быть небольшим и при этом вводить в заблуждение. Важно и то, что хорошая метрика на тесте сама по себе не означает отсутствия утечки: убедиться в корректности разбиения можно, только проверив состав данных, переданных в fit.
Тестовая выборка должна имитировать данные, которые модель встретит после деплоя — данные, которых она никогда не видела. Как только хотя бы одна строка из теста попала в fit, эта гарантия нарушена для всего теста целиком.
