Обсуждение статьи "Архитектура машинного обучения для MetaTrader 5 (Часть 16): Вложенная кросс-валидация для несмещённого оценивания"

 

Опубликована статья Архитектура машинного обучения для MetaTrader 5 (Часть 16): Вложенная кросс-валидация для несмещённого оценивания:

В статье представлен конвейер вложенной кросс-валидации V-in-V для финансовых данных, который устраняет утечку информации в трех точках принятия решений: подбор гиперпараметров, калибровка и итоговая оценка. Временное разделение на три зоны изолирует внутренний walk-forward поиск с правилом 1-SE от внешней walk-forward или CPCV-оценки, а изотоническая OOF (out-of-fold) калибровка обучается независимо. Итоговый UnifiedValidationCalibrator дает несмещенные оценки на вневыборочных данных и хорошо откалиброванные вероятности для продакшена.

Первое ключевое архитектурное решение — временное разбиение полного набора данных на три зоны. Такая архитектура восходит к Masters (1993), который утверждал, что разделения train/test на две части недостаточно, если исследователь может многократно дорабатывать модель: просмотр тестового результата с последующей корректировкой превращает тестовый набор во второй обучающий набор и делает оценку недействительной. Решение Masters — разбиение на три зоны, где финальная зона может быть открыта ровно один раз.

Полный конвейер UnifiedValidationCalibrator

  • Внешнее обучение (~60%): Все операции вложенной CV, включая поиск гиперпараметров, обучение модели, генерацию OOF-прогнозов и построение калибровочного отображения, выполняются внутри этой зоны. В этой части данных можно проводить итерации разработки, не искажая последующие оценки.
  • Внутренняя валидация (~20%): Контрольная точка предварительного отбора. После завершения вложенного CV-цикла и сборки финальной модели ее прогнозы в этой зоне оцениваются. Исследователь анализирует результат, но не должен перенастраивать модель. Если оценка Брайера на внутренней валидации существенно хуже внешних OOF-оценок, значит что-то пошло не так (обычно переобучение на внешних обучающих фолдах или смена режима на границе). На этом этапе модель либо принимается, либо отклоняется.
  • Финальный тест (~20%): Открывается ровно один раз. Класс DataPartition обеспечивает это с помощью флага _final_opened, который вызывает RuntimeError при любом последующем вызове open_final_test(). После получения этого результата оценка считается зафиксированной. Любая последующая корректировка модели делает всю процедуру оценки недействительной.

Автор: Patrick Murimi Njoroge