Блог им. 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
А как-нибудь по хитрому учитывал корреляцию между активами?
avatar

Михаил

Михаил, «По-хитрому» недопустимо правилами. Требуется доказать, что честно угадал
avatar

Дмитрий Ш

Михаил, да, делал признаки по принадлежности к различным группам в зависимости от ковариации активов… Т.е. активы имеющие наибольшую ковариацию между собой относятся к одной группе, и таких групп было около 20. После этого считал характеристики для активов внутри группы и делал их признаками отдельными, получался своего рода пэйр-трейдинг анализ внутри бустинга.
Шумихин Михаил, а корреляцию за все время или там какие-нибудь по хитрому? 
avatar

Михаил

Михаил, я делал за последние 3 года, но можно например делать за последние n значений и считать p-value для метода наименьших квадратов, я такое использую для своих стратегий. Но здесь не использовал, не помню почему уже.
Почему именно LGBM?
avatar

SergeyJu

SergeyJu, он быстрее, можно больше деревьев строить чем XGBooste

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

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

Михаил

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

Михаил, вы эти методы в реальной торговле используете? Какие результаты, если не секрет?
avatar

Schurik

Schurik, использую, результат понятие растяжимое, живу на доходы от инвестиций — вот такой результат. И люблю участвовать в разных соревнованиях по ML, но в этом не участвовал, так как поздно узнал. У меня инвестиционная стратегия, а не высокочастотная, поэтому c++ не пользовал. Знаю, что натренированная модель может быть экспортирована в С код. У catboost есть канал в Telegram (catboost_ru) — Анна Вероника (основной разработчик) отвечает очень оперативно. Думаю лучше у нее спросить напрямую. 
avatar

Михаил

Михаил, и еще такой вопрос, можно ли использовать Catboost в программах на с++? В продакшене python все-таки не прокатит…
avatar

Schurik

Михаил, спасибо большое, впервые услышал про catboost, очень любопытно. Да, вижу C API,  прекрасно, можно использовать обученные модели в программе на С++. Обучать, разумеется, можно и в питоне, даже удобнее.
avatar

Schurik

Schurik, Почему пайтон не может идти в продакшен? Все библиотеки как правило для него написаны на с++… Но конечно вы можете это реализовывать и на плюсах, только зачем?
Шумихин Михаил, чтобы работало быстрее. У меня стратегии ближе к HFT.
avatar

Schurik

Schurik, в хфт использовать трибэйсд методы, очень плохая идея

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

Schurik

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

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

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

avatar

Anton Shabunin

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

avatar

Ромирес

Ромирес, Интересно читил ли кто в итоге первым пришел, больно у него большой разрыв от остальных, ну скоро узнаем.
Шумихин Михаил, а как они (2sigma) или мы узнаем? Если алго запутанный, то константу нормализации (например знание волатильности рынка на тесте) можно запрятать даже без видимых коэффициентов.
avatar

Ромирес

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

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

Astrolog

Astrolog, Не пишите здесь, не люблю я вашего брата гомеопата....

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

Vanger

Vanger, я еще не освоил:)

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

Гикбрейнсы учат с нуля за 1,5 года, факультет «Искусственный интеллект»
avatar

GSV_pusher

Какой глубины деревья использовали люди на этой задаче? 
Фичи, которые Вы использовали, более- менее стандартные, или были «ноу хау» из торговой практики? 
avatar

SergeyJu

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

Vanger

Vanger, Да, хорошее предположение, что тех анализ работает, но те кто его используют не умеют программировать… Также как правило не умеют программировать гадалки, экстрасенсы, астрологи, тренеры личностного роста и др., но это не значит что их методы не работают на рынке....

Шумихин Михаил, дайте я Вас обниму за эту точку зрения. Она исключительна на СЛ.
ТА гораздо легче освоить чем всякие ФА и лженауки типа математики, поэтому у него столько последователей.
avatar

Ivan Ivanov

пробовал что-нибудь с ценовой динамикой обыграть? например, делать ставку на акции, которые хуже рынка шли на тестовом периоде?
avatar

iamblackornot

iamblackornot, я не делал ставки, а создавал признаки, в том числе и признаки лучше-хуже рынка, только не качественнные а количественные, а алгоритм уже проверяет работает этот признак на тренировочной выборке или нет, я же проверяю эти признаки на тестовой выборке
А как они определяли, у кого лучше прогнозы? Какие-нибудь метрики типа R^2 прогнозов победителей опубликованы?
avatar

Schurik

Schurik, https://www.kaggle.com/c/two-sigma-financial-news/overview/evaluation вот ссылка как считалась метрика

это все конечно хорошо, но результат к сожалению выражен в неком score, который не понятно как меряется. Сдается мне что в этом конкурсе можно победить если твой результат 0% годовых, а у соперников <0%. Поэтому собственно вопрос, что это все дает в реальной торговле? Мое мнение, уж простите, таково, что машинное обучение не работает в трейдинге, либо результат на уровне обычных индикаторов.
avatar

Max

Max, скор тут по сути шарп для портфеля предсказаний — самый практичный скор. 
avatar

Михаил

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

Max

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

Max

А для обывателя на простом языке можете объяснить реальную пользу от выше обозначенной темы? Какое применение и результаты в трейдинге?
avatar

Антон Иванов

Антон Иванов, Обывателя данная тема должна приводить к следующему выводу, что он не в состоянии предсказать поведение рынков ни в какой перспективе, ни в долгосрочной, ни в краткосрочной. Поэтому наилучшим для него будет инвестированием в ETF широкого рынка с наименьшими коммисиями.
Поздравляю, отличный результат! Участвовал, но к сожалению только 110-й. Делал пакет стратегий, использовал xgb, регресии, нейросети, word2vec.

avatar

aimaster

aimaster, а анализ новостей вам чего-нибудь дал?
avatar

Михаил

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

aimaster

20-е место — это очень круто, поздравления и респект
Тема интересная, автор, пиши исчо.
avatar

Чёрный Трейдер

Поздравляю! 20 место это хорошо!!

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

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

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

Denis


Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Залогиниться

Зарегистрироваться
....все тэги
UPDONW