Drive your career as React Developer with Symphony Solutions!
×Закрыть

Машинное обучение против финансовой математики: проблемы и решения

Всем привет! Так получилось, что я уже около семи лет занимаюсь машинным обучением. В последние несколько из них я как исследователь и CTO Neurons Lab часто работаю с финансовыми данными в рамках проектов, связанных с инвестиционным менеджментом и алгоритмическим трейдингом. Чаще всего клиенты приходят с текущими стратегиями, которые нужно оптимизировать, или идеями с альтернативными данными, которые потенциально могут прогнозировать рынок. Конечно же, анализ данных в таких задачах — наше все. Наряду с большой ответственностью за капитал инвесторов :)

В начале своего пути я считал, что топовые алгоритмы машинного обучения могут относительно легко находить паттерны в финансовых временных рядах. Со временем отрицательные результаты заставили меня копнуть глубже в основы финансовой математики и понять, что причины проблем и ошибок — не в том, что «рынок случайный и непредсказуемый», и не в сложности математики или алгоритмов, а в неправильном понимании данных и подходов к работе с ними.

С одной стороны, в этой статье я хочу поделиться несколькими идеями о проблемах эконометрики и финансовой математики и рассказать, как машинное обучение могло бы помочь в их решении. С другой стороны, хочу показать пару примеров того, как «обычное» машинное обучение совершенно не справляется с финансовыми данными, и объяснить почему. Я надеюсь, что специалисты в финансовой области смогут переосмыслить свои подходы к моделированию финансовых процессов, а специалисты в анализе данных — увидеть кардинальную разницу между картинками/текстами и данными рынка.

На написание этой статьи меня вдохновили работы доктора Marcos Lopez de Prado. Для детального погружения в тему крайне рекомендую прочесть его публикации, презентации его семинаров и книги. Также ряд дополнительных полезных материалов по теме вы сможете найти в конце статьи.

Проблемы эконометрики

Реальные данные сложнее, чем «цены, спрос и предложение»

Стандартная процедура в финансовой математике — взять временной ряд каких-то цен, обработать его с помощью time series differentiation, после чего построить какие-то модели распределения и показать, что эта модель описывает эти данные (безотносительно того, будь это ARIMA или стохастическое дифференциальное уравнение Фоккера-Планка).

В чем тут проблема?

  • Данные на рынках изначально не структурированы (отдельные заявки на торги, упоминания в новостях, финансовые отчетности), а эконометрические модели используют красивую последовательность цен (интересно, откуда они взялись?).
  • Очень низкое отношение сигнала к шуму.
  • Удаление памяти временных рядов (да-да, это про дифференциацию временных рядов, см. книгу).

Финансовые модели в большинстве своем работают с максимально неинформативными данными, еще и обрабатывая их неправильно и объясняя паттерны in-sample (об этом — дальше).

Корреляции и линейные зависимости ничего не объясняют

Из университета мы знаем, что корреляция объясняет меру линейной зависимости между двумя случайными величинами. Более того, мы даже слышали о том, что корреляция != причинно-следственной связи.

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

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

Самый простой пример того, как корреляция «лажает», виден на картинке ниже: очевидная нелинейная зависимость справа показывает корреляцию −0.008.

Image Source

Эконометрические модели объясняют прошлое, но ничего не предсказывают

Преимущественная часть финансовых моделей основана на объяснении вариативности данных внутри выборки. Мы привыкли в машинном обучении всегда считать ошибку на out-of-sample данных, и об этом создано много мемов, но в эконометрике, которая изначально позаимствовала свои методы из биологии, это просто не принято!

Практически все математические модели в литературе объясняют паттерны или их эволюцию внутри какого-то датасета. Почти никогда речь не идет о банальной кросс-валидации, не говоря уж о более продвинутых методах валидации моделей. Более того, даже сам факт «объяснения» прошлого основан на корреляциях, что, как мы знаем, ничего не говорит о причинно-следственных связях.

Только не показывайте этот мем эконометрикам

«Статистическая достоверность» недостоверна

Опять-таки, из университетского курса статистики мы знаем, что если мы получили p-value, достаточно низкое для какой-то переменной, то это значит, что мы отбрасываем нулевую гипотезу о неважности этой переменной и считаем ее «достоверной». Для того чтобы увеличить уровень достоверности, мы можем ставить границу для этого p-value. Часто оно равно 0.01 или 0.05.

