Зачем данные делят на обучающую и тестовую выборку?
Данные делят на выборки, чтобы честно проверить, насколько модель научилась решать задачу, а не просто запомнила показанные примеры. Если проверять модель на тех же данных, на которых она обучалась, оценка точности будет завышенной и не покажет, как модель поведёт себя на новых, реальных данных после запуска.
Разделение решает конкретную практическую проблему: без независимой проверки легко спутать модель, которая действительно нашла закономерность, с моделью, которая просто выучила ответы наизусть. Тестовая выборка играет роль экзамена с незнакомыми билетами — только по нему видно, чему модель научилась на самом деле, а не что она запомнила во время подготовки.
Эта проверка нужна на любом этапе жизни модели, а не только один раз перед запуском: при добавлении новых данных, смене признаков или пересмотре архитектуры оценку на независимой тестовой выборке повторяют заново, чтобы убедиться, что изменения действительно улучшили качество, а не подстроили модель под конкретный набор примеров, который уже видели раньше.
Чем отличаются обучающая, валидационная и тестовая выборки?
Роли трёх выборок легко представить через подготовку к экзамену: обучающая выборка — это учебник, по которому модель осваивает материал; валидационная — пробный тест, по итогам которого корректируют метод подготовки; тестовая — единственная настоящая экзаменационная работа, которую модель видит только один раз и по которой судят об итоговом результате.
| Выборка | Что делает модель | Когда используется | Типичная доля |
|---|---|---|---|
| Обучающая (train) | Настраивает параметры на этих примерах | На протяжении всего обучения | 70–80% |
| Валидационная (validation) | Не участвует в обучении, но проверяется многократно | После каждой эпохи или итерации | 10–15% |
| Тестовая (test) | Не видна модели вообще до финальной проверки | Один раз, в самом конце | 10–15% |
Ключевое правило простое: тестовая выборка не должна влиять ни на один выбор в процессе разработки — ни на подбор настроек модели, ни на выбор архитектуры, ни даже на решение остановить обучение. Как только тестовые данные хоть раз участвуют в принятии решения, они фактически превращаются в ещё одну валидационную выборку и перестают быть независимой проверкой.
Какие пропорции использовать при разбиении данных на выборки?
Универсального соотношения не существует — оно зависит от объёма данных. На небольших датасетах в тысячи примеров чаще берут около 70% на обучение и по 15% на валидацию и тест, чтобы оставить данных достаточно для надёжной проверки. На датасетах в миллионы примеров валидацию и тест можно сократить до нескольких процентов.
Что влияет на выбор пропорций:
- Объём датасета — чем больше данных, тем меньше в относительных процентах можно отдавать под валидацию и тест.
- Баланс классов — редкие классы требуют более аккуратного, стратифицированного разбиения, сохраняющего долю каждого класса во всех выборках.
- Стоимость ошибки — в критичных задачах (медицина, финансы) тестовую выборку иногда увеличивают в ущерб размеру обучающей, чтобы получить более надёжную оценку.
На исследовательских задачах, где нужно многократно сравнивать разные архитектуры между собой, иногда выбирают более консервативное деление — например, 60% на обучение и по 20% на валидацию и тест, — жертвуя размером обучающей выборки ради более надёжного и воспроизводимого сравнения моделей.
Как проверить, что разбиение на выборки сделано корректно?
Корректность разбиения проверяют по трём признакам: распределение классов и ключевых признаков в обучающей и тестовой выборках похоже; между выборками нет прямых или почти точных дубликатов примеров; а метрика качества модели на валидации и на тесте отличается несильно — большой разрыв почти всегда указывает на ошибку в разбиении или на переобучение.
Полезная практика — до начала обучения быстро сравнить базовую статистику по обеим выборкам: долю каждого класса, средние значения ключевых признаков, диапазон дат для данных с временной составляющей. Если распределения заметно расходятся, разбиение стоит переделать — иначе оценка качества модели на тесте не будет отражать её реальное поведение на новых данных после запуска в работу.
Что такое утечка данных (data leakage) и как её избежать?
Утечка данных — это ситуация, когда информация из тестовой выборки прямо или косвенно попадает в процесс обучения, из-за чего оценка качества модели оказывается завышенной и не отражает реальное поведение на новых данных. Типичный источник — предобработка (масштабирование, заполнение пропусков) признаков по всему датасету ещё до разделения на выборки.
Другой частый случай — дублирующиеся или почти одинаковые примеры, случайно оказавшиеся и в обучающей, и в тестовой выборке: модель формально «предсказывает» правильно лишь потому, что уже видела похожий пример на этапе обучения. Распространённые источники утечки:
- Дубликаты или почти идентичные примеры в обучающей и тестовой выборках.
- Масштабирование или нормализация признаков по всему датасету до разделения на выборки.
- Признаки, которые физически не могут быть известны на момент предсказания — например, данные из будущего.
- Записи одного и того же объекта (пользователя, пациента, устройства), «расползшиеся» между разными выборками.
В задачах с временными рядами утечка возникает ещё и тогда, когда данные из будущего попадают в обучение модели, которая должна предсказывать прошлое или настоящее. Разбиение по времени, а не случайным образом, — стандартное решение для таких задач.
Что такое кросс-валидация и зачем она нужна?
Кросс-валидация — способ проверки модели, при котором данные разбивают на несколько частей (folds), и модель по очереди обучается на всех частях, кроме одной, а проверяется на оставшейся. Так каждый пример хотя бы раз побывает и в обучении, и в проверке, а итоговая оценка усредняется по всем разбиениям.
Самый распространённый вариант — k-fold с 5 или 10 частями: чем больше folds, тем надёжнее оценка, но тем дороже вычисления, потому что модель обучается заново для каждой части. Кросс-валидация особенно полезна, когда данных немного и единичное случайное разбиение может дать нестабильную оценку — например, если по случайности в тест попали преимущественно лёгкие или, наоборот, самые сложные примеры. Итоговую тестовую выборку при этом всё равно оставляют отдельно и не используют в кросс-валидации вовсе.
Для несбалансированных данных применяют стратифицированный k-fold — вариант, при котором каждая часть сохраняет исходную долю классов, а не формируется полностью случайно. Это особенно важно, если редкий класс и без того встречается в датасете нечасто: обычный случайный k-fold рискует оставить его почти без представителей в отдельных частях.