Тестовая выборка в машинном обучении

Что такое тестовая выборка в машинном обучении? Узнайте, как она проверяет модель на новых данных, и какие частые ошибки могут испортить финальный прогноз!

В машинном обучении тестовая выборка (Test Set) – это часть данных, которую модель никогда не видела во время обучения. Именно на ней оценивается реальная способность модели делать прогнозы на новых, внешних данных. Ниже подробно рассматриваются основные принципы работы с тестовой выборкой, способы её использования и типичные ошибки.

Что такое тестовая выборка?

Тестовая выборка – это набор объектов, который отделён от обучающей и валидационной частей датасета. После того как модель обучена на обучающих данных, она применяет свои знания к тестовой выборке, генерируя предсказания. На основе разницы между предсказанными и реальными значениями рассчитываются метрики качества.

Разделение данных

Обучающая, валидационная и тестовая выборки

Современная практика разделения данных включает три части:

  • Обучающая (Train) – используется для обучения модели. Обычно занимает 60–70 % всех объектов.
  • Валидационная (Validation) – служит для подбора гиперпараметров и раннего остановки. Около 10–15 %.
  • Тестовая (Test) – окончательная оценка качества. Остальные 20–25 %.

Разделение должно быть случайным (или с учётом временных меток для ряды), чтобы избежать смещения.

Почему важно разделение?

  • Переобучение: модель может «запомнить» обучающие данные и показывать нереалистично высокую точность.
  • Объективность оценки: тестовая выборка обеспечивает реальное представление о работе модели в продакшене.
  • Проверка стабильности: если модель будет переобучена, метрика на тесте резко упадёт.

Как использовать тестовую выборку?

Шаг 1: Подготовка данных

# Пример на Python + scikit-learn
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, mean_absolute_error

X, y = load_iris(return_X_y=True)

X_trainval, X_test, y_trainval, y_test = train_test_split(
 X, y, test_size=0.25, random_state=42, stratify=y
)

Шаг 2: Обучение модели

# Обучаем логистическую регрессию
model = LogisticRegression(max_iter=200)
model.fit(X_trainval, y_trainval)

Шаг 3: Предсказание на тесте

# Предсказываем
y_pred = model.predict(X_test)

Шаг 4: Оценка качества

  • Точность (Accuracy) – % правильных предсказаний.
  • MAE (Mean Absolute Error) – средняя абсолютная ошибка (для регрессии).
  • ROC‑AUC – площадь под кривой ROC (для бинарных классификаторов).
# Метрика точности
acc = accuracy_score(y_test, y_pred)
print(f"Accuracy: {acc:.4f}")

Типичные ошибки при работе с тестовой выборкой

Смещение выборки (Sampling Bias)

Если обучающая и тестовая выборки не принадлежат однородной популяции, метрика на тесте может быть сильно завышена или занижена. Особенно важно учитывать при работе с временными рядами: нельзя «пробрасывать» данные из будущего в обучающую часть.

Переобучение и «обучение на тесте»

Не стоит использовать результаты теста для настройки модели – это приводит к оптимистичной оценке. Валидационную выборку нужно использовать только для гиперпараметров, а тестовый набор оставлять «не тронутым» до финального расчёта метрик.

Недостаточный размер тестовой выборки

При малом объёме данных (< 30 объектов) статистическая значимость оценок падает. В таких случаях рекомендуется использовать кросс‑валидацию, но даже тогда итоговая метрика должна оцениваться на отдельном hold‑out наборе.

Кросс‑валидация и тестовый набор

Кросс‑валидация (k‑fold) помогает получить более надёжную оценку, но все folds строятся из обучающей выборки. После её завершения окончательная проверка проводится на независимом тестовом наборе.

Особенности для временных рядов

  • Нельзя случайно перемешивать данные: будущее не должно «знать» о прошлом.
  • Лучше использовать «rolling‑window» или «expanding‑window» стратегии.
  • Тестовый набор обычно представляет последние временные метки.

Практические рекомендации

  • Случайная разбиение – используйте stratify для сохранения пропорций классов.
  • Проверяйте распределение метрик – не только среднее значение, но и дисперсию.
  • Для небольших наборов применяйте bootstrap или leave‑one‑out методы.
  • Всегда сохраняйте один фиксированный тестовый набор для финальной оценки.
  • Если данные имеют многомерные признаки (например, «вес» и «пушистость» у животных), убедитесь, что в тесте присутствуют все типы объектов.

Тестовая выборка – ключевой элемент процесса оценки модели. Правильное разделение данных, осмотрительное использование теста и выбор надёжных метрик позволяют избежать переобучения и получить объективную оценку производительности. Не забывайте, что модель должна «видеть» только обучающую часть, а тестовый набор остаётся «чистым» до момента финальной проверки. Это гарантирует, что результаты, которые вы публикуете или внедряете в продакшн, действительно отражают реальную эффективность модели.