Вот только это не совсем то, что нам нужно.

  • P-values требуют сильных предположений о данных и моделях (не коррелированные переменные, residuals распределены нормально, и так далее), которые практически не встречаются в реальном мире.
  • Нам вообще-то не так интересно опровержение гипотезы H0 in-sample, нас больше интересует подтверждение H1 out-of-sample.

Если что, то даже американская ассоциация статистиков не так-то положительно относится к этим p-values. Но расскажите об этом у себя на кафедре :)

Бэктестинг как способ исследований

Бэктестинг — это процедура проверки стратегии на исторических данных одного или нескольких финансовых инструментов, чтобы понять, как стратегия бы отработала «в прошлом», и на основе этого оценить риски ее поведения в будущем.

Начнем с того, что цены «в прошлом» — это всего лишь одна из реализаций сложного стохастического процесса, и даже если мы могли бы его смоделировать, то проверять надо было бы не на одной случайной реализации, а на сотнях тысяч (см. Монте-Карло).

Более того, бэктестинг — это все один большой и красивый набор данных in-sample. Сделать модель, которая хорошо заработает в прошлом, — проще простого, вопрос только в том, как она отработает на живых деньгах.

Ну и самое главное — бэктестинг не может быть частью процесса экспериментирования из-за проблем множественной проверки гипотез, систематических ошибок отбора и склонности к подтверждению своей точки зрения.

Чем больше экспериментируем — тем лучше результат. Как удобно, да? (см. книгу)

Машинное обучение поможет?

С эконометрикой и финансовым моделированием вроде разобрались, понятны проблемы и как машинное обучение может помочь. Почему же тогда у многих попытки обучить модели на исторических данных ни к чему не приводят? Пройдемся по тем же пунктам, но уже с указанием проблем машинного обучения в них. Кому интересно углубиться в тему, 14 марта я буду проводить воркшоп по этой теме на конференции Data Science UA Conference.

Сложные данные надо еще приготовить

Неструктурированные данные сами по себе — еще не панацея. Даже с сырыми данными с рынка (ticks) или с альтернативными данными как sentiment нужно еще серьезно поработать.

Правильный семплинг данных

Зачем вы считаете свечи каждые N минут? Рынок ведь работает не по часам, а по ивентам: намного логичнее делать свечи каждые X долларов торгов или похожим образом (см. Bars).

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

Примеры сырых цен, временных, «объемных» и «долларовых» свечей

Также можно увидеть, что свечи, созданные на основе периодов времени, имеют намного меньше вариативности, чем другие:

Вариативность цен внутри разных свеч

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

Правильная нормализация данных

Известное нам дифференцирование временного ряда напрочь удаляет всю память об эволюции цен (см. Fractional differentiation).

На помощь приходит не особо известная в широких кругах техника fractional differentiation. Оператор разницы математически обычно представлен целым числом, что и стирает память с лагом этого целого числа. А что, если мы могли бы использовать дробное число от нуля до единицы?

Пример работы fractional differentiation. Image Source

Анализ ADF-статистики (о стационарности временных рядов) и разные параметры fractional differentiation: от 0 до 1. Как видим, оптимальные параметры всегда меньше или равны 0.5!

Как видно, это преобразование все еще делает временной ряд стационарным, но одновременно и оставляет информацию о предшествующих трендах. Детали по реализации смотрите в источнике 1 и источнике 2.

Поправка на IID-гипотезу

Машинное обучение работает тогда, когда обучающая выборка сгенерирована независимо друг от друга, чего нельзя сказать об окнах временных рядов, которые не только пересекаются друг с другом, но еще и фичи с лагом вносят зависимости, которые только мешают обучению (см. Sampling).

В данном случае мы можем воспользоваться техниками подсчета «пересечений» окон, используемых для обучения. Если вкратце: чем больше одно окно пересекается с другими — тем меньший индекс «уникальности» мы ему присваиваем. Далее нам очень удобно использовать этот индекс в комбинации с алгоритмами на основе деревьев решений, как random forest: мы можем или взвешивать каждый обучающий пример на основе индекса уникальности, или использовать bootstrap в бэггинге, который будет сэмплить «не уникальные» примеры с меньшей вероятностью.

Скорее всего, получится так, что большая часть примеров в выборке будет «не уникальными».

Правильный выбор таргета для прогнозирования

В мире с stop losses и take targets прогнозировать цену через N часов — глупость. Наш таргет должен быть максимально похожим на принятие решения (см. Triple barrier labeling).

