Какой процент данных обычно выделяют на валидационную выборку при обучении модели?

«Какой процент данных обычно выделяют на валидационную выборку при обучении модели?» — вопрос из категории Классическое ML, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Типичный диапазон — от 15% до 30% от общего размера датасета. Конкретный выбор зависит от нескольких факторов:

  • Размер датасета: Для очень больших наборов данных (миллионы строк) может быть достаточно 5-10%, так как абсолютного числа примеров хватит для надежной оценки. Для маленьких датасетов (несколько тысяч строк) лучше взять 25-30%, чтобы валидационная оценка была стабильной.
  • Стратегия валидации: При использовании кросс-валидации (например, 5-fold) каждая тестовая «складка» составляет 20%, что эквивалентно выделению 20% на валидацию.

Практический пример с scikit-learn:

from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification

# Создаем синтетический датасет
X, y = make_classification(n_samples=10000, n_features=20, random_state=42)

# Стандартное разделение: 80% train, 20% validation
X_train, X_val, y_train, y_val = train_test_split(
    X, y,
    test_size=0.2,        # 20% на валидацию
    random_state=42,      # Для воспроизводимости
    stratify=y            # Сохраняем распределение классов в разбиениях
)

print(f"Train size: {X_train.shape[0]}")  # 8000
print(f"Validation size: {X_val.shape[0]}") # 2000

Ключевые принципы:

  1. Разбиение должно быть случайным и стратифицированным (если есть дисбаланс классов).
  2. Для временных рядов случайное разбиение недопустимо — нужно использовать скользящее окно или разделение по времени.
  3. Валидационная выборка используется только для оценки и настройки гиперпараметров, на ней модель не обучается.