Как размер валидационной выборки зависит от величины датасета?

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

Ответ

Размер валидационной выборки (hold-out set) нелинейно зависит от общего объёма данных. Основной принцип: для маленьких датасетов нужна относительно большая доля для валидации, чтобы оценка была статистически значимой. Для больших датасетов абсолютного числа примеров в небольшой доле уже достаточно для надёжной оценки.

Эмпирические правила, которые я применяю на практике:

  • Маленький датасет (< 10k примеров): 20-30% на валидацию. Часто вместо простого разбиения использую кросс-валидацию (CV), чтобы максимально использовать данные для обучения и получить устойчивую оценку.
  • Средний датасет (10k — 1M примеров): 10-20%.
  • Большой датасет (> 1M примеров): 1-5% часто достаточно, так как даже 1% от миллиона — это 10 000 примеров для оценки.

Пример кода с адаптивным разбиением:

from sklearn.model_selection import train_test_split
import numpy as np

# Допустим, у нас есть датасет X, y
n_samples = len(X)

# Определяем долю для валидации в зависимости от размера
if n_samples < 10000:
    test_size = 0.25  # 25%
elif n_samples < 1000000:
    test_size = 0.15  # 15%
else:
    test_size = 0.05  # 5%

X_train, X_val, y_train, y_val = train_test_split(
    X, y, 
    test_size=test_size, 
    random_state=42, 
    stratify=y  # Стратификация для сохранения распределения классов
)
print(f"Размер обучающей выборки: {len(X_train)}")
print(f"Размер валидационной выборки: {len(X_val)}")

Важно: Для крошечных датасетов (несколько сотен строк) стоит рассмотреть leave-one-out или k-fold CV с k близким к N.