Обсуждение статьи "Конструирование признаков для машинного обучения (Часть 9): Tесты на структурные сдвиги на Python"

Опубликована статья Конструирование признаков для машинного обучения (Часть 9): Tесты на структурные сдвиги на Python:

Мы представляем реализацию тестов на структурные сдвиги из главы 17 AFML, готовую для использования в реальных системах. Модуль включает тест Чу — Стинчкомба — Уайта (односторонний и двусторонний варианты), тест Дики — Фуллера типа Чоу (DFC), SADF для шести моделей (линейная, квадратичная, sm poly 1, sm poly 2, sm exp, sm power), а также квантильную статистику ADF (QADF) с параметрами q и v и условное среднее ADF (CADF) с параметром q; результаты возвращаются в виде скалярных признаков с индексацией по барам. Мы устраняем проблемы масштабируемости фрагментов кода из книги и ошибку, связанную с порядком аргументов, а также показываем, как фиксированная глубина ретроспективы (L=504) ограничивает вычислительную сложность SADF величиной O(L²) на бар при выявлении рыночных режимов.
В предыдущих статьях серии «Конструирование признаков для машинного обучения» признаки строились на основе структуры самого времени: в части 1 дробное дифференцирование было представлено как способ сохранения длинной памяти в стационарном ряде; в части 3 торговый календарь был представлен в координатах Фурье; а в части 5 поток заявок на уровне тиков был сжат до микроструктурных статистик с индексацией по барам. В этой статье признаки конструируются на основе качественно иного вопроса: не как выглядит текущий бар, а изменился ли в последнее время процесс, порождающий данные, в результате которого этот бар сформировался.

Глава 17 книги Лопеса де Прадо «Достижения в области финансового машинного обучения» начинается с меткого замечания. Структурные сдвиги — переходы от одного рыночного режима к другому — дают одни из лучших торговых возможностей с учетом риска именно потому, что большинство участников оказываются застигнутыми врасплох. Когда динамика с возвратом к среднему сменяется импульсным движением, в ловушку попадают трейдеры, которые продолжают торговать против пробоев; когда трендовый рынок возвращается к среднему, в ловушку попадают трейдеры, слишком долго удерживавшие направленные позиции. Участники, оказавшиеся в проигрыше, не сразу осознают свою ошибку. Они удерживают позиции, усредняют убыточные позиции, и в итоге их позиции закрываются по стоп-приказам. Именно эта вынужденная ликвидация и создает преимущество. Однако для выявления перехода в режиме реального времени, а не задним числом, требуется формальный статистический тест.

Модуль afml.structural_breaks реализует два семейства таких тестов. Первое семейство — тесты кумулятивных сумм (CUSUM) — позволяет определить, значимо ли накопленные ошибки прогноза отклоняются от белого шума. Второе семейство — тесты на взрывную динамику — позволяет выявить экспоненциальный рост или обвал, несовместимые со случайным блужданием. В этой статье рассматриваются оба семейства. В статье предложены два варианта, отсутствующих в исходной реализации, и описаны проблемы с производительностью приведенных в книге фрагментов кода на Python, которые делают их непригодными для временных рядов реалистичной длины. В заключение подробнее рассматривается связь с выбором стратегии, подразумеваемая в главе.


Автор: Patrick Murimi Njoroge