Техника triple barrier labeling позволяет размечать данные на основе «окна будущего». Например, если мы хотим открыть сделку в следующий час, нам нужно прогнозировать не что произойдет ровно через час, а каким будет максимальное движение цены и в какую сторону в течение этого часа (а вдруг ровно через час цена пойдет вверх на 1%, но в течение этого часа будет бОльший скачок на 5%?). Визуально эта техника представлена на иллюстрации ниже:

Пример того, как надо размечать данные в пределах одного окна «в будущем», Image source

Что делать с зависимостями?

Раз мы решили, что корреляция (или, что еще хуже, какие-то околоэвклидовые метрики) не подходит для определения зависимостей или меры схожести, что мы можем тут использовать? Я вижу два пути:

  • «Литературный»: использовать меры на основе теории информации (например, mutual information ratio) или статистические расстояния (KL divergence, EMD и так далее).
  • «ИИ-шный»: использовать подходы metric learning, возможно, на основе автоэнкодеров или сиамских нейронных сетей.

На основе новых метрик мы сможем лучше анализировать схожесть переменных, проводить их кластеризацию, искать аномалии и так далее. Реализации «литературных» методов можно взять в библиотеке, визуально разница между корреляцией и другими метриками видна на следующих иллюстрациях:

Как мы видим, метрики как information variation и max correlation, о которых можно детальнее прочесть тут, справляются намного лучше с выявлением нелинейных паттернов.

Кросс-валидацию тоже надо сделать правильно

Недостаточно просто тестировать работу алгоритмов на каком-то куске данных «в будущем». Стандартная K-Fold кросс-валидация будет точно прогнозировать «прошлое», а специализированная кросс-валидация для временных рядов будет нарушать IID-семплинг выборок, особенно если фичи считаются с лагом.

Есть несколько способов улучшить кросс-валидацию: например, чередовать окна для тренировки и тестирования в хронологическом порядке с «промежутками» между ними. Все для того, чтобы выборки были максимально независимы (пример на иллюстрации ниже). Второй способ — это комбинаторная кросс-валидация, о ней детальнее можно почитать в книге Dr. Lopez de Prado.

Image Source

Значимость факторов out-of-sample

Да, feature importance — это выход для замены p-values. Но его тоже нужно использовать out-of-sample. В идеале — совместить с вышеописанными методами кросс-валидации и считать распределение важностей на кусочках кросс-валидации. Таким образом мы сможем понять предсказательную значимость фич «по-настоящему». Более детально метод можно изучить и запустить код в этой статье.

Пример важности факторов для настоящего датасета с несколькими искусственными шумами для валидации метода

На иллюстрации выше мы видим, как один из популярных методов определения важности фич все равно ошибся и посчитал несколько случайных переменных как важные. С другой стороны, часть из них мы сможем отсечь, что уже большой плюс.

Бэктестинг — это не способ исследований

Гипотеза о финансовом рынке чаще всего включает предположение о какой-то зависимости, которую можно восстановить и прогнозировать с какой-то точностью в будущем.

Мы поговорили о том, как выбирать переменные, между которыми может быть зависимость, как ее считать и как проверять out-of-sample. Где-то посерединке будет алгоритм машинного обучения, который при адекватной постановке задачи и данных будет что-то прогнозировать. Бэктестинга в исследованиях нет!

Бэктестинг — это способ валидации торговой стратегии, которая включает в себя симуляцию рыночных условий и сценариев, риск-менеджмент, управление капиталом и много других деталей. Моделька, которая что-то там предсказывает — очень малая часть бэктестинга, но она лежит в основе идеи, которая, может быть, пойдет на рынок.

Не надо подгонять модельки под бэктест. Сначала — исследования гипотез о зависимостях (то есть правильное машинное обучение), а потом постройка торговых стратегий. Плохой бэктест? Начинаем исследования сначала, и никак иначе.

Выводы

Я надеюсь, что теперь немного понятнее, почему машинное обучение «в лоб» в финансах не работает, но легче от этого точно не стало.

С другой стороны, вполне очевиден вектор исследований и улучшения компетенций.

Правильная «финансовая» постановка задачи:

  • По возможности, используйте сырые данные о торгах, а не подготовленные «свечи» из публичных источников — они статистически содержат меньше ценной информации.
  • Нормализуйте ваши данные так, чтобы они не удалили память и паттерны (касается не только финансов, но и всех других областей).
  • Следите за тем, чтобы выборка была действительно независима, и не нарушалась ключевая IID-гипотеза о распределении данных.
  • Подготовьте целевую переменную соответственно вашей торговой логике, а не на основе «что будет через N времени».

