Обсуждение статьи "Архитектура машинного обучения в MetaTrader 5 (Часть 18): Исправленный последовательный бутстрэп — клонирование, стирание типа и инструментарий сравнения"

Опубликована статья Архитектура машинного обучения в MetaTrader 5 (Часть 18): Исправленный последовательный бутстрэп — клонирование, стирание типа и инструментарий сравнения:

В статье выявляются два дефекта, которые сводят на нет эффект последовательного бутстрэпа при перекрестной проверке: стирание типа SequentiallyBootstrappedBaggingClassifier и несоответствие размерностей на уровне фолда из-за клонирования полного набора информационных интервалов наблюдений. Предлагаемое исправление сохраняет принадлежность классификатора к исходному классу, добавляет функцию _find_seq_bagging() для повторной передачи в CalibratorCV.fit данных t1, ограниченных текущим фолдом, и сбрасывает состояние при каждом разбиении. Новый модуль bootstrap_comparison выводит OOF-метрики и на наблюдениях вне бутстрэп-выборки (OOB), а также данные об использовании памяти, позволяя проверить правильность применения последовательного отбора и количественно оценить его влияние.

После этапа калибровки в ModelDevelopmentPipeline диагностическая проверка показала, что оценка Брайера на отложенных фолдах (OOF) для варианта с последовательным бутстрэпом составила 0.2442 — то есть совпала с точностью до четырех знаков после запятой со значением 0.2441 для варианта со стандартным бутстрэпом. Эти два числа не должны быть настолько близкими. Часть 5 показывает как аналитически, так и с помощью моделирования методом Монте-Карло, что последовательный бутстрэп формирует выборки с более высокой средней уникальностью, чем стандартный бутстрэп, и что это преимущество в уникальности приводит к улучшению различения классов на наблюдениях вне бутстрэп-выборки (OOB). Одинаковые оценки Брайера на отложенных фолдах (OOF) у двух методов формирования выборки, различающихся по принципу работы, — не совпадение, а симптом.

Анализ этого симптома выявляет два дефекта, действующих последовательно. Первый дефект — стирание типа: _apply_sequential_bagging переносила обученные базовые модели из SequentiallyBootstrappedBaggingClassifier в оболочку обычного BaggingClassifier с утратой принадлежности к исходному классу, необходимой для того, чтобы CalibratorCV мог по-разному обрабатывать варианты с последовательным и стандартным бутстрэпом. После утраты принадлежности к исходному классу CalibratorCV видел два стандартных конвейера с BaggingClassifier и для обоих выполнял идентичное повторное обучение на фолдах. Второй дефект — несоответствие размерностей, которое проявилось бы при простом устранении стирания типа: в sklearn функция clone() сохраняет параметры конструктора, включая полный набор samples_info_sets длиной N , но при повторном обучении на каждом фолде модель получает лишь n_train < N строк, из-за чего проверка размерностей индикаторной матрицы в классификаторе вызывает исключение ValueError еще до начала обучения.

В данной статье исправлены оба недочета. В рабочем конвейере мы сохраняем исходный классификатор SequentiallyBootstrappedBaggingClassifier . Мы также добавляем _find_seq_bagging() в CalibratorCV.fit() для обнаружения классификатора с последовательным бутстрэпом и повторной передачи данных для текущего фолда: набора samples_info_sets , ограниченного обучающими строками этого фолда, перед каждым повторным обучением. Наконец, мы предоставляем отдельный модуль bootstrap_comparison для демонстрации различий до и после исправлений как на уровне формирования выборок, так и на уровне прогнозирования.


Автор: Patrick Murimi Njoroge