Блог им. IlyaT79

Градиентный бустинг с годовой перспективой ч.2

Неделю назад, я рассказал о своих попытках применить градиентный бустинг к выбору акций на годовую перспективу.
Тогда, в комментариях мне рассказали много всего полезного, но основные замечания над которыми я работал в течении недели были:
1. Бэктест был проведен всего на 3-х годах (что было обусловлено небольшим обучающим набором)
2. Граница принятия решения 1.01 обеспечивала «заглядывание в будущее» из-за того что использовала прошлогоднюю отчетность.
Я сместил границу принятия решения на апрель и расширил тренировочный датасет (и ещё провел кучу мелких улучшений, например вместо RMSE перешел на квантильную функцию потерь, что оказалось очень уместно). К сожалению, расширение тренировочного датасета ни на грамм не снизило ошибку при обучении на 20 годах, но теперь при уменьшении количества лет, качество страдает значительно меньше, что в свою очередь позволило мне провести бэктест на 7 годах (хотя в качестве 2014-го я сильно сомневаюсь).
С выборкой в 7 наблюдений, уже можно (зажмурившись) попытаться оценить статистическую доствоерность гипотезы о том что моя модель дает лучшие результаты чем S&P500 по итогам года. У меня получилось p-value ~ 0.03 (парный стьюдент-тест), что вроде-бы хорошо, но я что-то в этом сильно сомневаюсь и буду ещё перепроверять.
Я создал тестовый портфель из акций, рекомендованных моделью на 21-22ее годы (там ещё INTU должно было быть, но я его здесь не нашел) — будем наблюдать.
Графики бэктестов (S&P500 — красная, модель- синяя):
Градиентный бустинг с годовой перспективой ч.2
Градиентный бустинг с годовой перспективой ч.2
Градиентный бустинг с годовой перспективой ч.2
Градиентный бустинг с годовой перспективой ч.2
Градиентный бустинг с годовой перспективой ч.2
Градиентный бустинг с годовой перспективой ч.2
Градиентный бустинг с годовой перспективой ч.2
★3
26 комментариев
К 7 заведомо не нормальным величинам применять Стьюдента имхо не очень. Мне кажется нужно копать в сторону большего числа точек. Отчетность выходит раз в квартал, почему бы не принимать решения раз в квартала на основе отчетности за предыдущий квартал. У вас уже будет 28 точек. Я бы к ним какой-нибудь непараметрический тест применил (Манна — Уитни или Уилкоксона).
avatar
Михаил, почему заведомо ненормальным? Я проверю, но годовая доходность s&p500 по идее должна быть более-менее нормальной (в ГС).
upd: посмотрел, признаю, был не прав. не нормальная.
avatar
Илья Т., доходность ограничена снизу -100% и не ограничена сверху — если выбирать среди простых распределений, то скорее логнормальная или логарифм распределен нормально. Но про доходности давно известней факт, что хвосты очень тяжелые. Обычно логарифм неплохо приближается или t-распределением с малым числом степеней свободы (3-6) или смесью двух нормальных (с малой дисперсией и большим весом и большой дисперсией и малым весом).
avatar
Почитал пред топик. Понравился.
Думаю, основная мысль:
Мне 42 года и большую часть из них я в сказки не верю, поэтому думаю что это выглядит слишком хорошо чтобы быть правдой. Если бы в природе существовали такие фичи, которые давали бы прибыль больше чем рандом, то наверное человечество бы их заметило и учло раньше меня
Вы знаете как я могу нейросети готовить? И не только нейросети.) Не оторвешься.
Давал обучалки другим, проверяли своими методами — тоже все отлично.
Одна беда, в реальности все это не работает.
ЗЫ Кстати, мартышка Долли который раз превосходит по эффективности лучшие инвест фонды. Ни о чем не говорит?
avatar
3Qu, 
Вы знаете как я могу нейросети готовить?
нет. расскажите.  Keras или PyTorch? Почему? Как Вы относитесь к мнению, что NN больше подходят для однородных данных (CV, распознавание речи итп),  для табличинных данных лучше использовать «деревянные» алгоритмы?
Кстати, мартышка Долли который раз превосходит по эффективности лучшие инвест фонды. Ни о чем не говорит?
Говорит, но это прямо отдельным постом надо писать. В целом ничего удивительного.
avatar
Илья Т., 
нет. расскажите.  Keras или PyTorch?
PyTorch почти не знаю, не работал. В основном scikit-learn и TensorFlow.
Результаты вот такие, например:

