Буквально на днях, в комментариях я выразил обеспокойство тем, что если брать ценовой ряд как фичу, то нужно наши входные данные (ценовой ряд) привести к одному виду, а это на мой взгляд довольно сложно. Простой пример это волатильность, если она изменяется, то наша сеть начнет выдавать больше ошибок.
Эти размышления, заставили меня вернуться к основам, и посмотреть сможет ли сеть выучить простейшие математические функции. Конечно, с линейной функцией проблем не возникло, а вот с нелинейными как и ожидалось мы получили массу проблем. Так как сети неплохо работают внутри того диапазона на котором они обучались, и с грохотом проваливаются вне этого диапазона.
Вот простой пример предсказания функции синуса. y = sin(x)
Синим показаны наши истинные значения, оранжевым то, что простейшая модель предсказывает. Красный квадрат отображает диапазон видимый при обучении.
На самом деле, мне кажется это довольно большая проблема в целом.
Сварганил небольшое видео с несколькими различными эксперементами, кому интересно можно посмотреть. Код как обычно на гитхабе, ссылка в описании к видео. *Есть русские субтитры %)
Возвращаясь к подготовке данных, именно из-за таких, казалось бы мелочей, я прихожу к выводу, что подготовке данных и приведению их к одному виду стоит уделить много внимания.
Народ борется с проблемой… но что то пока не получается у них… :)
пока не начинает получатся у всех.
до компютеров обычные средние на дневках давали альфу.
а теперь все кончилось.
нейросети это такие-же средние на дневках.
будут давать пока все не начнут пользоваться.
по этому куча статей что это не работает )
Может ли она предсказывать рыночные ценовые ряды — это другой вопрос.)
«Хотя, грамотно спроектированная сеть сама может построить любой индикатор внутри себя»
Вот это утверждение я слышу от многих, но на практике мы получаем все не так радужно, отсюда и все эти танцы с бубноми.
Мы можем сфотографировать 2 разных дома — небоскреб и избушку, и оба изображения этих домов будут укладываться в наш стандартный кадр. С масштабированием и приведением к диапазону все аналогично. Никакой разницы, даже преобразования те же самые.
Что же касается простого преобразования, но может получится что мы учим сеть на диапазоне 0..1 и взодные данные были от 0..100, вот приходят данные из диапазона 101..120 как мы их будет приводит к 0..1? полчим уже больше 1 после приведения, а это опять же таки вне диапазона обучения, а значит мы не можем быть уверены в результате
Далее, нам не нужна вся история цен, а только на некотором интервале — {C}
Хотим в диапазоне — {0,1}
1. {C1} = {C} — Cmin
2. {C2} = {C1}/C1max
Все у вас в диапазоне {0,1}.
Это как пример, можно и по другому — эт от конкретики зависит.
3Qu, Я вижу в вашем методе проблему того что отношение может изменится. Все это будет работать до тех пор, пока вы будете попадать в ваш диапазон обучения. Т.е. вам придется постоянно переучивать ваш алгоритм подгоняя под текущие данные.
Если посмотрите видео, там последний пример, с синус функцией где обучение проходит на 100 точках (подаем на вход последовательность из 10), а тест тойже функции построенной на 20 и на 400, и мы видим, что сеть уже ошибается.
Я работаю с 15 точками, и преобразование примерно такое, как я нарисовал. Немного по другому, у меня последняя точка всегда =0. Преобразуются только эти конкретны 15 точек. Это работает на любом интервале истории.
вот как поход за граблями.
1) не нормализованы данные
2) в том числе не нормализован вектор времени как написал 3qu точка предсказния это должна быть на графике нулевая точка.
чтобы убрать эффекты памяти паразитические.
там все видео состоит из сознательно допущенных ошибок.
профессионально.
с пониманием почему это ошибка.
не случайно.
Можете взять код и добавить нормализацию, поменять как вам угодно, проблема как была так и останется.
если бы нормализация была не нужна то этого этапа не было бы.
а этап есть.
и во всех конкурсах во всех работах этот этап есть.
потому что без него получается объективно и доказуемо хуже.
проблема как получить денег из знаний конечно останется )
но это не повод специально! в видео наступать на все грабли.
по очереди.
1) это эксперимент
2) как в эксперименте все должно быть формально
3) в том числе метод применения сетей
если вы намешиваете все в кучу и у вас результаты получаются никакие то это не эксперимент.
а какая-то фигня.
я вам на это указываю.
нейросети это не магия.
у них есть методика ( в т.ч. нормализация).
граница применимости ( тоже завязана на анализ входящих данных — и тоже нормализация ).
методы верификации результата.
(и тут тоже важна нормализация)
так что если нормализация просто пропущена то это сознательно сделано чтобы запутать новичков.
и показать что из нейросетей ничего не получится.
но там не синус. а предположение что на отрезке синус
Категоричность суждений — признак недалекости вообще и в данном случае в частности. Если б всё было НАСТОЛЬКО плохо, вы не писали бы этот пост.
Лучше бы объяснили почему у кого-то, кто делает до 80% рыночного оборота, сети (и др. алго) всё-таки зарабатывают.
Просто, эта проблема известна с самого начала изучения сетей, но сейчас как то про нее мало вспоминают. Посмотрите кагл, там 90% участников подбирает гиперпараметры и надеются на то, что а вдруг выстрелит. :)
В современном мире, категоричность утверждений необходима, это как вброс известной субстанции на вентилятор :)
объясняете какую-то херь — перечитайте название поста.
Вашу позицию понял, от ваших субстанций ставлю защиту.
дерьмо на входе — дерьмо на выходе
Для нейросети подобрать коэффициенты a1, a2, a3 всё же нетрудная задача.
В видео есть другой пример, по последовательности точек, и в зависимости от входных данных, мы получаем либо идеально восстановленную функцию, либо смещенную или же совсем корявую… вроде такой, что обведена квадратом.
Хотя уверен, что и то что получилось, это просто результат не правильного использования сети.
Вот натренировал сеть, отлично учиться всего на 30 точках обучения
prnt.sc/10ro2nd