Шумихин Михаил
Шумихин Михаил личный блог
06 августа 2019, 19:06

Machine Learning. Kaggle соревнование по предсказание цен по американским акциям от Хедж фонда "Two sigma". Мой опыт участия.

Добрый день мои маленькие любители машинлернинга:) Наконец нашел время написать по теме.

Только что закончилось интересное соревнование на Каггле проходившее почти год, в котором я принимал участие и благополучно попал в Топ 1% и занял 20 место. https://www.kaggle.com/c/two-sigma-financial-news/leaderboard .

Machine Learning. Kaggle соревнование  по предсказание цен по американским акциям от Хедж фонда "Two sigma". Мой опыт участия.



Если кто не в курсе про Kaggle, это такая соревновательная площадка, принадлежащая гуглу, на которой различные компании ставят задачи связанные с анализом данных, и датасайтесты со всего мира соревнуются кто лучше решит. Похоже на наш ЛЧИ, только по машинлернингу. Призовой фонд на каждое соревнование как правило 10-100 тыс. долларов. (в этом конкретном было 100 тыс.). Одновременно проходит 5-10 соревнований.
Суть всех заданий примерно одна, участникам дают трэйн выборку, с известной целевой переменной и тестовую выборку без целевой переменной, которую надо предсказать.

Хедж фонд «Two Sigma» в этом соревновании поставил следующую задачу: необходимо предсказать для каждой американской акции, на сколько она будет лучше или хуже рынка, значение может принимать значение в диапазоне [-1,1] — это и есть целевая переменная, Score соответвенно меряется как усредненное значение по всем акциям и по всем дням, разницы между реальными значениеми и предсказанными целевой переменной из тестовой выборки. Подробней можно почитать здесь https://www.kaggle.com/c/two-sigma-financial-news/overview/evaluation.

Что дано? Даны два датасета, первый — торговые данные в формате OHLCV по каждой акции за период с 2007 года по 2018 года, второй — новостные данные за этот период, причем новостные данные уже агрегированны по каждой акции по новизне и сентименту, т.е. весь анализ новостей уже сделан компанией Two Sigma. Все данные примарно 11 млн. строк. Дополнительные данные, помимо этих, использовать для тренировки модели запрещено.

Что нужно делать? Необходимо было, полностью в облаке (у них называется kernel) написать программу, которая на вход принимала бы все эти  данные, а на выходе давала модель, кот. дает прогноз изменения цены конкретной акции относительно широкого рынка. Это прогноз соответственно дается на тестовой выборке которую мы не знаем, потому как тестовые данные организаторы брали из будующих цен. Т.е. модель нужно было сдать в декабре 2018, а тестовая выборка была с января по июль 2019. 

Как решали?.. Основные модели которые использовали участники это деревья, в основном XGBoost и LGBM. Также были те кто использовали нейронные сети и регресии. Те кто использовал исключительно тех анализ и прочую ересь типа волн эллиота, оказались в  ж… Лично я выбрал одиночную LGBM без стакинга, потому как время выполнения всей модели, вместе с обучением было ограничено двумя часами. Очень мало добавил новых фич по причине сильного переобучения, в итоге оставив только около 50. Также большее внимание я уделил валидации в итоге использовав для обучения только треть всех данных, в основном последние. От многих идей связанных с использованием внешних данных пришлось отказаться с ними скор был лучше, но могли дисквалифицировать.

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

Выводы: Задача прогнозирования цен на 5 дней, при условии данных OHLCV и готового сэнтимента не является классической задачей машинного обучения, легко переобучается и постоянно меняет распределение, и соответственно плохо поддается прогнозированию. Но при этом все остальные методы работают еще хуже. Профи кот. обычно занимают все первые места на соревнованиях по машинному обучению, не попали даже в 20 лучших. Для компании «Two Sigma» это скорей всего окажется опцион вне денег.