Более глубокое понимание входных и выходных данных и выбор метрик:

  • Когда делаете изначальный exploratory data analysis, визуализируйте зависимости не на основе корреляций, а на основе более сложных метрик: корреляции не отображают ничего сложнее простых линейных взаимосвязей, которые в реальной жизни практически не встречаются.
  • Эта же идея важна и в других задачах, связанных с временными рядами: корреляция и эвклидовы метрики не оптимальны, попробуйте другие метрики, указанные в этой статье, или же специализированные, такие как dynamic time warping.

Детальный анализ обученных моделей:

  • Обязательно исследуйте значимость факторов на кросс-валидации — это поможет понять настоящие драйверы рынка и очистить датасет от слабых или вообще случайных признаков.
  • Точно такая же логика работает и в других задачах, особенно учитывая ремарку о том, что p-values в реальной жизни не могут определить качество переменных из-за нереалистичных ограничений к задаче.

Правильная валидация гипотез и разделение с бэктестингом:

  • Не делайте ошибки эконометрического моделирования: ваши модели должны прогнозировать будущее, а не объяснять прошлое. Объяснение ваших моделей оставьте feature importance и детальному анализу обученных моделей.
  • Правильная кросс-валидация: она должна учитывать IID-семплинг выборок и реалистичность постановки эксперимента (не предсказываем прошлое, и так далее). Обязательно попробуйте combinatorial cross-validation в других задачах, она дает более точную оценку точности сравнительно с K-Fold.
  • Бэктестинг вообще не входит в исследование. Если ваши модели не могут торговать в плюс — не экспериментируйте с бэктестингом, проверяйте все описанные выше шаги, которые касаются только машинного обучения.

И да, все это — только об исследованиях, которые составляют от силы 10% работы над торговыми стратегиями. Еще более сложная работа вас будет ждать при внедрении и живых торгах, оптимизации, обновлении и поддержке, но об этом — в другой раз.

Список литературы

Базовая литература:

Прикладная литература:

LinkedIn

23 комментария

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

На яких ринках ви перевіряєте свої данні? Якщо є ф’ючерси, то де берети інтрадей API?

Очень понравилась статья, только что заказал Advances in Financial Machine Learning Lopez de Prado, Marcos на Amazon)))
В конце появилась пара вопросов:
— 

Подготовьте целевую переменную соответственно вашей торговой логике, а не на основе «что будет через N времени».

имеется ввиду что к основе «что будет через N времени» надо добавить еще специфические условия, которые выходят из торговой логики?
— "

Еще более сложная работа вас будет ждать при внедрении и живых торгах, оптимизации, обновлении и поддержке, но об этом — в другой раз

когда ждать продолжения? или оно уже вышло только на медиуме))

Очень крутая статья! Приятно, что материалы нашей библиотеки mlfinlab нашли отклик в Украине.
P.S У Hudson & Thames Quantitative Research есть открытый Slack канал (lnkd.in/gW_Yw5y), где регулярно обсуждается проблемы финансового машинного обучения, с которыми сталкиваются на практике

Библиотека огонь, правильную работу делаете :)

Кстати, у Маркоса скоро выходит вторая книга, где описываются методики составления инвестиционных портфелей с использованием ML, тоже здоровый пласт финансового машинного обучения

Дуже дякую за глибину і що не жалієте і сильно "б"єте" реаліями ринку по технологіям.

Спасибо за прекрасную статью. Как всегда, после ваших статей есть о чем подумать и что проверить. Последний абзац даже заставил улыбнуться — интересно, что вы об этом напишете, какой у вас опыт и практические успехи. Ведь мы знаем только ваши статьи.
Относительно техники прогнозировании цены. Десятки экспериментов (даже по доработанным и модернизированным техникам) пока не показали подавляющего превосходства triple barrier labeling относительно прогнозирования цены ни по метрикам качества, ни по финансовым результатам. Хотя очень хотелось перейти к более понятному таргету.

В Neurons Lab у партнеров есть такой опыт и мы будем им делиться. Если есть какой-то конкретный интерес, можем детальнее пообщаться.

не показали подавляющего превосходства triple barrier labeling относительно прогнозирования цены

это странно, потому что предсказывать цену инструмента в лоб, по моему пониманию, — вообще неправильно

это странно, потому что предсказывать цену инструмента в лоб, по моему пониманию, — вообще неправильно

ну можно ж предсказывать не цену, а ее изменение на протяжении горизонта прогнозирования. Но это так, к слову. А, в общем, вы абсолютно правы — надо исключать «посредников» и стремиться к более финансово понятным таргетам.

Статья весьма годная (во всяком случая в начале своего quant’ового пути я бы хотел ее прочитать).

