В машинном обучении недостаточно просто создать алгоритм и показать ему данные. Чтобы понять, действительно ли модель научилась решать задачу, а не просто зазубрила правильные ответы, ее нужно проверить на независимом материале. Эту задачу выполняет тестовая выборка.
| Что разберем | Что это даст на практике |
| Роль тестовой выборки | Поймете, как оценивать реальную эффективность модели до запуска в продакшен |
| Отличие от обучающей и валидационной выборок | Перестанете путать этапы проверки и избежите искажения метрик |
| Правила разделения данных | Сможете корректно нарезать датасет для стандартных задач и временных рядов |
| Типичные ошибки (утечка данных, подгонка) | Не допустите ситуаций, когда модель показывает 99% точности на тестах и проваливается в реальности |
Главный принцип тестовой выборки
Тестовая выборка (test set) – это часть исходных данных, которую алгоритм никогда не видел в процессе обучения. Она используется строго один раз в самом конце, чтобы имитировать работу модели в реальных условиях.
Простой аналог из жизни – подготовка школьника к ЕГЭ:
- Обучающая выборка: задачи из учебника, которые ученик решает с учителем. Он видит ответы и разбирает ошибки.
- Валидационная выборка: пробные экзамены в течение года. Оценки за них не идут в аттестат, но показывают учителю, какие темы нужно подтянуть (настройка параметров модели).
- Тестовая выборка: реальный ЕГЭ. Ученик видит эти задания впервые. Результат этого экзамена – это и есть объективная оценка его знаний, которую нельзя переиграть.
Если показать ученику задания реального ЕГЭ до экзамена, он получит 100 баллов, но это не будет отражать его реальный уровень знаний. То же самое происходит с нейросетями: если тестовые данные попадут в обучение, модель “переобучится”, и ее реальная ценность будет равна нулю.
Три вида выборок: как не перепутать
На практике сырой датасет (например, выгрузку из CRM-системы или базу объявлений о недвижимости) делят на три изолированные части.
1. Обучающая выборка (Train set)
Занимает от 70% до 80% всех данных. На ней модель ищет закономерности, строит веса и формулы.
Пример: Алгоритм оценки квартир изучает 80 000 объявлений, понимая, что близость к метро в Москве повышает цену на 15%, а первый этаж снижает на 10%.
2. Валидационная выборка (Validation set)
Занимает от 10% до 15% данных. На ней разработчик (дата-саентист) проверяет промежуточные результаты и настраивает гиперпараметры: глубину деревьев решений, скорость обучения, количество слоев в нейросети.
Важно: Модель не учится на этих данных напрямую, но разработчик меняет алгоритм, ориентируясь на результаты валидации. Поэтому модель косвенно “подстраивается” под эти данные.
3. Тестовая выборка (Test set)
Занимает оставшиеся 10-15%. Откладывается в “сейф” до момента, когда архитектура модели полностью утверждена.
Важно: На основе результатов тестовой выборки нельзя менять настройки модели. Если результат на тесте вас не устроил, по-хорошему нужно собирать новые данные для нового теста, так как текущая тестовая выборка уже “скомпрометирована” вашим знанием о ней.
Как правильно разбивать данные
Выбор пропорций и метода разделения зависит от объема данных и типа задачи.
Стандартное случайное разделение (Random Split)
Подходит для независимых данных (фотографии, профили клиентов, отдельные тексты). Данные перемешиваются и делятся случайным образом.
- Малые датасеты (до 100 000 строк): классическая пропорция 70/15/15 или 80/10/10.
- Большие данные (миллионы строк): пропорция может быть 98/1/1. Если у вас 10 миллионов фото, 100 тысяч (1%) будет более чем достаточно для объективного теста, нет смысла отрезать 15% и лишать модель полезной информации для обучения.
Хронологическое разделение (Time-based Split)
Обязательно для временных рядов (курсы акций, прогнозирование спроса в ритейле, погода).
Правило: Нельзя перемешивать данные из будущего и прошлого. Обучение всегда идет на старых данных, а тест – на новых.
Пример: Вы прогнозируете продажи интернет-магазина. Обучающая выборка – данные с января по сентябрь. Валидационная – октябрь. Тестовая – ноябрь. Если перемешать дни случайно, модель будет использовать данные от 15 ноября, чтобы “предсказать” продажи 10 ноября, что физически невозможно в реальном бизнесе.
Стратифицированное разделение (Stratified Split)
Используется, когда классы в данных сильно не сбалансированы.
Пример: В базе банка 99% легальных транзакций и 1% мошеннических. При случайном делении в тестовую выборку может вообще не попасть мошенничество. Стратификация гарантирует, что в обучающей, валидационной и тестовой выборках будет строго по 1% мошеннических операций.
Типичные ошибки при работе с тестовой выборкой
Ошибка 1: Утечка данных (Data Leakage)
Возникает, когда информация из тестовой выборки случайно перетекает в обучающую. Модель получает “шпаргалку”, показывает точность 99%, но в продакшене ошибается в половине случаев.
Как происходит:
- Масштабирование (нормализация) данных перед разделением. Если вы высчитали средний доход клиентов по всей базе, а затем разделили ее, обучающая часть уже “знает” среднее значение тестовой части. Правильно: разделить данные, посчитать среднее только на обучающей выборке и применить это правило к тестовой.
- Дубликаты в базе. Один и тот же клиент дважды попал в выгрузку: одна запись ушла в обучение, вторая в тест. Модель просто узнала клиента.
Ошибка 2: Подгонка под тестовую выборку
Разработчик прогоняет модель на тесте, видит точность 85%, решает, что этого мало, меняет параметры нейросети и тестирует снова.
К чему приводит: Тестовая выборка превращается в валидационную. Итоговая метрика становится завышенной и не отражает реальную способность модели работать с новыми данными.
Как избежать: Зафиксировать правило: тест запускается один раз. Если модель провалила тест, нужно возвращаться к этапу сбора данных или кардинальному изменению архитектуры, а не “подкручивать” параметры ради красивой цифры.
Ошибка 3: Несоответствие теста реальным условиям
Тестовая выборка должна максимально походить на те данные, с которыми алгоритм столкнется в жизни.
К чему приводит: Алгоритм отлично распознает чистые, студийные фото лиц (потому что их отложили в тест), но не может распознать человека с веб-камеры в плохом освещении.
Как избежать: Формируйте тестовую выборку из тех источников, откуда будут поступать реальные запросы пользователей.
Ограничение: что делать, если данных слишком мало?
Если у вас всего 500 записей (например, редкие медицинские диагнозы), выделять 20% на тест – непозволительная роскошь. Модели не хватит данных для обучения, а тестовая выборка будет слишком маленькой для объективной оценки.
Решение: Кросс-валидация (K-Fold).
Вместо жесткого выделения одного тестового набора, датасет разбивается, например, на 5 равных блоков. Модель обучается 5 раз: каждый раз она использует 4 блока для обучения, а 1 оставшийся – для проверки. В конце результаты пяти проверок усредняются. Это позволяет использовать все 100% данных и для обучения, и для проверки, избегая случайных перекосов.