Блог им. Obi-Van_Kenobi

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» это скорей всего окажется опцион вне денег.

Всем рекомендую учавствовать в подобных соревнованиях, они очень много дают и с точки зрения программирования, понимания трейдинга и анализа данных. Удачи!
★41 | ₽ 125
58 комментариев
А как-нибудь по хитрому учитывал корреляцию между активами?
avatar
Михаил, «По-хитрому» недопустимо правилами. Требуется доказать, что честно угадал
avatar
Михаил, да, делал признаки по принадлежности к различным группам в зависимости от ковариации активов… Т.е. активы имеющие наибольшую ковариацию между собой относятся к одной группе, и таких групп было около 20. После этого считал характеристики для активов внутри группы и делал их признаками отдельными, получался своего рода пэйр-трейдинг анализ внутри бустинга.
avatar
Шумихин Михаил, а корреляцию за все время или там какие-нибудь по хитрому? 
avatar
Михаил, я делал за последние 3 года, но можно например делать за последние n значений и считать p-value для метода наименьших квадратов, я такое использую для своих стратегий. Но здесь не использовал, не помню почему уже.
avatar
Почему именно LGBM?
avatar
SergeyJu, он быстрее, можно больше деревьев строить чем XGBooste

avatar
SergeyJu, обычно, но не всегда:
по скорости на обучении LGBM быстрее XGBoost быстрее Catboost 
по скорости на предикшене Catboost быстрее LGBM быстрее XGBoost
по качеству на дефолтных настройках Catboost лучше XGBoost лучше LGBM

Стандартный подход — эксперименты на LGBM, что позволяет много идей быстро обкатать, а потом уже выбрать более предметно на чем финальный прогноз делать и с помощью hyperopt подобрать гиперпараметры параметры
avatar
Михаил, ну предиктов там не было, а обучать нужно много было, что сильно обрезал трэйн даже. А гиперпараметры я не оптимизирую на тайм сериес почти никогда, безполезное это дело… имхо

avatar
Михаил, вы эти методы в реальной торговле используете? Какие результаты, если не секрет?
avatar
Schurik, использую, результат понятие растяжимое, живу на доходы от инвестиций — вот такой результат. И люблю участвовать в разных соревнованиях по ML, но в этом не участвовал, так как поздно узнал. У меня инвестиционная стратегия, а не высокочастотная, поэтому c++ не пользовал. Знаю, что натренированная модель может быть экспортирована в С код. У catboost есть канал в Telegram (catboost_ru) — Анна Вероника (основной разработчик) отвечает очень оперативно. Думаю лучше у нее спросить напрямую. 
avatar
Михаил, и еще такой вопрос, можно ли использовать Catboost в программах на с++? В продакшене python все-таки не прокатит…
avatar
Михаил, спасибо большое, впервые услышал про catboost, очень любопытно. Да, вижу C API,  прекрасно, можно использовать обученные модели в программе на С++. Обучать, разумеется, можно и в питоне, даже удобнее.
avatar
Schurik, Почему пайтон не может идти в продакшен? Все библиотеки как правило для него написаны на с++… Но конечно вы можете это реализовывать и на плюсах, только зачем?
avatar
Шумихин Михаил, чтобы работало быстрее. У меня стратегии ближе к HFT.
avatar
Schurik, в хфт использовать трибэйсд методы, очень плохая идея

avatar
Шумихин Михаил, почему? Из-за задержки при вычислении прогноза по признакам? Но на нейронной сети не сильно быстрее будет. И потом hft разное бывает. Вы, наверное, имеете в виду low latency арбитраж? Там да, можно и без машинного обучения прекрасно обойтись, но трудно написать ПО, удовлетворяющее требованиям по скорости.
avatar
Schurik, 95% всех высокочастотных стратегий сводится к арбитражу и в 5% к моментуму… Ни для того ни для другого, НН и бустинг не требуется, не надо усложнять простые вещи… поэтому либо минимум вычислений и Си, либо сложные вычисления и Питон…
avatar
На смартлабе очень мало постов, которым бы хотелось поставить +. Ваш один из них.
Распечатать и повесить в рамку:
Те кто использовал исключительно тех анализ и прочую ересь типа волн эллиота, оказались в  ж…

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

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

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

avatar
Ромирес, Интересно читил ли кто в итоге первым пришел, больно у него большой разрыв от остальных, ну скоро узнаем.
avatar
Шумихин Михаил, а как они (2sigma) или мы узнаем? Если алго запутанный, то константу нормализации (например знание волатильности рынка на тесте) можно запрятать даже без видимых коэффициентов.
avatar
Ромирес, Не хочу даже ломать голову над этим… пусть 2sigma разбирается, я надеюсь он был зайкой, и всем расскажет что ему так докинуло по сравнению с остальными
avatar
Хороший опыт!
Для ЦБ РФ, вложившего в юани 14,2% резервов, или 67 млрд долларов на начало года, обвал курса принес убытки на 1,8 млрд долларов.

** а это было предсказывать легко.
     Всем было изначально понятно, кроме нашего ЦБ.
avatar
Astrolog, Не пишите здесь, не люблю я вашего брата гомеопата....

