Что такое кросс-валидация и для чего она нужна
Что проверяют
Понимаете ли вы, зачем нужна честная оценка качества модели, и знаете ли, как не подсмотреть в тестовые данные. Для аналитика и ML-инженера это ежедневная практика.
Как отвечать
Кросс-валидация это оценка модели на нескольких разбиениях данных вместо одного. При разбиении k-fold выборка делится на k частей, модель обучается k раз, каждый раз одна часть выступает проверочной, а остальные обучающими. Итоговая метрика это среднее по фолдам плюс разброс, который не менее важен: большой разброс означает, что оценке доверять рано.
Зачем это нужно:
- одно случайное разбиение даёт метрику, зависящую от везения, особенно на небольших данных;
- нужна оценка обобщающей способности, а не качества на тех же примерах, на которых учились;
- подбор гиперпараметров требует честного сравнения вариантов.
Виды, которые стоит назвать, и когда они нужны:
- стратифицированный k-fold: сохраняет доли классов в каждом фолде, обязателен при дисбалансе;
- разбиение по времени: для временных рядов обычные фолды запрещены, обучаться можно только на прошлом и проверяться на будущем;
- по группам: если у одного пользователя несколько строк, все его строки обязаны лежать в одном фолде, иначе модель узнает ответ;
- leave-one-out: k равно числу объектов, честно, но дорого и с большой дисперсией оценки;
- вложенная кросс-валидация: внешний цикл оценивает качество, внутренний подбирает гиперпараметры.
Отдельно скажите про утечку: масштабирование, отбор признаков и заполнение пропусков считаются внутри фолда, а не на всех данных сразу. В scikit-learn это решается Pipeline внутри cross_val_score.
Где спотыкаются
Подбирают гиперпараметры по тем же фолдам, по которым потом отчитываются о качестве.
Применяют обычный k-fold к временному ряду и получают оптимистичную метрику, которая не воспроизводится в проде.
Смотрят только среднее и игнорируют разброс по фолдам.