Ошибки при train/test split Train/test split — кажется самой простой частью ML.
Train/test split — кажется самой простой частью ML.
Но именно здесь чаще всего ломают всю модель.
И самое опасное — ты можешь даже не заметить
Data Leakage — тихий убийца моделей
Ты случайно «подсматриваешь» в тест.
Примеры:
👉 нормализация на всём датасете до split
👉 target encoding на всех данных
👉 feature, напрямую связанная с таргетом
Модель показывает космический скор,
а в проде — провал.
Случайный split там, где нельзя
Ты делаешь random split…
но данные зависимы.
Примеры:
👉 временные ряды
👉 пользователи (один и тот же user в train и test)
👉 сессии
Модель узнаёт данные, а не обобщает.
Игнорирование времени
В задачах с временем:
👉 ❌ случайный split
👉 ✅ train = прошлое, test = будущее
Иначе ты:
👉 обучаешься на будущем
👉 предсказываешь прошлое
Это не ML. Это читерство.
4️⃣ Дисбаланс классов в split
Ты сделал split и получил:
👉 train: 5% positive
👉 test: 1% positive
Метрики начинают врать.
Решение:
👉 stratified split
Слишком маленький test
Test = 50 объектов
Accuracy = 90%
Звучит круто.
Но это статистический шум.
Маленький test = ненадёжная оценка.
Тест используется как валидация
Классическая ошибка:
👉 обучился
👉 посмотрел на test
👉 подкрутил модель
👉 снова посмотрел
Это уже не test. Это validation 2.0.
Дубликаты в train и test
Если один и тот же объект попал в обе выборки:
Модель просто запоминает.
Особенно критично:
👉 CV
👉 e-commerce
👉 табличные данные с ID
Неправильный split в CV
Cross-validation тоже можно сломать:
👉 leakage между фолдами
👉 группы не учитываются
👉 time-series перемешаны
Используй:
👉 GroupKFold
👉 TimeSeriesSplit
Главный инсайт
Train/test split — это не про «разделить данные».
Это про симуляцию реального мира.
Если split не отражает прод —
все метрики бесполезны.
В одном предложении
Плохой split может сделать плохую модель «идеальной» —
до момента, когда она выйдет в прод.
Всё про Data Science