avatar
Сколько времени надо, чтобы с нуля освоить ИТ на подобном уровне, имея лишь бэкраунд в чисто теоретической математике? 1 — 2- 3 года?
avatar
Vanger, я еще не освоил:)

avatar
Vanger, 
Сколько времени надо, чтобы с нуля освоить ИТ на подобном уровне, имея лишь бэкраунд в чисто теоретической математике? 1 — 2- 3 года?

Гикбрейнсы учат с нуля за 1,5 года, факультет «Искусственный интеллект»
avatar
Какой глубины деревья использовали люди на этой задаче? 
Фичи, которые Вы использовали, более- менее стандартные, или были «ноу хау» из торговой практики? 
avatar
SergeyJu, Фичи создавал многие по практике и вручную, автоматом не генерил, чтоб контролировать переобучение, оставил очень мало, потому как модель по правилам должна была обучаться не более чем за 2 часа… По поводу параметров бустинга, я уже не помню, это в декабре было, посмотрите в кернелах, форкните и можете сами пообучать
avatar
 Можете поподробнее про волны Элиота/Идиота рассказать? Почему так много людей в них верят и их используют? Не все же без ума всё таки, слишком их много. Не работали какие-то конкретные фигуры? Может, и не было тех кто с теханализом прогал?
avatar
Vanger, Да, хорошее предположение, что тех анализ работает, но те кто его используют не умеют программировать… Также как правило не умеют программировать гадалки, экстрасенсы, астрологи, тренеры личностного роста и др., но это не значит что их методы не работают на рынке....

avatar
Шумихин Михаил, дайте я Вас обниму за эту точку зрения. Она исключительна на СЛ.
ТА гораздо легче освоить чем всякие ФА и лженауки типа математики, поэтому у него столько последователей.
avatar
пробовал что-нибудь с ценовой динамикой обыграть? например, делать ставку на акции, которые хуже рынка шли на тестовом периоде?
avatar
iamblackornot, я не делал ставки, а создавал признаки, в том числе и признаки лучше-хуже рынка, только не качественнные а количественные, а алгоритм уже проверяет работает этот признак на тренировочной выборке или нет, я же проверяю эти признаки на тестовой выборке
avatar
А как они определяли, у кого лучше прогнозы? Какие-нибудь метрики типа R^2 прогнозов победителей опубликованы?
avatar
Schurik, https://www.kaggle.com/c/two-sigma-financial-news/overview/evaluation вот ссылка как считалась метрика

avatar
это все конечно хорошо, но результат к сожалению выражен в неком score, который не понятно как меряется. Сдается мне что в этом конкурсе можно победить если твой результат 0% годовых, а у соперников <0%. Поэтому собственно вопрос, что это все дает в реальной торговле? Мое мнение, уж простите, таково, что машинное обучение не работает в трейдинге, либо результат на уровне обычных индикаторов.
avatar
Max, скор тут по сути шарп для портфеля предсказаний — самый практичный скор. 
avatar
Max, отвечаю на ваш вопрос. Для тех людей которые не смогли разобраться с метрикой целевой функции, это все ничего не даст в реальной торговле, это правда, даже не забивайте свою светлую голову.
avatar
Шумихин Михаил, да я без претензий. просто метрика целевой функции приведенная по вашей ссылке не тоже самое что «на сколько она будет лучше или хуже рынка». Согласитесь давать прогноз движения цены на горизонте  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-дневное окно. При оценке потенциальной доходности за расширенный период может привести к большим искажениям.

Ну и коэффициент Шарпа если меньше единицы, это мало для торговли.
avatar
а вообще хужесть-лучшесть рынка меряется бета-коэффициентом и зависит от корреляции инструментов. На мой взгляд задача прогноза движения цены сложней. Т.е. опять же к трейдингу (угадыванию куда пойдет цена и как на этом  заработать) данный конкурс имеет вторичное отношение. Поправьте, если не прав.
avatar
А для обывателя на простом языке можете объяснить реальную пользу от выше обозначенной темы? Какое применение и результаты в трейдинге?
avatar
Антон Иванов, Обывателя данная тема должна приводить к следующему выводу, что он не в состоянии предсказать поведение рынков ни в какой перспективе, ни в долгосрочной, ни в краткосрочной. Поэтому наилучшим для него будет инвестированием в ETF широкого рынка с наименьшими коммисиями.
avatar
Поздравляю, отличный результат! Участвовал, но к сожалению только 110-й. Делал пакет стратегий, использовал xgb, регресии, нейросети, word2vec.

avatar
aimaster, а анализ новостей вам чего-нибудь дал?
avatar
Михаил, скорее нет, чем да. добавил пару стратегий на новостях, колеблющихся около нуля, в общий пул — чтобы уменьшить отклонение в виду целевой метрики конкурса. были интересные моменты, если брать определенные типы новостей (например, банкротство) + word2vec по news title. Но не хватило времени чтобы нормально встроить в портфель + выборка не большая, были подозрения на курвафит.
avatar
20-е место — это очень круто, поздравления и респект
avatar
Тема интересная, автор, пиши исчо.
avatar
Поздравляю! 20 место это хорошо!!

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

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

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

теги блога Шумихин Михаил

....все тэги



UPDONW