Test Data
Тестовые данные — это отложенная выборка, которую оценивают один раз после завершения обучения и настройки, чтобы оценить производительность на новых данных. Разделение выборок, размер, подводные камни и код.
Тестовые данные, также называемые тестовой или отложенной выборкой, — это часть набора данных, зарезервированная для оценки готовой модели машинного обучения (ML). Они не участвуют в подгонке весов модели и не влияют на решения при разработке: выбор архитектуры, гиперпараметров, контрольной точки или порога уверенности. Оценку проводят после того, как все эти решения приняты. Поскольку модель и её разработчики никогда не подстраивались под тестовые данные, измеренные точность, полнота или средняя точность (mAP) дают несмещённую оценку того, как модель будет работать на новых данных из того же распределения. Именно на этот показатель команды опираются, решая, готова ли модель к развёртыванию.
Разделение на обучающую, валидационную и тестовую выборки#
Обычно набор данных делят на три непересекающиеся выборки с разными задачами:
- Обучающие данные: примеры, на которых обучается оптимизатор, корректируя веса для уменьшения функции потерь.
- Валидационные данные: многократно оцениваются в процессе разработки для сравнения гиперпараметров, ранней остановки обучения и выбора лучшей контрольной точки.
- Тестовые данные: оцениваются один раз в конце, чтобы получить метрику, по которой оценивают проект.
Для наборов данных с тысячами примеров часто используют разделение 80/10/10 или 70/15/15, а в наборах с миллионами примеров для теста можно оставить несколько процентов. Необходимый размер тестовой выборки зависит от требуемой точности оценки: стандартная ошибка точности p, измеренной на n примерах, равна квадратному корню из p(1 − p)/n. Поэтому для 1 000 тестовых изображений с точностью 90% 95-процентный доверительный интервал составляет примерно ±1,9 процентного пункта, а для 10 000 изображений он сужается примерно до ±0,6. Терминология различается в разных областях: во многих статьях итоговые результаты на ImageNet приводятся по официальной валидационной выборке, поскольку тестовые метки ImageNet не публикуются. Для Ultralytics YOLO в YAML-файле набора данных обязательно указываются пути train и val, а путь test можно указать дополнительно. Во время обучения val оценивается после каждой эпохи, чтобы выбрать best.pt, а model.val(data="data.yaml", split="test") оценивает готовую модель на отложенных изображениях в режиме валидации.
Почему тестовая выборка должна оставаться нетронутой#
Каждое решение, принятое на основе оценки, немного подгоняет модель под эти данные. Если на валидационной выборке сравниваются многочисленные конфигурации, победителем отчасти становится та, которой повезло именно на этих примерах, поэтому её оценка завышает качество на других данных. В следующем эксперименте на scikit-learn для классификатора методом k ближайших соседей выбирается лучшее число соседей на небольшом зашумлённом наборе данных, а затем сравнивается точность победителя на валидации и тесте для 30 случайных наборов данных:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
val_scores, test_scores = [], []
for seed in range(30):
# A small, noisy dataset split 60/20/20 into train, validation, and test
X, y = make_classification(n_samples=400, n_features=20, n_informative=4, flip_y=0.2, random_state=seed)
X_train, X_rest, y_train, y_rest = train_test_split(X, y, test_size=0.4, random_state=seed)
X_val, X_test, y_val, y_test = train_test_split(X_rest, y_rest, test_size=0.5, random_state=seed)
# Model selection: keep the neighbor count with the best validation accuracy
scores = {k: KNeighborsClassifier(k).fit(X_train, y_train).score(X_val, y_val) for k in range(1, 51)}
best_k = max(scores, key=scores.get)
val_scores.append(scores[best_k])
# The test set is scored once, after the choice is final
test_scores.append(KNeighborsClassifier(best_k).fit(X_train, y_train).score(X_test, y_test))
print(f"Chosen model, mean of 30 runs: validation {np.mean(val_scores):.3f}, test {np.mean(test_scores):.3f}")Средняя оценка выбранных моделей составляет 0,805 на валидации и 0,758 на тесте, поэтому отбор среди 50 кандидатов завысил валидационную оценку почти на пять процентных пунктов. Если настраивать модель по тестовой выборке, этот разрыв останется незамеченным, а тот же эффект завышения перейдёт в опубликованный результат — это разновидность утечки данных. В публичных бенчмарках от этого защищаются, скрывая метки: результаты на тестовой выборке COCO test-dev получают, отправляя предсказания на сервер оценки. Для больших языковых моделей (LLM) тестовые вопросы, попавшие в данные предобучения из интернета, загрязняют бенчмарк. Поэтому LiveCodeBench постоянно добавляет новые конкурсные задачи и оценивает каждую модель на задачах, опубликованных после даты завершения её обучения.
Создание надёжной тестовой выборки#
Результат оценки на тесте предсказывает качество в реальных условиях только тогда, когда тестовая выборка похожа на данные, с которыми столкнётся модель: это могут быть уличные сцены для автономных автомобилей или снимки для анализа медицинских изображений:
- Учитывай условия развёртывания: камеры, освещение, времена года, география и баланс классов должны отражать условия production. В тестовую выборку для автомобильного детектора нужны ночные, дождливые и снежные сцены, даже если большинство поездок проходит в ясную погоду.
- Не допускай пересечения: кадры одного видео, снимки одного пациента и фотографии одной сцены должны находиться в одной выборке. Данные, упорядоченные по времени, разделяют по датам, чтобы проверять модель на будущем.
- Проверяй на разных источниках: во внешней валидации медицинских изображений используются снимки из других больниц и с других моделей сканеров. Так можно проверить, научилась ли модель распознавать анатомию или особенности оборудования конкретного учреждения.
- Проверь разметку: ошибки в тестовой разметке ограничивают измеряемую точность и могут изменить порядок моделей, поэтому тестовую разметку нужно проверять особенно тщательно.
- Показывай результаты по срезам: метрики по классам и условиям помогают обнаружить ошибки, которые скрывает единое среднее значение.
Даже тщательно пересобранная тестовая выборка может изменить результаты: когда исследователи воссоздали тестовую выборку ImageNet по исходной процедуре сбора данных, точность снизилась на 11–14 процентных пунктов для широкого набора моделей. При этом улучшения на исходной тестовой выборке сохранялись, а авторы объяснили падение тем, что новые изображения были немного сложнее, а не многолетним повторным использованием тестовой выборки.
Тестовые данные и связанные понятия#
- Перекрёстная проверка: позволяет по очереди использовать разные части данных для разработки в качестве валидационной выборки и получить более стабильную оценку для выбора модели. Для получения итогового показателя всё равно нужна отдельная тестовая выборка.
- Бенчмарковый набор данных: общедоступная тестовая выборка, используемая всеми исследователями в определённой области. Поскольку годами каждая команда оценивает на ней свои модели, постепенно она перестаёт быть незнакомыми данными.
- Эталонный набор данных: тщательно собранный высококачественный набор с проверенными ответами, часто используемый как фиксированная тестовая выборка для регрессионного тестирования приложений на базе LLM.










