Блог им. DenisVo

Эксперемент: Часть 5. Неудачи. Торговая система на базе глубокого обучения от начала до реальных торгов.

Всем привет. 

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



Основаная проблема конечно же в том, что мои данные являются мусором и при этом сильно несбалансированны. 
Так же выяснилось, что ROC кривая довольно плохо работает с несбалансированными данными.

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

Так же хочется сказать пару слов у качестве TenorFlow. Не могу понять отчего там столько ошибок, многие методы просто не работают друг с другом. Складывается ощущение, что они постоянно обновляют API ломая связи.

По ссылке на github вы можете найти код из видео, я его немного структурировал, и если кому интерсно, можете с ним поиграться.
github.com/CloseToAlgoTrading/CodeFromVideo/tree/master/episode_12
★2
14 комментариев
Вы можете пояснить, почему Close имеет shape (None, 10, 1) — может какая-то ошибка?
Что за признак Nr?
avatar
Михаил, Nr это номер тика. В целом идея была изолировать каждый день и уйти от времени, сконструировав бары по обьему. в итоге вместо милисекунд я просто использовал как индекс бара первый индекс первого тика. 
Так как каждый день у нас начинается с 0, то можно видеть сколько тиков в каждом баре :).

что касается (None, 10, 1) то это для lstm, входной тенсор. У нас 1 фича, ее 10 временных шагов. None обозначает любое количество входных данных. Т.е. один вход у нас имет размерность 10,1 — по простому 10 строк 1 колонка.

зы. я дмаю в ноутбуке *step3* более понятно суть происходящего должна быть.
avatar
Denis, про shape понял. Про номер тика не понял зачем он нужен — какую содержательную информацию должен нести для предсказаний?
avatar
Михаил, В представленном примере скорее всего никакую, просто до кучи его туда впихнул. но на базе него можно определять другие параметры. типа скорость потока ордеров. Если у нас большие обьемы, то свечек будет больше в целом за весь день. Или же можно узнать в одном баре был один большой ордер или же несколько мелких, ну и тд. Я пока только копаю в эту сторону. Времени особо нет, еще и вирусы тут во круге... 
avatar
Denis, тут простой тест — сколько у вас на уникальный номер тика имеется обучающих примеров. Если меньше нескольких тысяч, то вряд ли вы чего-то выучите. Вторая проблема, что у вас признаки слишком разного масштаба из-за этого признака — обычно сети крайне плохо такое перевариавают. 
Ну и третье — у вас сеть слишком примитивная чтобы выучить какие-нибудь зависимости. Посмотрите на стандартные архитектуры для изображений и анализа звука — там десятки слоев, которые постепенно выуживают сигнал из исходных данных, а у вас несколько слоев при этом известно, что сигнала заведомо мало относительно шума. Тут возможно нужно еще больше слоев. 
Я лично взял за основу WaveNet и составил сеть с 87 слоями, которая дает приемлемый результат.
avatar
Михаил, С размерностью там все ок, они все приводятся к размерности от 0 до 1. Более того я их заскейлил по всему датасету сразу :)
По поводу, мало данных и примитивной сети это да, однако приметивная сеть вполне может находить некоторые зависимости. Ну да, архитектура сети вопрос отдельный и более серьезная и сложная вскорее всего будет работать лучше. Правда как вы наверняка знаете, у сложных архитектур много других проблем.

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

Я долгое время пытался всю обработку запихнуть в тенсорфлоу, но я наверное туповат %)) там что не метод надо с бубном работать.
avatar
В целом я тут обдумывал весь свой подход, и стал задумываться, а имеет ли смысл в общем делать классификацию. Получается что я делаю некоторое упрощение в значениях которые собираюсь предсказывать, т.е. не целый ценовой ряд, а просто класс, но почему это должно работать лучше, чем предстказывать весь будущий ценовой ряд :) я как то не придумал.
avatar
Denis, я делаю регрессию — предсказываю изменение цены в процентах на некое количество временных периодов в перед. 
avatar
Михаил, мне почему то казалось, и пока еще кажется, что упрощение меток и классификация, должна работать лучше регрессии. Стоит сказать что в некоторых других похожих задачах так и есть, но там явно прослеживались зависимости между фичами и лейблами. На рынке же, мне думается все же будет лучше сперва выделить некий класс событий в ручную, как эксперт, и уже в этом классе делать предсказаний. 
Т.е. Задачу надо бы упрощать.
avatar
Denis, на мой взгляд лучше искать больше данных, а не метки упрощать. Все равно когда вы делаете реальные ставки, то имеете дело с реальными доходностями, а не упрощёнными метками. Кроме того, мне кажется сделать рабочую модель на тиковых данных очень сложно. Там обычно работают стратегии типа парного арбитража, и мало кто занимается торговлей одним инструментом в попытках предсказать его движение. В акциях и так отношение сигнал шум не очень, а на коротком периоде на это еще валются гигантские транзакционные издержки. 
avatar
Михаил, А как вы важность фич искали? я как то читал, если не ошибаюсь, вы что то random forest использовали для проверки… или это не вы были? )
avatar
Denis, у меня сейчас основная модель прогнозирования на основе GBM (Catboost) — там важность признаков из коробки есть, но признаки нужно самому сочинять. За основу взял список рыночных аномалий из академических статей. Выбор оптимальных параметров и признаков с помощью Байсовской оптимизации (hyperopt).
Сейчас пишу предсказания на основе сетей на основе просто котировок и дивидендов без ручных признаков — есть рабочий прототип, но пока не использую. Пишу тесты, а потом буду писать генетический алгоритм поиска оптимальных параметров. Не знаю сколько времени займет.
Собираюсь стравить GBM и сети в генетическом отборе.
avatar
Михаил, ага, да boost алгоритмы часто быстрее обучаются и лучше результат чем сети дают, если не особо по структуре заморачиваться. 
Хмм, интересно, по поводу генетических алгоритмов для поиска параметров, не будет и это своего рода подгонка?
avatar
Denis, выбор алгоритма подгонка, выбор параметров алгоритма подгонка, выбор используемых признаков подгонка, обучение алгоритма это тоже подгонка. Тут просто нужно разумно подойти к процессу. В трейдинге постоянно появляются новые данные. Если в делать тестирование и генетический отбор на новых данных, то имхо тут ничего страшного нет. Страшно, когда учишь тестируешь на одних данных.
avatar

теги блога CloseToAlgoTrading

....все тэги



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