Блог им. DenisVo

Одна из многих причин, почему нейронные сети не способны предсказывать рыночную цену.

Буквально на днях, в комментариях я выразил обеспокойство тем, что если брать ценовой ряд как фичу, то нужно наши входные данные (ценовой ряд) привести к одному виду, а это на мой взгляд довольно сложно. Простой пример это волатильность, если она изменяется, то наша сеть начнет выдавать больше ошибок. 
Эти размышления, заставили меня вернуться к основам, и посмотреть сможет ли сеть выучить простейшие математические функции. Конечно, с линейной функцией проблем не возникло, а вот с нелинейными как и ожидалось мы получили массу проблем. Так как сети неплохо работают внутри того диапазона на котором они обучались, и с грохотом проваливаются вне этого диапазона. 

Вот простой пример предсказания функции синуса. y = sin(x)

Одна из многих причин, почему нейронные сети не способны предсказывать рыночную цену.
Синим показаны наши истинные значения, оранжевым то, что простейшая модель предсказывает. Красный квадрат отображает диапазон видимый при обучении. 

На самом деле, мне кажется это довольно большая проблема в целом. 

Сварганил небольшое видео с несколькими различными эксперементами, кому интересно можно посмотреть. Код как обычно на гитхабе, ссылка в описании к видео. *Есть русские субтитры %)




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

★3
37 комментариев
нс должна распознавать а не предсказывать
avatar
ves2010, что именно распознать? функцию? ну вот внутри диапазона она с этим будет неплохо справляться, вне диапазаона, там уже как бог пошлет. :( 
Народ борется с проблемой… но что то пока не получается у них… :)
avatar
CloseToAlgoTrading, у тех кто получается они просто временно забирают деньги.
пока не начинает получатся у всех.
до компютеров обычные средние на дневках давали альфу.
а теперь все кончилось.

нейросети это такие-же средние на дневках.
будут давать пока все не начнут пользоваться.

по этому куча статей что это не работает )
avatar
ves2010, НС может и то и другое. Эт как и на что обучать.
Может ли она предсказывать рыночные ценовые ряды — это другой вопрос.)
avatar
Распознать или предсказать, значит фактически понять суть процесса или явления, когда нейросетки это смогут сделать, проект хомо сапиенс можно закрывать. Мне кажется народ из-за наличия дешевых вычислительных мощностей вконец обленился.
avatar
Ну, на вход можно подавать дофига всего. К примеру, вместо данных по цене можно подавать данные с индикаторов, у которых довольно ограниченный диапазон изначально. Хотя, грамотно спроектированная сеть сама может построить любой индикатор внутри себя. Можно падавать данные по изменению цены, а не саму цену.
Сергей Андреев, Вопрос не в цене на самом деле или индикаторах, а в том, что не стоит забывать как это все работает. Мы то привыкли нафигачить миллион фич, она там уже разберется ;) что делать.

«Хотя, грамотно спроектированная сеть сама может построить любой индикатор внутри себя» 
Вот это утверждение я слышу от многих, но на практике мы получаем все не так радужно, отсюда и все эти танцы с бубноми. 
avatar
Так ты скажи ей: «си-инус», она коэффициенты лишь подберёт и ОК.
avatar
 Что касается масштабирования и приведения к конкретному диапазону — не вижу проблемы.
Мы можем сфотографировать 2 разных дома — небоскреб и избушку, и оба изображения этих домов будут укладываться в наш стандартный кадр. С масштабированием и приведением к диапазону все аналогично. Никакой разницы, даже преобразования те же самые.
avatar
3Qu, я пока пришел к выводу, как я уже писал, что изображение может помочь.
Что же касается простого преобразования, но может получится что мы учим сеть на диапазоне 0..1 и взодные данные были от 0..100, вот приходят данные из диапазона 101..120 как мы их будет приводит к 0..1? полчим уже больше 1 после приведения, а это опять же таки вне диапазона обучения, а значит мы не можем быть уверены в результате
avatar
CloseToAlgoTrading, скажем, есть евробакс (0..100) и есть фьючерс Si (0… 100,000). Si делим на 1000, и получаем тот же евробакс.
Далее, нам не нужна вся история цен, а только на некотором интервале — {C}
Хотим в диапазоне — {0,1}
1. {C1} = {C} — Cmin
2. {C2} = {C1}/C1max
Все у вас в диапазоне {0,1}.
Это как пример, можно и по другому — эт от конкретики зависит.
avatar

