Лет 12 назад, когда я впервые ковырял тему нейросетей на фондовой бирже, прочитал как кто то облапошился обучая нейросеть распознавать танчики. Нет, сеть результат показала, но как оказалось на картинке с танчиками был какой то значок, а где танчиков не было, значка не было и нейросеть научилась распознавать не танчики, а наличие отсутствие вот этого значка. Запомнилось мне это наверно, потому что это было единственное, что я тогда понял о нейросетях.
И вот теперь я поймал свои «значки», когда пытался предсказать динамику, на основе CNN+вейвлетпреобразований.
Тут подробней. Нет я не заглядывал в будущее, и не так знак поставил где то. Я не стал нормализовывать цены, ибо считал что для CNN не важно все это, картинки они ведь и в Африке картинки, и вот так выглядит картинка вейвлетпробразования для ВТБ с ее копеечными ценами за акцию и Норникель, с его десятками тысячами рублей за акцию:
Кто видит разницу пусть первым кинет в меня камень.
Человеческий глаз разницы не увидит. Но в цифровом виде они отличались, то есть по формам вроде одно и то же, но Норникель «ярче», хотя это и не видно.
Первая мысль что тут что то не так возникла, когда моя нейросеть стала показывать вполне такие приличные результаты (с учетом что раньше то от нейросетей я гешефта не видел от слова совсем), при том что картинки что при будущем росте, что при будущем падении выглядели одинаково. «Ну как так?!» — думал я уже тогда.
Ну а когда я обучил нейросеть уже на 11 фишках и применив простенькую оптимизацию получал средний профит на out_sample в 1%, то есть вполне выходил на 20-30% годовых, в таком неспешно консервативном способе торговли, я решил проверить результат, так как мой опыт говорит что если ты получил неожиданно хороший результат, то что то тут не чисто.
В группировке по фишкам я глянул сколько раз по той или иной фишке срабатывал шорт и сколько раз лонг. И тут то все и раскрылось...
Вот что я увидел:
Оказалось что ВТБ сеть всегда ставит в шорт а Норникель, Транснефть и Лукойл всегда в плюс. «Ну ставит и ставит» — может кто то подумать, «может это такой почерк уникальный у фишек, которую нейросеть распознала»… Только вот я как торгующий, отлично помню что Норникель и Транснефть имеют большие ценники а ВТБ минимальные. «А не предсказывает моя нейросеть, тупо по цене?!».
Я отсортировал акции по масштабу цен и по доле лонгов и все совпало с точностью почти в 100%:
То есть чем больше цена на акцию, тем охотней нейросеть ставила ее в лонг и наоборот.
Впрочем не все так просто. Вот прогнозы нейросети по Сберу:
Как видим средняя цена на неделе при прогнозе лонга ниже чем при прогнозе шорте. И прогнозы шорт-лонг идут вразнобой. В общем нейросеть учитывает масштаб цен, но в случаи некоторых фишек работает как то по другому.
Вот например я взял фишки, по которым нейросеть принимала решения в шорт их ставить или в лонг 50 на 50:
1 это уверенный лонг, -1 уверенный шорт. Return_trade это профит. Как видим имеем 47 сделок с средней профитностью 1,27. Но я о другом-дальше идут цены: средние, максимальные и минимальные, и видим что нейросеть не помешало спрогнозировать уверенный шорт по Газпрому, при том что цена на неделе была 191, и не помешало спрогнозировать уверенный лонг при том что цена была 151,86. И по другим фишкам та же история, то есть не все так просто.
Ну а почему все же нейросеть упорна ставила Норникель и Транснефть в лонг и Сургут и ВТБ в шорт? А так оказалось что на тесте первые чаще росли, а вторые чаще падали. И в какой то мере на тесте это продолжилось, поэтому и на out_sample был приличный профит. Такая вот хитро… опая нейросеть, всегда ищет простые пути.
По поводу танчиков и знаков — это не проблема нейросети или подхода — это проблема данных, если ты подал данные где танчики всегда ассоциированы со знаком, ну нейросеть подумала что это один из атрибутов. Это как если обучаться на фотографиях на однородном фоне модель подумает, что с неоднородным фоном это, возможно, что-то другое и т.д.
По поводу лонг-шорт, по мне так лучше руками балансировать лонг-шорт через предикт_проба, тогда большая часть вопросов снимется.