Из технических замечаний — непонятно как состыковать рекомендацию использовать fractional differentiation(*) и при этом

Следите за тем, чтобы выборка была действительно независима, и не нарушалась ключевая IID-гипотеза о распределении данных.

Кстати, дарю хороший челлендж — тут я привожу (искусственный, но не далекий от реальности) пример процесса, который маскируется под случайное блуждание, хотя таковым не является. Более того, общеупотребительные статистические тесты подвоха не замечают, при этом простая «торговая стратегия» прекрасно делала бы деньги, если б курс акций следовал бы такому процессу.
letyourmoneygrow.com/...​alk-down-the-wall-street
Так вот, собственно, challenge — если ML модель может выделить эту закономерность на выборке ограниченного размера, то это — перспективная модель.

*(наверное, все-таки differencing, т.к. fractional differentiation — это про «полуторную производную» функции)

P.S.
Ну и традиционный вопрос — а у автора есть proven track record?
(в данном случае положительный ответ nice2have, но не musthave, т.к. автор не предлагает взять деньги в управление).

Из технических замечаний — непонятно как состыковать рекомендацию использовать fractional differentiation(*) и при этом

Lopez De Prado предлагает для каждого примера обучающей выборки высчитывать «коэфициент уникальности» и семплить датасет на его основе

letyourmoneygrow.com/...​alk-down-the-wall-street

очень круто :)

fractional differentiation — это про «полуторную производную» функции)

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

Ну и традиционный вопрос — а у автора есть proven track record?

Прямо так чтобы личный track record полностью под мою ответственность — нет. У моих партнеров в Neurons Lab такой есть.

спасибо! хорошая статья, нужно дополнительно углубится в тему. есть несколько полезных идей и для других сфер ML
Вообще подозревал, что простые стат подходы на рынках не совсем корректны и могут сильно упрощать ситуацию.

Согласен со статьей, автор очень точно все подметил Хотел добавить, что множество алгоритмических трейдеров решают проблему торговли бездумно, применяя модные названия новых нейронных сетей. Но факт в том, что даже federal reserve system, который задает тон монитарной политики США и всему миру, использует простые методы машинного обучения, аля ... множественная регрессия. Применение простого метода в нужное время и в нужном месте, гораздо важнее, чем стрелять из базуки по мухе, через сверхсложную нейросеть. Как написал автор статьи, все дело в паттернах, в правильной постановке задачи. Закономерности есть и с ними нужно работать и их можно объеснить через машинное обучение.
Мне доводилось поработать с нескольми успешными хедж фондами, которые работают более 5 лет и могу вас заверить, никто из них не применяет LSTM. Что касаеться GARCH, я только один раз видел, как этот метод применяют, но для ребалансирования инвестиционного портфеля, когда меняеться волатильность рынка, но не для предсказания движения цены.

Было бы безумно интересно ознакомиться с вашим видением инструментов и оптимизации прогнозирования на финансовых рынках с LSTM.

можно и линейную регрессию использовать, алгоритм абсолютно вторичен в этой области, если сможете найти или сделать хороший датасет и правильно все провалидировать)

Мені завжди було цікаво ... чому люди дивляться на ці графіки? Вони ж дуже обмежено описують процес.

В кожен момент часу на біржі є order book з структурою заявок ... якісь заявки купуються, якісь змінюються, якісь скасовуються. Говорити про «ціну» тут немає сенсу, адже кожна угода закрита з різною ціною і кінцева ціна залежить від розміру угоди теж... адже по «ринковій» ціні є лише обмежена кількість заявок.

Чи попадались моделі, які моделюють біржу з цього боку?

У того самого Lopez de Prado у книзі та у семінарах є набір фічей які можна вираховувати із order book

Спасибо, ждем продолжение

Я колись дипломну робив з цими ARIMA, ARCH, GARCH моделями.
Вже й забув і не згадав би якби не ця стаття. Дуже цікава!

И как, получилось что-то прогнозировать при помощи ARIMA, ARCH, GARCH? У меня диплом был на другую тему. Но читал дипломы одногрупников, где применялись разные методы прогнозирования на самом деле ничего не прогнозировали. В дипломе просто использовались данные, чтобы выглядело будто модель работает. Но с другими данными модель уже не работала )

Для даних брались ціни на нафту. Виглядало, що модель працює, правда далеко в майбутнє я не заглядав) і на той період вони були більш-менш стабільні. Дальше я вже тим не цікавився

Надо же какая интересная и полезная статья. Спасибо!

Подписаться на комментарии