Это прогноз изменения котировок на 5 мин. По х — прогноз, по Y — реальное изменение. Мы видим, что при прогнозе >1.5 и <-1.5 прогноз оч неплох. Ну, а прогноз в окрестностях нуля нас и не оч интересует.
Понятно, что все цифры нормированы, и к реал рыночным значениям их надо пересчитывать.
Почему разброс по y, думаю понятно, там сигмоиды по входам НС.
Как Вы относитесь к мнению, что NN больше подходят для однородных данных (CV, распознавание речи итп),  для табличинных данных лучше использовать «деревянные» алгоритмы?

Честно, так, абстрактно, не знаю. Это конкретно надо смотреть.

Говорит, но это прямо отдельным постом надо писать. В целом ничего удивительного.
Напишите про мартышку Долли. Интересно ваше мнение.
avatar
почему машинное обучение работает хорошо на исторических данных, но отказывается работать на реальных данных — это самая большая загадка искусственного интеллекта
Гуру Хренов, вопросом на вопрос.
Почему статистика брокеров по выигрышам/проигрышам клиентов оч хорошо совпадает с аналогичной статистикой выигрышей/проигрышей на случайном блуждании? Упрощенно говоря, как если бы трейдеры играли в рулетку на красное/черное.
avatar
Гуру Хренов, потому что стандартный ИИ настроен на совсем другие задачи. 
У нас два особых фактора, нестационарность и высокий уровень шума. 
avatar
SergeyJu, с нестационарностью можно бороться и до определенной степени делать предсказываемые величины гомогенными (силами того же машинного обучения). Имхо главная проблема для применения ИИ в торговле — катастрофически малый объем данных. Т.е. формально-то он большой, но все коррелировано, зависит в моменте от малого количества факторов. Поэтому обучаться полноценно не получается.
avatar
Гуру Хренов, тоже тема для отдельного поста, но в целом никакой загадки здесь нет: из-за плохого дизайна моделей. Полагаю что при хорошем дизайне модели, ML одинаково плохо должно работать и по истории и на реальных данных. По-большому счету, если взять стотысяч  разных моделей и накормить их историческими данными, рано или поздно некоторые из них покажут какой-то эффект. Обозначает ли это что они будут эффективны в будущем?
Тут ведь какая фишка: рынок это игра с нулевой суммой. Это автоматически обозначает, что я в одиночку со своим райзеном и GTX1070 должен победить департаменты из парней с лучшим мировым образованием и суперкомпьютерами. В фильмах такое ингода случается…
avatar
Для чистоты стоит сделать портфель НЕ рекомендованных акций и сравнить итоги потом
avatar
ПBМ, мы эту идею с прошлой недели уже обсаждаем ).  Чуть ниже  описал подробнее. Если кратко то текущая модель заточена под то чтобы искать рекомендованные акции и не заточена под то чтобы искать не рекомендованные, а это не одно и то же. Технически не сложно сделать «такую же но другую» для поиска не реомендованных, я над этим подумаю. Вопрос в количестве времени и правильной расстановке приоритетов.
avatar
Илья Т., не совсем так. я имел в виду, не помню как это правильно называется, нулевая гипотеза? 
если есть список из 100 акций, который рассматривает ваша система, и она выбирает из него 30, то вы смотрите за этими 30.
но ведь интересно же, И как поведут себя остальные 70?
avatar
ПBМ, я выбираю из S&P500. Соответственно, не совсем за остальными, а просто за всеми (что в нашем случае почти одно и то же) можно следить по графику S&P500.
зы: да, нулевая гипотеза — подходящий термин.
avatar
такая интересная статья, ее начинаешь читать, и просто видно нарушение последовательности мысли,
надоели  
avatar
Skifan, спасибо, очень рад, что на моё творчество обратил внимание челвек высокого уровня культыры и интеллекта. Такое не каждый день происходит. Я тоже, как и Вы не высокого мнения о своих умственных  способностях, но думаю что мир стал бы капельку лучше если бы Вы подробнее пояснили про «непоследовательность мысли». Не для — меня, мне такое не понять, разумеется, но это могло бы быть полезно для окружающих.
avatar
Илья Т., 
я не лучше и не хуже 
Граница принятия решения 1.01 обеспечивала «заглядывание в будущее» из-за того что использовала прошлогоднюю отчетность. 
расширение тренировочного датасета ни на грамм не снизило ошибку при обучении на 20 годах, но теперь при уменьшении количества лет, качество страдает значительно меньше, что в свою очередь позволило мне провести бэктест на 7 годах 