3Qu, Я вижу в вашем методе проблему того что отношение может изменится. Все это будет работать до тех пор, пока вы будете попадать в ваш диапазон обучения. Т.е. вам придется постоянно переучивать ваш алгоритм подгоняя под текущие данные.
Если посмотрите видео, там последний пример, с синус функцией где обучение проходит на 100 точках (подаем на вход последовательность из 10), а тест тойже функции построенной на 20 и на 400, и мы видим, что сеть уже ошибается. 

avatar
CloseToAlgoTrading, не вижу проблем.
Я работаю с 15 точками, и преобразование примерно такое, как я нарисовал. Немного по другому, у меня последняя точка всегда =0. Преобразуются только эти конкретны 15 точек. Это работает на любом интервале истории.

avatar
CloseToAlgoTrading, там допущена масса ошибок.
вот как поход за граблями.
1) не нормализованы данные
2) в том числе не нормализован вектор времени как написал 3qu точка предсказния это должна быть на графике нулевая точка.
чтобы убрать эффекты памяти паразитические.

там все видео состоит из сознательно допущенных ошибок.
профессионально.
с пониманием почему это ошибка.
не случайно.
avatar
Антон Б, В видео все это убрано за ненадобностью. Но! На самом деле нормализация данных никак не повлияет на результат. Попробуйте сами и вы в этом убедитесь.
Можете взять код и добавить нормализацию, поменять как вам угодно, проблема как была так и останется.
avatar
CloseToAlgoTrading,
если бы нормализация была не нужна то этого этапа не было бы.
а этап есть.
и во всех конкурсах во всех работах этот этап есть.
потому что без него получается объективно и доказуемо хуже.

проблема как получить денег из знаний конечно останется )

но это не повод специально! в видео наступать на все грабли.
по очереди.
avatar
Антон Б, ах… пусть будет так как вы считаете.
avatar
CloseToAlgoTrading, 
1) это эксперимент
2) как в эксперименте все должно быть формально
3) в том числе метод применения сетей

если вы намешиваете все в кучу и у вас результаты получаются никакие то это не эксперимент.
а какая-то фигня.

я вам на это указываю.

нейросети это не магия.

у них есть методика ( в т.ч. нормализация).
граница применимости ( тоже завязана на анализ входящих данных — и тоже нормализация ).
методы верификации результата.
(и тут тоже важна нормализация)


так что если нормализация просто пропущена то это сознательно сделано чтобы запутать новичков.
и показать что из нейросетей ничего не получится.

avatar
Антон Б, не дурите мне голову. Посмотрите на график синуса, вспомните зачем и когда мы делаем нормализацию. Потом возьмите код, переделайте как хотите, посмотрите результат.
avatar
CloseToAlgoTrading, там же просто синус зачем такие сложности )))

но там не синус. а предположение что на отрезке синус
avatar
CloseToAlgoTrading, предсказание возможно в пределах работы одного объема или одной группы участников типа в уникальные периоды времени.Весь график состоит из кусочков синусов разных периодов.Просто каждому среднему объему соотв-т свой период или частота перемен (свечной анализ).Сначала изучи сам волновой анализ, а потом обучай других.Прог дающих прогноз по волнам много, но и они дают сотни вар-в с разной вероятностью.Подсказка во фракталах типа Вильямса из 5-9-13-17 и тд  свечей .Объем \ время = обратная переменная.
avatar
CloseToAlgoTrading, всё это, как и сам пост — не повод категорично утверждать, что ЛЮБЫЕ
нейронные сети не способны предсказывать рыночную цену

Категоричность суждений — признак недалекости вообще и в данном случае в частности. Если б всё было НАСТОЛЬКО плохо, вы не писали бы этот пост.

