Я весьма далек от инвестирования, но в свободное от всего остального время, люблю поиграться с машинным обучением. Недавно попробовал научить модель предсказывать цены на год вперед (на фундаментальных фичах без анализа временных рядов). Получилось не так чтобы супер, но и не совсем позор (MAPE ~ 18%). Потом я решил промоделировать: что будет если в начале года покупать акции с самым большим потенциалом роста. На 3 годах, модель один раз немного слила, а в остальные разы неплохо заработала. Графики ниже. Для каждого года переучивал модель на более ранних данных. Мне 42 года и большую часть из них я в сказки не верю, поэтому думаю что это выглядит слишком хорошо чтобы быть правдой. Если бы в природе существовали такие фичи, которые давали бы прибыль больше чем рандом, то наверное человечество бы их заметило и учло раньше меня. С другой стороны, обидно будет через некоторое время понять, что на этом можно было заработать, а я не воспользовался шансом. Соответственно сижу и думаю — что мне теперь с этим делать дальше. Поиграться на реальные деньги? Как-то боязно…
А если покупать акции, любые «голубцы», не в начале года, а на обвале, которые регулярно происходят ( тот же 2020) — то что происходит дальше? Посмотрите графики. Правильно, играться боязно, проигрывать накладно. Поэтому на бирже нужно работать и зарабатывать. В т.ч. и сводя риски и накладные расходы к минимуму. Работа, как работа, ничего особенного…
Заведи штуку баксов на крипту и покупай альты по моментуму, толку будет больше
1. А можно посмотреть 1 график спреда за эти 3 периода? Спреда между индексом и вот этим вот вторым графиком. Конечно, если ты байэндхолдишь вот так, то даже если активы хорошие берешь, то корреляция с индексом будет высокая у эквити и, соответственно, просадки тоже будут жирные. А вот если только альфу торговать, то может быть интересней. Хотя если обычный байэндхолд не вызывает особой тревоги даже в грустные времена, то торговля по модели должна быть ещё приятней.
2. По поводу страха торговать модель — даж не знаю, что сказать, тут такое обычно редко, каждый второй лудоман, каждый первый когда-то лудоманил, даж не знаю, начать с лудоманства на основе сигналов модели — ниче такое начало знакомства с рынком.
3. По поводу того, насколько результаты хорошие — как в (1) написал, просадочки приличные, но эдж модель, кажется неплохо выхватывает.
4. По поводу того, насколько модели и результатам можно доверять. Слишком мало данных. Самый минимум, который нужен — чистый OOS результат — чтоб прям вообще никак не связанный с данными, на которых учился ну и без всяких фокусов а-ля, обучили 50 моделей, провели 50 OOS, отобрали одну модель с лучшим OOS. И прочих способов самообмана.
Вообще, «я не настоящий сварщик, я только каску нашёл» поэтому не понял многих слов из Вашего видимо неплохого комента:
-если только альфу торговать
-чистый OOS результат (я мысль примерно понял, насколько я разумею в ML — я делал четсно. Тут есть какие-то натяжки. например я исходил из того что отчетность за прошедший год доступна сразу в начале следующего, но мне какжется это мелочи)
Илья Т., Про спред: Ну вот график индекса — красненький) и синий — тестовый портфель, эквити как синий ты получишь если купишь портфель инструментов по модели, красный — если купишь индекс. Но видно (хотя надо все-таки глянуть на график спреда, потому что начинаю склоняться к версии MadQuant из комментария ниже)) ), что графики отдаляются с некоторой выраженной силой, это можно заэксплуатировать, отторговать. Например, взять фьючерс на индекс и зашортить его (продать), а корзину модели — купить. В этом случае ты будешь в плюсе если графики будут отдаляться, причем синий сверху.
С точки зрения как нарисовать — ну это просто один вычесть из другого на 3-х графиках, ну и слепить в один — чтоб начинался в новом году график не с нуля, а с той точки где в прошлом году закончился график спреда.
Мой опыт показывает, что если не перемудрить с архитектурой и взять наполненные смыслом признаки, то извлекающая смысл модель — вполне себе ожидаемый результат.
Выделите 5-10-15% портфеля на эксперименты.
Если вы хотите меня (и себя) убедит в обратном, и с индексом качество сравнивать — так делайте это минимум лет за 13 хотя бы (чтобы 2008-й обязательно захватить) + используйте стандартные метрики доходость/риск — Шарп, Кальмар, Сортино, Ulcer index.
Пока что это выглядит как отсутствие предсказательной способности, но вы зачем-то пытаетесь меня убедить, что это хорошо. Хотя профессиональные кванты делают ровно наоборот: даже если модель выглядит хорошо, они пытаются ее как-то «сломать», чтобы доказать себе, что она плохая. И только если это не удается — ставят ее в демо посмотреть полгодика, как она будет работать out-of-sample.
Это как раз очень подозрительно. Для нормальной модели вообще не должно быть существенной разницы, учить ее на 20-ти годах даных или на 18-ти, или на 10-ти. На самом деле, даже 10 лет — это уже очень много, информация на рынке устаревает гораздо быстрее. Если у вас при удалении 10% данных из обучающей выборки ошибка почти на 40% растет — это большой повод задуматься, все ли вы правильно делаете, и насколько неслучаен результат.
Кроме того, с данными с Яху и вообще фундаменталом для обучения нужно быть осторожным — публикация данных задерживается на 90 дней минимум, а в отдельных случаях на 180-360. Поэтому если вы формируете портфель в начале 2020 года — нельзя в это время использовать отчётность за 2019 год, иначе это будет «заглядывание в будущее». Вы этот нюанс учитывали в своем исследовании?
Было бы полезно для многих, если бы Вы хотя бы вкратце API описали.
Где взять? Стандартные примеры закачек.
1) В начале каждого года упорядочить акции по предсказанной доходности — от самой маленькой до самой большой
2) Разбить на 5 портфелей: в первом 20% акций с самой маленькой предсказанной доходностью, ..., в пятом — 20% акций с самой большой
3) Портфель #1 зашортить на 65% от торгового капитала, портфель №2 — на 35%, портфель №4 — в лонг на 35% от торгового капитала, портфель №5 — в лонг на 65%. Суммарно у вас должен получиться денжно-нейтральный портфель (а если предсказания не зависят от левериджа и волатильности — то и примерно рыночно- и бэта-нейтральный)
4) Далее выполняем стандартный тест на значимое отличие результата от нуля. Можно посчитать t = (годовой шарп) * sqrt(количество лет), и если эта штука больше 3 — можно считать, что ваш предиктор работает.
В любом случае, идея смотреть не только вверх своей отсортированной таблички но и вниз — богатая. Спасибо. Буду её думать.
На самом деле, описанная мной процедура — это самый классический академический подход к тестированию того, что нечто умеет значимо предсказывать аутперформанс.
Пока есть время разобраться с коэффициентом Шарпа и др.
Интересно посмотреть динамику портфеля из топ 5, 10, 20 % акций, выбранных по вашей метрике и сравнить Шарп полученных портфелей с Шарпом у индекса.
о существовании коэффициента Шарпа я узнал только вчера, поэтому сейчас изучаю этот вопрос.
Градиентный Бустинг я бы тут вообще не применял, хотя у меня есть пара топиков именно для решения подобных задач. Но я то знаю, что это простая декомпозиция, а декомпозировать можно всё что угодно, в т.ч. случайный шум. Поэтому приходится извращаться перед применением и очень сильно.
Я пробовал sequential feature selection и это стоило мне нескольких дней жизни без компьютера, а результат меня не впечатлил. Почему? А что применяли бы? Я попробовал найти, но не смог. Не могли бы дать ссылки?
Какой в этом смысл? Валидация это и есть тест на новых данных, не входящих в обучающее множество.
Зато он приближает результат к реально воспроизводимому. У вас слишком мало решений и слишком много изначальных фич. Здесь обучить что-либо вообще нереально.
Потому что бустинг это оверфитинг (или курвфитинг) в чистом виде, где-то рядом с нейросетями. Да, вы можете ограничивать лист элементарного дерева, размазывая границы классов, но на выходе вы все равно получите случайно удачный результат. Почему? Потому что на большом наборе случайных чисел всегда можно получить удачный результат прошедший все тесты.
smart-lab.ru/blog/532764.php
smart-lab.ru/blog/536499.php
smart-lab.ru/blog/557358.php
smart-lab.ru/blog/558494.php
Попробую чуть подробнее пояснить.
Мне надо натренировать градиентбуст: в процессе тренировки я выполню 100 000 итераций и каждая следующая даст лучший результат на трэйн множестве, чем предыдущая. Как понять — на каком шаге модель выучивает общие законерности природы, а на каком переобучается под частные особенности конкретного датасета? Проверять на каждом шаге предсказния модели на данных, которые не входили в трэйн множество (validation dataset).Если предсказания модели на валидации улучшаются до 1000 шага, а потом ухудшаются то я могу предположить что с 1001 шага модель занимается оверфитингом и остановиться на 1000м шаге.
Я получил какую-то модель. Как мне понять, что в будущем я смогу её эффективно использовать? Показать ей третий датасет, сформированный из данных, полученных в более позднее время (test dataset)
Ну вообще так весь ML работает. ))) Какие предложения? Отказаться от него совсем?
upd: немного дополню. В ML есть две фундаментальные проблемы: дураки дороги high bias и high variance. Причем с первой мы можем бороться по-большому счету только одним способом: больше данных богу данных. С другой стороны для борьбы переобучением применяется целый арсенал способов: описаный выше ранний останов обучения, регуляризация десятками разных способов, фича селекшн, undersampling итд…
Очень интересно. Спасибо. Читаю.
Верно.
Как ни странно — да. Тут даже более простыми методами с регуляризацией типа AR работать не получается. Спросите у любого опытного алготрейдера и он вам скажет, что NN и ML место на помойке.
Это не значит, что их нельзя использовать вообше. Вообще можно, но очень осторожно. Например, типичным алго-приемом является «облако» параметров, полученное как Bagging от аналогичных по-сути индикаторов. Bagging/Bootsrap — в данном случае универсальны, так как не образуют последовательных разложений (подгонку вида остаточный шум-шум).
Всё остальное по умолчанию не работает, но при очень сильных изменениях алгоритмов и жестких ограничениях по прогону на validation set теоретически может использоваться.
А теперь посчитайте свой спред по предложенному MadQuant алгоритму — он не проходит валидационный тест Z (Mad называет его тест T, то есть Студента), да ещё у вас под килем 300 фичей. А на 300 фичах тест должен быть в 20 раз лучше.
Какой годовой шарп разницы портфеля и sp500?
средний Шарп за 7 лет против S&P500 = 0,18
Я не знаю какие выводы из этого можно сделать )
0.18*7^0.5 = 0.47
А вам нужно где-то 2-3, для того чтобы быть уверенным в том, что модель работает. А так торговать её примерно то же что и купить индекс.
Впрочем, надо сказать, обогнать SP500 его же составом акций весьма не просто и 1.3 вполне приличный Шарп. То есть тут только наращивать выборку.
стандартный Z тест для критической вероятности >99%.