ни че не замечаешь? 
нарушение связей, все скачками. Когда с психически больными общаешься, вот у них похожая «логика»
avatar
Skifan, я ничего не замечаю если честно.
Я описал две проблемы, которые были выявлены при обсуждении прошлого поста и действия, которые я предпринял для того чтобы эти проблемы решить. В первой половине проблема, во второй решение.
Я прошу прощения если я невнятно описал, но я не знаю как по другому.
Проблема № 1: заглядывание в будущее. Модель моделировала принятие решения в январе на основании отчетности которой в тот момент ещё не было.
Решение проблемы № 1: смещение границы принятия решения
Проблема №2: сильное падение качества бэктестов при уменьшении количества лет
Решение проблемы №2: увеличение количества анализируемых акций, что в свою очередь увеличивает размер тренировочной выборки и увеличивает качество бэктестов.
Что не так?
avatar
Илья Т., вот теперь я вижу грамотного человека и это радует ))) 
грубо говоря прогнозирование рынка на основе старой волы 

Линду Рашки читали ??  если нет, советую, много моделей описано,
проблема всех этих моделей, что работают определенный период времени на определенных активах, каждые 3-4 года рынок меняется и бывает очень круто меняется. 
Удачи ) 
avatar
На p-value 0.03 как-то не похоже, но теперь этим результатам можно доверять по крайней мере, и видно, что зарабатываете +- индекс.
Не пробовали подход с квантильными Лонг-шорт портфелями, про который я писал в прошлый раз? Так хотя бы было видно, может ли ваша модель отделить виннеров от лузеров.
avatar
MadQuant, 
На p-value 0.03 как-то не похоже
Да дичь конечно, но я сразу написал что надо пересчитать. Видимо где-то накосяпорил. А потом чуть выше умный человек ткнул меня носом обратил моё внимание на ненормальность исходных величин и это всё окончательно потеряло смысл. Я как-то по другому посчитаю, но ещё не придумал как.
Не пробовали подход с квантильными Лонг-шорт портфелями
Нет. И в текущей версии это скорее всего не будет работать точно потому что у меня лосс функция «перекошенная» — она сильнее пенальтизирует модель за ошибки вверх чем вниз. Т.е. она заточена на то чтобы искать винеров сильнее чем лузеров (не уверен что понятно объяснил — если непонятно то попробую ещё). Можно натренировать «такую же, но другую» модель с перекосом в обратную сторону. Вот прямо так как Вы сказали, я делать пожалуй не буду, но ответы этой «такой же, но другой модели» можно например использовать как дополнительные точки для той же стат. достоверновсти. Я вообще сейчас планирую на статистике сосредоточиться. Но надо больше циферков.  Плюс всё еще в планах «критерий Шарпа» и другие умные слова, которые я тут узнал.
avatar
MadQuant, можете описать смысл квантильного подхода, что он нам дает?
avatar
когда моделирую портфели… то у меня критерий крайне простой...

мой портфель должен вдвое втрое обгонять, но не индекс сипи, а портфель из самих же акций...
ну т.е например… изначально делаем выбор из 50ти акций… выбираем 10 луших… и должный обгонять в 2-3раз портфель в котором у каждой из 50этих акций 1/50...

а сравнивать сипи это тупик...

как пример… сравнения портфеля




 
avatar
ves2010, так я то же самое делаю. только у меня исходный портфель из  примерно 500 акций, которые (по чистой случайности) совпадают с акциями из индекса. А дальше всё как Вы скаазали.
а сравнивать сипи это тупик...
Почему?
avatar
Илья Т., сипи переиграть на бычьем тренде крайне легко
Просто выбираешь акции с высокой беттой…
avatar

теги блога Илья Т.

....все тэги



UPDONW
Новый дизайн