Какие бывают схемы кросс-валидации

Кросс-валидация (cross-validation, CV) — это метод оценки обобщающей способности модели машинного обучения на независимых данных. Она заключается в многократном разделении исходного набора данных на обучающую и тестовую выборки с последующим усреднением результатов. Кросс-валидация позволяет более надёжно оценить производительность модели и уменьшить риск переобучения.

Существует множество схем кросс-валидации, каждая из которых подходит под разные типы задач, объёмы данных, наличие классового дисбаланса, временную зависимость данных и другие аспекты.

🔹 1. K-Fold Cross-Validation

Это самая базовая и часто используемая схема:

  • Данные делятся на k равных (или почти равных) частей (фолдов).

  • Модель обучается на k−1 фолдах и тестируется на оставшемся.

  • Процесс повторяется k раз, каждый раз с новым тестовым фолдом.

  • Окончательная метрика — среднее значение по всем k итерациям.

Пример:

  • K=5:

    • 5 фолдов: F1, F2, F3, F4, F5.

    • Итерация 1: train на F2–F5, test на F1.

    • Итерация 2: train на F1, F3–F5, test на F2.

    • и так далее.

Преимущества:

  • Более стабильная оценка, чем hold-out.

  • Хорошо работает при умеренном количестве данных.

Недостатки:

  • Модель обучается k раз → выше вычислительная нагрузка.

🔹 2. Stratified K-Fold

Модификация обычного K-Fold для задач классификации, особенно с дисбалансом классов.

  • При делении сохраняется пропорция классов в каждом фолде.

  • Поддерживается примерно одинаковое распределение целевой переменной.

Используется по умолчанию в sklearn для классификации.

🔹 3. Leave-One-Out (LOO, LOO-CV)

  • Частный случай K-Fold с k = n, где n — количество объектов.

  • Модель обучается n раз, каждый раз исключая один объект как тестовый.

Преимущества:

  • Очень точная оценка на малых выборках.

Недостатки:

  • Крайне затратный по времени: n тренировок.

  • Высокая дисперсия оценки — каждый фолд очень мал.

🔹 4. Leave-P-Out (LPO)

  • Обобщение LOO: исключаются p объектов для теста, остальные для обучения.

  • Всего возможно C(n, p) комбинаций.

На практике почти не используется при p > 1, если n велико, из-за комбинаторного роста числа вариантов.

🔹 5. Repeated K-Fold

  • K-Fold выполняется несколько раз, каждый раз с новой случайной разбивкой.

  • Улучшает стабильность оценки и уменьшает зависимость от конкретного разбиения.

Параметры: n_splits=5, n_repeats=10 → 50 тренировок.

🔹 6. Hold-Out Validation (Train/Test Split)

  • Простое разбиение: обучающая и тестовая выборки, например, 80/20.

  • Простейший способ, но сильно зависит от того, насколько удачно произошла разбивка.

Используется:

  • Когда объём данных очень большой (и CV избыточна);

  • На первом этапе анализа.

🔹 7. Group K-Fold

  • Используется, если есть группы связанных объектов (например, пациенты, пользователи).

  • Все объекты из одной группы попадают либо в train, либо в test, но не в оба.

Применение:

  • Биомедицинские данные (все замеры одного пациента — в одном фолде);

  • Рекомендательные системы (один пользователь — одна группа);

  • Если данные зависимы внутри группы.

🔹 8. Stratified Group K-Fold

  • Совмещает группировку и стратификацию: сохраняет пропорции классов и не делит группы.

  • Особенно полезна, если классы несбалансированы и есть группы.

🔹 9. Time Series Split (TimeSeriesSplit)

  • Для временных рядов: важно учитывать хронологический порядок.

  • Обучение всегда происходит на прошлом, тест — на будущем.

Пример:

- Fold 1: train = \[1..100\], test = \[101..120\]     
- Fold 2: train = \[1..120\], test = \[121..140\] 
  • и так далее.

Варианты:

  • Expanding window (увеличивается train).

  • Rolling window (фиксированный train и test скользят по времени).

Преимущество:

  • Подходит для прогноза и сценариев, где будущее нельзя «знать заранее».

🔹 10. Blocked Time Series Split

  • В отличие от TimeSeriesSplit, где окна могут пересекаться, здесь используются непересекающиеся интервалы.

  • Больше подходит для оценки обобщающей способности в сильно автокоррелированных данных.

🔹 11. Nested Cross-Validation

  • Кросс-валидация внутри кросс-валидации.

  • Наружный цикл — для оценки обобщающей способности.

  • Внутренний — для подбора гиперпараметров.

Пример:

  • Внешний 5-fold → для каждого фолда внутри происходит 3-fold для GridSearchCV.

Используется при моделировании с автоматическим подбором параметров, особенно для:

  • SVM (C, gamma);

  • XGBoost (depth, learning_rate);

  • Нейросетей.

🔹 12. Monte Carlo Cross-Validation / ShuffleSplit

  • Случайное многократное разбиение на train/test с фиксированными пропорциями (например, 80/20).

  • Не все объекты обязательно попадут в тест.

  • Вариант Repeated Hold-Out.

Параметры:

  • n_splits=100, test_size=0.2.

Гибкий и быстровычисляемый метод, но возможен data leakage и неравномерное покрытие данных.

🔹 Сравнительная таблица

Схема CV Для задач Сохраняет классы Учитывает группы Для временных рядов Стабильность
K-Fold Общие Средняя
--- --- --- --- --- ---
Stratified K-Fold Классификация Хорошая
--- --- --- --- --- ---
Leave-One-Out Малые выборки Низкая
--- --- --- --- --- ---
Group K-Fold Группы Средняя
--- --- --- --- --- ---
Stratified Group K-Fold Группы + классы Хорошая
--- --- --- --- --- ---
TimeSeriesSplit Временные ряды Средняя
--- --- --- --- --- ---
Blocked Time Series Split Временные ряды Высокая
--- --- --- --- --- ---
Nested CV С гиперпараметрами ✅/❌ Высокая
--- --- --- --- --- ---
Monte Carlo CV Общие Средняя
--- --- --- --- --- ---

Каждая схема кросс-валидации обладает своими преимуществами и ограничениями. Выбор конкретной схемы зависит от характеристик данных (размер, дисбаланс, зависимость, наличие групп, временная структура) и цели оценки модели (гиперпараметры, устойчивость, отбор признаков).