Лучше бы объяснили почему у кого-то, кто делает до 80% рыночного оборота, сети (и др. алго) всё-таки зарабатывают.
avatar
VladMih, :) а я и не утверждаю, что с помощью сетей нельзя заработать, я лишь указываю, на некоторые из несовершенства. 
Просто, эта проблема известна с самого начала изучения сетей, но сейчас как то про нее мало вспоминают. Посмотрите кагл, там 90% участников подбирает гиперпараметры и надеются на то, что а вдруг выстрелит. :) 

В современном мире, категоричность утверждений необходима, это как вброс известной субстанции на вентилятор :)
avatar
CloseToAlgoTrading, 
объясняете какую-то херь — перечитайте название поста.

Вашу позицию понял, от ваших субстанций ставлю защиту.
avatar
CloseToAlgoTrading, вышенаписанное очень странно !

дерьмо на входе — дерьмо на выходе
avatar
всё же одна синосоида хорошо аппроксимируется линейным рекуррентным соотношением вида x[n]=a1*x[n-1]+a2*x[n-2]+a3*x[n-3]+...
Для нейросети подобрать коэффициенты a1, a2, a3 всё же нетрудная задача.

avatar
Sergey Pavlov, можно попробовать с y = x^2, получим туже проблему на самом деле.
avatar
CloseToAlgoTrading, и любой полином также аппроксимируется такой же линейной зависимостью. Это обязано работать на модельных примерах при помощи нейросетей.
avatar
Sergey Pavlov, обязано работать… а есть работающий пример, где сеть будет выдавать такую же ошибку как внутри тренировачного диапазона, так и вне? 
avatar
CloseToAlgoTrading, рабочие примеры искать лень. Если в общем виде, то есть много доказательств обобщенных аппроксимационных теорем, в которых показывается про то, что перцептронами можно приблизить любую сложную функцию как линейную комбинацию гармоник, экспонент, полиномов. Разумеется, сетка это всё восстановит. Разумеется, она где-то сломается, но не так сразу развалится. Конкретно по аппроксимации синусоиды можно почитать гусеницу (SSA). Если перцептрону подать на вход предыдущие значения синусоиды, а на выходе одно следующее, то она восстановится почти идеально. Где-то далеко она разойдется в бесконечности, конечно, но это не будет так как у вас на картинке.
avatar
Sergey Pavlov, Понятно, что сеть подберет параметры и восстановит функцию, проблема возникает в том, что она разойдется и начнет разваливатся, как вы пишите, при новых данных. На картинке сеть учится по х предсказывать y, это экстремальный случай. 
В видео есть другой пример, по последовательности точек, и в зависимости от входных данных, мы получаем либо идеально восстановленную функцию, либо смещенную или же совсем корявую… вроде такой, что обведена квадратом.


avatar
Может быть, потому, что в псевдослучайной последовательности следующее число совершенно никак не зависит от предыдущего?
avatar
ch5oh, не без этого конечно 
avatar
Но ведь научить торговать прибыльно нейросеть на таком графике будет не сложно. Тогда за что боремся? Нет ли тут подмены смыслов? Может быть для прибыльной торговли и не нужно такое предсказание как тут подано?
avatar
ivanovr, Такое предсказание, как тут подано, наглядно показывает проблему, с которой собственно говоря я столкнулся. Если мы можем гарантировать, что ошибка, на новых данных вне тренировочного диапазона, будет оставаться в некотором доверительном интервале, то мы сможем доверять сети. Иначе получаем, то что придется доучивать/переучивать сеть… Это так сказать информация к размышлению.
avatar
Ошибка в точном предсказании синуса на период и больше вперёд? Эта задача не имеет отношения к торговым алгоритмам.
Хотя уверен, что и то что получилось, это просто результат не правильного использования сети.
avatar
Автор полный профан в работе с сетями и данными

Вот натренировал сеть, отлично учиться всего на 30 точках обучения
prnt.sc/10ro2nd
avatar

теги блога CloseToAlgoTrading

....все тэги



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