Добрый день мои маленькие любители машинлернинга:) Наконец нашел время написать по теме.
Только что закончилось интересное соревнование на Каггле проходившее почти год, в котором я принимал участие и благополучно попал в Топ 1% и занял 20 место.
https://www.kaggle.com/c/two-sigma-financial-news/leaderboard .
Если кто не в курсе про 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» это скорей всего окажется опцион вне денег.
Всем рекомендую учавствовать в подобных соревнованиях, они очень много дают и с точки зрения программирования, понимания трейдинга и анализа данных. Удачи!
по скорости на обучении LGBM быстрее XGBoost быстрее Catboost
по скорости на предикшене Catboost быстрее LGBM быстрее XGBoost
по качеству на дефолтных настройках Catboost лучше XGBoost лучше LGBM
Стандартный подход — эксперименты на LGBM, что позволяет много идей быстро обкатать, а потом уже выбрать более предметно на чем финальный прогноз делать и с помощью hyperopt подобрать гиперпараметры параметры
catboost.ai/docs/concepts/python-reference_catboost_save_model.html
https://catboost.ai/docs/concepts/c-plus-plus-api_dynamic-c-pluplus-wrapper.html
catboost.ai/docs/concepts/c-plus-plus-api_applycatboostmodel.html#c-plus-plus-api_applycatboostmodel
Распечатать и повесить в рамку:
Я тоже хотел поучаствовать в 2sigma, но прочитав правила решил не лезть.
Приходила мысль про читинг, не скрою — например метапараметры можно искать вне кёрнела, а потом подмиксовать в виде априорных знаний (коэффициенты какие то) в модель уже у них.
** а это было предсказывать легко.
Всем было изначально понятно, кроме нашего ЦБ.
Гикбрейнсы учат с нуля за 1,5 года, факультет «Искусственный интеллект»
Фичи, которые Вы использовали, более- менее стандартные, или были «ноу хау» из торговой практики?
ТА гораздо легче освоить чем всякие ФА и лженауки типа математики, поэтому у него столько последователей.
Попытался разобраться в метрике. получается 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-дневное окно. При оценке потенциальной доходности за расширенный период может привести к большим искажениям.
Ну и коэффициент Шарпа если меньше единицы, это мало для торговли.
Забавное мероприятие.. За полтора месяца до окончания я там был 8 :), двже закралась мысль что есть шанс получить денег!!!, но что то потом сломалось, и последних два пересчета чет ничего не улучшили… последний вообще показал 0… видимо памяти не хватило. При том что у меня был довольно топорный подход, на нейронной сетке. Как итог 146 место..
К сожалению, судя по тому как там люди в таблице перемещались после каждого пересчета можно сделать вывод что никаких закономерностей найдено не было… :(
И да, что странно, компания то позиционировала компетишн как предсказание по новостям, но данные так себе предоставили, с кучей ограничений.