Всем рекомендую учавствовать в подобных соревнованиях, они очень много дают и с точки зрения программирования, понимания трейдинга и анализа данных. Удачи!
57 Комментариев
  • Михаил
    06 августа 2019, 19:11
    А как-нибудь по хитрому учитывал корреляцию между активами?
    • Дмитрий Ш
      06 августа 2019, 19:17
      Михаил, «По-хитрому» недопустимо правилами. Требуется доказать, что честно угадал
      • Михаил
        06 августа 2019, 19:26
        Шумихин Михаил, а корреляцию за все время или там какие-нибудь по хитрому? 
  • SergeyJu
    06 августа 2019, 19:23
    Почему именно LGBM?
    • Михаил
      06 августа 2019, 19:42
      SergeyJu, обычно, но не всегда:
      по скорости на обучении LGBM быстрее XGBoost быстрее Catboost 
      по скорости на предикшене Catboost быстрее LGBM быстрее XGBoost
      по качеству на дефолтных настройках Catboost лучше XGBoost лучше LGBM

      Стандартный подход — эксперименты на LGBM, что позволяет много идей быстро обкатать, а потом уже выбрать более предметно на чем финальный прогноз делать и с помощью hyperopt подобрать гиперпараметры параметры
      • Schurik
        06 августа 2019, 20:55
        Михаил, вы эти методы в реальной торговле используете? Какие результаты, если не секрет?
        • Михаил
          06 августа 2019, 21:25
          Schurik, использую, результат понятие растяжимое, живу на доходы от инвестиций — вот такой результат. И люблю участвовать в разных соревнованиях по ML, но в этом не участвовал, так как поздно узнал. У меня инвестиционная стратегия, а не высокочастотная, поэтому c++ не пользовал. Знаю, что натренированная модель может быть экспортирована в С код. У catboost есть канал в Telegram (catboost_ru) — Анна Вероника (основной разработчик) отвечает очень оперативно. Думаю лучше у нее спросить напрямую. 
      • Schurik
        06 августа 2019, 21:03
        Михаил, и еще такой вопрос, можно ли использовать Catboost в программах на с++? В продакшене python все-таки не прокатит…
          • Schurik
            06 августа 2019, 21:57
            Михаил, спасибо большое, впервые услышал про catboost, очень любопытно. Да, вижу C API,  прекрасно, можно использовать обученные модели в программе на С++. Обучать, разумеется, можно и в питоне, даже удобнее.
          • Schurik
            06 августа 2019, 21:52
            Шумихин Михаил, чтобы работало быстрее. У меня стратегии ближе к HFT.
              • Schurik
                06 августа 2019, 22:35
                Шумихин Михаил, почему? Из-за задержки при вычислении прогноза по признакам? Но на нейронной сети не сильно быстрее будет. И потом hft разное бывает. Вы, наверное, имеете в виду low latency арбитраж? Там да, можно и без машинного обучения прекрасно обойтись, но трудно написать ПО, удовлетворяющее требованиям по скорости.
  • Anton Shabunin
    06 августа 2019, 19:48
    На смартлабе очень мало постов, которым бы хотелось поставить +. Ваш один из них.
    Распечатать и повесить в рамку:
    Те кто использовал исключительно тех анализ и прочую ересь типа волн эллиота, оказались в  ж…

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

    Все кто использовали периоды высокой волатильности для обучения своих моделей, остались далеко позади, не потому что модель плохая, а потому что распределение трэйн и тест выборки сильно отличались.

  • Ромирес
    06 августа 2019, 19:51
    Давайте общаться!
    Я тоже хотел поучаствовать в 2sigma, но прочитав правила решил не лезть.
    Приходила мысль про читинг, не скрою — например метапараметры можно искать вне кёрнела, а потом подмиксовать в виде априорных знаний (коэффициенты какие то) в модель уже у них.

      • Ромирес
        06 августа 2019, 20:03
        Шумихин Михаил, а как они (2sigma) или мы узнаем? Если алго запутанный, то константу нормализации (например знание волатильности рынка на тесте) можно запрятать даже без видимых коэффициентов.
  • Андрей Савельев
    06 августа 2019, 19:57
    Хороший опыт!
  • Astrolog
    06 августа 2019, 20:18
    Для ЦБ РФ, вложившего в юани 14,2% резервов, или 67 млрд долларов на начало года, обвал курса принес убытки на 1,8 млрд долларов.

    ** а это было предсказывать легко.
         Всем было изначально понятно, кроме нашего ЦБ.
  • Vanger
    06 августа 2019, 20:46
    Сколько времени надо, чтобы с нуля освоить ИТ на подобном уровне, имея лишь бэкраунд в чисто теоретической математике? 1 — 2- 3 года?
  • SergeyJu
    06 августа 2019, 20:50
    Какой глубины деревья использовали люди на этой задаче? 
    Фичи, которые Вы использовали, более- менее стандартные, или были «ноу хау» из торговой практики? 
  • Vanger
    06 августа 2019, 20:51
     Можете поподробнее про волны Элиота/Идиота рассказать? Почему так много людей в них верят и их используют? Не все же без ума всё таки, слишком их много. Не работали какие-то конкретные фигуры? Может, и не было тех кто с теханализом прогал?
      • Ivan Ivanov
        07 августа 2019, 07:27
        Шумихин Михаил, дайте я Вас обниму за эту точку зрения. Она исключительна на СЛ.
        ТА гораздо легче освоить чем всякие ФА и лженауки типа математики, поэтому у него столько последователей.
  • Schurik
    06 августа 2019, 21:00
    А как они определяли, у кого лучше прогнозы? Какие-нибудь метрики типа R^2 прогнозов победителей опубликованы?
  • tores
    06 августа 2019, 22:00
    это все конечно хорошо, но результат к сожалению выражен в неком score, который не понятно как меряется. Сдается мне что в этом конкурсе можно победить если твой результат 0% годовых, а у соперников <0%. Поэтому собственно вопрос, что это все дает в реальной торговле? Мое мнение, уж простите, таково, что машинное обучение не работает в трейдинге, либо результат на уровне обычных индикаторов.
    • Михаил
      06 августа 2019, 22:12
      Max, скор тут по сути шарп для портфеля предсказаний — самый практичный скор. 
      • tores
        06 августа 2019, 23:23
        Шумихин Михаил, да я без претензий. просто метрика целевой функции приведенная по вашей ссылке не тоже самое что «на сколько она будет лучше или хуже рынка». Согласитесь давать прогноз движения цены на горизонте  10 дней и оценивать хужесть-лучшесть акции относительно рынка это немного разные задачи.

        Попытался разобраться в метрике. получается xt=∑yti*rti*uti.

        Здесь yti достоверность прогноза. Т.е. для предсказания значение может быть от -1 до 1. По сути это аналог вероятности, что цена пойдет вверх или вниз. Для оценки результата, если я правильно понимаю, значение yti равно «1» если инструмент рос на горизонте 10 дней и yti равно " -1" если инструмент падал.

        rti — это, если я правильно понимаю, доходность на горизонте 10 дней? Сразу вопрос почему доходность и достоверность прогноза берутся на 10-ти дневном горизонте, а значение xt считается ежедневно скользящим окном? Получается такая ситуация, акция болтается 9 дней во флэте, а в 10-й день выстреливает на величину rti . В то же время алгоритм может девять дней прогнозировать сильный рост акции   и стоять в лонг, а в десятый день перевернуться в шорт. По факту имеем, что алгоритм рост акции не взял, а целевая функция будет считать скор в плюс, т.к. девять дней же алгоритм «стоял в лонг».

        uti — индикаторная переменная, показывает включен ли инструмент i  в день t в портфель.

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

        Согласен с Михаилом, целевая функция это некий аналог коэффициента Шарпа. Только здесь для оценки Шарпа очень маленькое 10-дневное окно. При оценке потенциальной доходности за расширенный период может привести к большим искажениям.

        Ну и коэффициент Шарпа если меньше единицы, это мало для торговли.
  • tores
    06 августа 2019, 22:08
    а вообще хужесть-лучшесть рынка меряется бета-коэффициентом и зависит от корреляции инструментов. На мой взгляд задача прогноза движения цены сложней. Т.е. опять же к трейдингу (угадыванию куда пойдет цена и как на этом  заработать) данный конкурс имеет вторичное отношение. Поправьте, если не прав.
  • Антон Иванов
    06 августа 2019, 22:42
    А для обывателя на простом языке можете объяснить реальную пользу от выше обозначенной темы? Какое применение и результаты в трейдинге?
  • aimaster
    06 августа 2019, 23:55
    Поздравляю, отличный результат! Участвовал, но к сожалению только 110-й. Делал пакет стратегий, использовал xgb, регресии, нейросети, word2vec.

    • Михаил
      07 августа 2019, 07:19
      aimaster, а анализ новостей вам чего-нибудь дал?
      • aimaster
        07 августа 2019, 09:52
        Михаил, скорее нет, чем да. добавил пару стратегий на новостях, колеблющихся около нуля, в общий пул — чтобы уменьшить отклонение в виду целевой метрики конкурса. были интересные моменты, если брать определенные типы новостей (например, банкротство) + word2vec по news title. Но не хватило времени чтобы нормально встроить в портфель + выборка не большая, были подозрения на курвафит.
  • Гуру Хренов
    07 августа 2019, 00:21
    20-е место — это очень круто, поздравления и респект
  • Чёрный Трейдер
    07 августа 2019, 13:52
    Тема интересная, автор, пиши исчо.
  • CloseToAlgoTrading
    09 августа 2019, 23:26
    Поздравляю! 20 место это хорошо!!

    Забавное мероприятие..  За полтора месяца до окончания я там был 8 :), двже закралась мысль что есть шанс получить денег!!!, но что то потом сломалось, и последних два пересчета чет ничего не улучшили… последний вообще показал 0… видимо памяти не хватило. При том что у меня был довольно топорный подход, на нейронной сетке. Как итог 146 место.. 

    К сожалению, судя по тому как там люди в таблице перемещались после каждого пересчета можно сделать вывод что никаких закономерностей найдено не было… :( 

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

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн