НейроГалактика

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » НейроГалактика » Для начинающих » Эксперимент 2 по прогнозированию временного ряда: скользящие средние


Эксперимент 2 по прогнозированию временного ряда: скользящие средние

Сообщений 1 страница 20 из 34

1

Приходит как-то раз поручик Ржевский к своему командиру и говорит: "Вы знаете, сейчас ведь на дворе зима, очень холодно! Легко простудиться можно... Ну, вот, жена моя и простудилась, а лекарства сейчас, знаете, какие дорогие?... Моей зарплаты не всегда хватает. Не могли бы Вы, Ваша Светлость, одолжить мне несколько рублей до получки на лекарства жене?". На что командир ему и отвечает: "Проучик, поцелуйте меня в шею!". Поручик недоумевает: "???". А командир говорит: "Ну, Вы же тоже издалека начали!" :)

То не сказка еще, то - призказка. Сказка - впереди!

Поскольку решить вопрос о прогнозировании временного ряда не удалось наскоком, начнем подбираться к решению издалека. Хочу начать с прогнозирования самого простого: сглаженного временного ряда. Или, проще говоря - с прогнозирования поведения отдельно взятой скользящей средней (или в паре-тройке с другими скользящими средними с сопоставимыми периодами усреднения).

Перед тем, как экспериментировать, - снова порассуждаем....

Ну, во-первых, как ни крути, а скользящие средние у нас отражают тренд. Являясь, по сути, простейшим цифровым фильтром (отфильтровываются высокочастотные колебания, но "проходят" низкочастотные), скольящая средняя (СС или МА, - по "ихнему". Здесь и далее по тексту, если будет в скобках указываться значение, то это - период усреднения: наприме, МА(3) - скользящая средняя с периодом 3) хорошо указывает общее направление тенденции и ее (тенденции) "динамичность": бывают быстрые и медленные тренды.

При чем, есть даже такое мнение, что за все эти десятки (а если начинать отсчет еще от японцев, придумавших "свечной анализ", то сотни, получается) лет, что существует технический анализ, пока что еще не придумано ничего более простого и точного, чем СС.

В то же время, конечно, нельзя не отметить недостатков СС, а именно - запаздывания сигнала. Второй недостаток - это масса ложных сигналов во время флэта (когда тренд горизонтальный, а рынок идет "вправо"). Запаздывает СС в силу своей же собственной природы: на половину периода усреднения. Т.е., можно сказать, что СС с бОльшим периодом усреднения, конечно, в общем случае, дает более надежный сигнал, но гораздо поже, чем хотелось бы.

Классический ТА (теханализ) борется с этим явлением, например, таким образом, что период усреднения СС динамически изменяется: для этого, в частности (как один из многих вариантов), используется ЕR - коэффициент эффективности рынка (его краткое описание - в ветке "Эксперимент 1"), и построенная на его основе AMA - адаптивная скользящая средняя.

Как она работает? В те периоды, когда ны рынке - флэт, т.е., нет направленного вверх или вниз движения, период усреднения СС резко возрастает: она становится гораздо менее чувствительна к незначительным колебаниям рынка. Но, как только рынок становится эффективным, период усреднения падает и АМА гибко реагирует даже на небольшие движения.

(Более подробное описание АМА и ER - на сайте Константина Копыркина (см. Яндекс), а, собственно, индикатор АМА, написанный под МТ можно скачать на сайте Метаквотов. Я скажу лишь еще только то, что в АМА используется не простая скользящая средняя, а экспоненциальная).

Я же пред(по)лагаю побороться с запаздыванием путем предсказания будущего поведения ее (этой самой СС). Ибо, даже АМА не лишена некоторого запаздывания, обусловленного, в частности, тем, что для вычисления ER также требуется определенный период.

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

Итак, надо определить некоторый круг параметров, присущих СС в каждый данный момент. И уже от этих параметров как-то пытаться прогнозировать. Возможно, при наличии нескольких параметров, и углубления скользящего окна более, чем на 4-5 периодов назад окажется не лишним, а ведь, в противном случае (см. ветку "Эксперимент 1") - нейросети совершенно не важно для прогнозирования следующего шага, как СС вела себя 125 лет тому назад ;) гы-гы!

К делу!

Во-вервых, у любого тренда есть направление: предполагается в одельный параметр вынести направление СС:

-1 = снижение; 0 = горизонтальное движение; 1 - рост.

Тогда и приращения можно будет брать по модулю, а, следовательно, количество примеров как бы возрастет (??).

Во-вторых, у любого тренда есть скорость: предполагается добавить в качестве отдельного параметра некоторую среднююю скорость приращения СС в данный момент времени (за n периодов), ибо, как стало понятно, если НС видит, что последнее приращение составило, например, 10 пунктов, а предпоследнее - 8 пунктов, а еще до того - 5 пунктов, то для нейросети вовсе не очевидно, что скорость роста скользящей средней от раза к разу увеличивается!

В третьих, у любого тренда есть длительность: предполагается ввести для каждого тренда (вплоть до смены его на противоположный) - нумерацию значений. Таким образом, будет видно, что данное значение, подаваемое на входы НС в очередной раз уже 125-е по счету (к примеру), - и отсюда нейросеть узнает, что бывают длительные тренды, у которых на 125-м значении все только начинается, а бывают - короткие, у которых 125 - это "потолок" - последнее значение перед сменой тренда.

Ну, если изголяться дальше, то можно ввести еще, например, угол касательной СС в данной точке по отношению к оси абсцисс. Правда, я не уверен, что это необходимо, но поэкспериментировать можно ;) фик его знает, на какие глубокие размышления о смысле бытия это натолкнет мои электронных мозги.

Ах, да! и вот еще что! Когда я производил эксперименты в первой серии я еще задумывался: нет ли смысла подавать на входы НС не только приращения каждой из СС в отдельности (если речь идет о паре или тройке СС, рассматриваемых вместе), но и еще и расстояние между ними! Так вот, думаю, что есть... опять же - буду экспериментировать.

Ну, и если речь пошла уже о сочетаниях СС, то, видимо, еще есть смысл отдельно подавать на входы НС, находится ли "быстрая" СС выше или ниже "медленной". Хотя, казалось бы, это - и так очевидно из знака расстояния от одной из СС до другой.... впрочем, это - очевидно для человека... но фик его знает ;) очевидно ли это для инскусственного интеллекта???

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

0

2

В третьих, у любого тренда есть длительность: предполагается ввести для каждого тренда (вплоть до смены его на противоположный) - нумерацию значений. Таким образом, будет видно, что данное значение, подаваемое на входы НС в очередной раз уже 125-е по счету (к примеру), - и отсюда нейросеть узнает, что бывают длительные тренды, у которых на 125-м значении все только начинается, а бывают - короткие, у которых 125 - это "потолок" - последнее значение перед сменой тренда.

Вот это, мне кажется, весьма интересная идея. Но как истинный марксист-ленинист полагаю критерием истины практику - т.е. посмотрим...

Насчёт угла, кстати, не так уж и невероятно...

0

3

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

Ну, в общем, я пока что решил без фанатизма к этому относиться, потому что, блин, у меня и так уже бук думает над каждой "эпохой" (обучения НС) именно ЭПОХУ целую (по полчаса, в частности)...

Значит, пока что, что я хочу:

исходные данные:
блок 1: скользящая средняя "быстрая"... ее приращения (со знаком) на каждом шаге, ... среднее приращение за х шагов, скорость изменения этого приращения (т.е, получается, по физическому смыслу (скорость изменения скорости - ускорение)), среднее ускорение и изменения ускорений на каждом шаге...
блок 2: скользящая средняя "медленная" ... - и все то же самое к ней
блок 3: разница между этими двумя скользящими средними ... - и все то же самое к ней....

что получится - пока что не знаю.... Я всерьез задумался над тем, что надо мне компик помощнее. И еще одна беда: ПО... что посоветуешь? У меня ведь большие объемы: мне надо, чтобы с памятью работало постранично...

щас вот, пробую Neuro Office разбирать... (ну, дома - пока что буду работать с нейропакетом для экселя... что ж поделать).

0

4

чтобы с памятью работало постранично...

Не очень понял, что имеется ввиду...

0

5

ну, многие программы, не рассчитанные на большие объемы данных работают с памятью "напрямик". Т.е., например, есть у тебя 100 бегабайт свободной памяти, - вот и весь твой резерв. Массив данных, превышающий по размеру 100 бегабайт такая прога уже не обработает физически.

а есть проги, которые выполняют динамическую подгрузку данных в память по мере необходимости, использую в качестве хранилища жесткий диск. Так, например, работает Эксель, и вот этот нейропакет для него - тоже так работает. У меня на буке памяти - ВСЕГО 100 мегабайт... А массивы данных, которые я использую в экселевских файлах занимают 50-60 мегабайт. Конечно, она не может загрузить такое в то малое, что остается после того, как запущена винда, запущен эксель сам.... Вот она и подгружает данные постепенно, и тогда получается, что ее возможности уже ограничены не размерами свободной оперативной памяти, а размерами свободного дискового пространства.

0

6

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

Теперь понял. Надо подумать. Посмотреть документацию.

0

7

Neuro Office - тема крутая довольно-таки... но уж очень сложная: надо чуть ли не руками каждый синапсик строить... а ну, как если их 5000 ???

Более подробно потом расскажу...

0

8

Вообще, я все больше склоняюсь к тому, чтобы не аналоговые сигналы подавать на входы нейросети, а дискретные. Ведь, по всему выходит, что ошибка в этом случае (для "общего случая") будет меньше.... ну, т.е, например, если ты должен получать на выходе 0 или 1 то ты будешь знать, что все, что выше 0.5 - это 1... а все, что ниже - 0.

Кстати, если позволено будет небольшое лирическое отступление: предпринимались ведь попытки строить компьютеры не на бинарном (0..1), а на тринарном (0, 0.5, 1) и "более-нарном" принципах, но, пока что они либо свернуты (исследования дальше не ведутся), либо используются в очень узких сферах: ошибка, понимаете ли велика ;) гы-гы.

Там, где 0..1 - все предельно ясно. Это - максимальная дифференциация (здесь - не в математическом смысле это слово употребляю). А когда у нас есть 0, 0.1, 0.2, 0.3, 0.4... и т.д. - то трудно не ошибиться и не перескочить с 0.356 на 0.4 (например)...

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

0

9

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

0

10

Давай-давай! Тока перепроверь всё как следует. Я тут недавно напрогнозировал,блин, получил чуть ли не 100% правильность. Сначала офигевал, а потом оказывается у меня первый вход был копией выхода - напутал я при обработке данных  :)

0

11

:lol:  :cool:

да, у меня такое тоже бывало ;) я еще в Дедукторе (как ты помнишь - это "моя первая прога", связанная с НС)... даже из вон тех вот 150-ти строк, которые позволено анализировать в демо-версии, подавая просто галимые котировки (дневные бары) получил 100%-е (абсолютное) совпадение... и чуть было, в обморок не свалился ;)

Уже хотел орать: "Найдена Чаша Святого ГРААЛЯ!!!"...

А дело было всего лишь в том, что я за прогноз НС принимал фактические значения на новом шаге ;)  ^_^

-------------------------------------------------------------------------------------------------------------------------------------------

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

Впрочем, как я уже говорил: радоваццо пока что еще нечему!

Поему? - Да по одной простой причине: то, что сейчас делает моя нейросеть я могу делать и без нее... Предсказать следующее значение скользящей средней с достаточно большим периодом - дело не хитрое.

Мало того... - стоит серьезный вопрос в том: нужны ли кому-то эти данные. Поясню...

1) Практически никакой корреляции с текущей ценой (чем больше период усреднения - тем меньше корреляция)

2) Запаздывание сигнала не полпериода усреднения (в силу природы СС) - т.е., скажем так: для того, чтобы можно было считать, что нейросеть дает значимую с точки зрения практической торговли информацию, хотелось бы получать более или менее точные прогнозы хотя бы на четверть периода усреднения вперед... (тогда мы получим некоторый реальный выигрыш: мы будем знать, общее направление динамики не с запаздыванием в полпериода усреднения, а всего лишь с запаздыванием в четверть периода, что весомо!)

А так, в целом, - она очень точно указывает будущее приращение... но об этом - и уже в цифрах - чуть позже....

0

12

Ну, итак!

О П И С А Н И Е  Э К С П Е Р И М Е Н Т А - 2
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Нейронную сеть, которая у меня должна, по идее, предсказывать скользящую среднюю я назвал Clairvoyant ... (типа "провидец", "ясновидящий"). Вот, такой вот я любитель романтики ;) гы-гы.

В Х О Д Н Ы Е  Д А Н Н Ы Е
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Итак, дабы не загружать нейронные мозги всевозможной высокохаотичной фигней, как то цены закрытия (или их приращения), я решил попробовать зайти издалека. И вот, для обучения, я решил подавать на входы НС дважды... (впрочем, в какой-то степени, даже трижды) сглаженные данные.

Итак, изначально я имел ряд часовых баров (около 33,5 тыс.) по валютной паре GBPUSD. Путем несложных манипуляций с Экселем, я пополнил его еще и рядом Типичных цен (H+L+C)/3. Далее, от типичной цены была взята скользящая средняя (простая) с периодом 3. И, далее, от этой уже скользяшки была взята скользящая средняя с периодом 21 (также, простая). Ну, а уже потом я начал вычислять дельты (приращения) и некоторые сопутствующие данные, которые, в общем-то и явились исходным обучающим множеством.

DA21AT-1 (дельта скользящей средней с периодом 21, примененной к скользящей средней с периодом 3 от типичной цены ((H+L+C)/3) за предыдущий час.
DA21AT-2 (дельта скользящей средней с периодом 21, примененной к скользящей средней с периодом 3 от типичной цены ((H+L+C)/3) за предпредыдущий час.
DA21AT-3 (дельта скользящей средней с периодом 21, примененной к скользящей средней с периодом 3 от типичной цены ((H+L+C)/3) за предпредпредыдущий час.

SDAAT (скорость изменения этой самой дельты (средняя) за последние три часа: (DA21AT-1 + DA21AT-2 + DA21AT-3)/3.

DSDAAT-1 (изменение этой скорость за предыдущий час).
DSDAAT-2 (изменение этой скорость за предпредыдущий час).
DSDAAT-3 (изменение этой скорость за предпредпредыдущий час).

SUPDS (скорость (средняя) изменения скорости изменения дельты скользящей средней: (DSDAAT-1 + DSDAAT-2 + DSDAAT-3)/3).

Ну, короче, проще говоря, имелось ввиду вообще-то само приращение (DA21AT), скорость этого приращения за последние 3 периода (SDAAT), изменение этой скорости (DSDAAT-1), ну, и ускорение (SUPDS).

В Ы Х О Д Н Ы Е  Д А Н Н Ы Е
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Приращение скользящей средней с периодом 21, взятой от скользящей средней с преиодом 3 от типичной цены на следующем часе.

Д О П О Л Н И Т Е Л Ь Н Ы Е  З А М Е Ч А Н И Я
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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

О П И С А Н И Е  Т О П О Л О Г И И  Н Е Й Р О С Е Т И
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Степени нелинейности нейронов (во всех слоях) - 1.
Функция активации (во всех слоях) - Тенгенциальный гиперболоид (если я правильно выразился... может, надо было: Гиперболический тангенс сказать??).

Количества...
входны данных - 8
первый слой - 32
второй слой - 7
третий слой - 5
четвертый слой - 1
выходных данных - 1

Ну, на сколько я понял, это принято обозначать так: 8(i) х 32(tanh) x 7(tanh) х 5(tanh) х 1(tanh) х 1(o).

О Б У Ч Е Н И Е  Н Е Й Р О С Е Т И
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Для обучения НС был выбран алгоритм Adaptive backpropagation со следующими параметрами:

Alpha = 0.0001;
Beta = 0.0001;
Min. Alpha = 0.0001;
Min. Beta = 0.0001;
Max. Alpha = 1;
Max. Beta = 1;

Regime = Online.

Сколько "мы" учились - точно не помню, но приблизительно, около 200-300 эпох. (аль до 600 дошли... фиг его уже помнит)...

Р Е З У Л Ь Т А Т Ы  О Б У Ч Е Н И Я
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

В итоге мы получили:

ошибка на обучающем множестве: 0.017737 (33000 примеров)
ошибка на тестовом множестве: 0.017753 (935 примеров)

(тут, позволю себе сделать замечание небольшое... даже два:
1) в нейросолюшне есть несколько "видов" ошибок... какой тут - фик его знает... наверное, какая-то "средняя" ошибки
2) тестовое множество выбрано случайным образом (не подряд). Отмечу, что изменив расположение тестового множества (т.е., просто, заново установив новое случайное тестовое множество, можно добиться и того, чтобы ошибка на тестовом множестве была меньше, чем на обучающем.)...

Добавить еще можно вот что: после того, как я округлил реальные и предсказанные сетью данные до целых (т.е., - до пунктов (а точнее нам и не надо! ;)), то получилось, что из 33935 вариантов, в 25533 случаях ответ был получен ТОЧНЫЙ. На мой взгляд,  - это не плохой результат ;) гы-гы!

Ну, правда, опять же, радоваться тут, пока что еще не чему... Посмотрим, как поведет себя сеть, предсказывая на основании уже предсказанных данных, - т.е., - предсказывая на несколько шагов вперед! Вот, что для нас является на самом деле АРХИВАЖНЫМ ;) !

И Л Л Ю С Т Р А Ц И И (см. последующие посты)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1. ТОПОЛОГИЯ НЕЙРОСЕТИ (в программе "Neural Package for MS-Excel").

2. Диаграмма РАСПРЕДЕЛЕНИЯ ответов нейросети (без тестового множества)

3. Диаграмма РАСПРЕДЕЛЕНИЯ ответов нейросети (вместе с тестовым множеством: 935 тестовых примеров из 33935)

* тестовые примеры выделены красным

4. Ответы нейросети по сравнению с реальными данными в реальном (не-нормализованном) масштабе

* приведены отдельные (случайным образом выбранные: не выбирались лишь "хорошие") фрагменты.

И Т О Г И
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

На мой взгляд, вполне удовлетворительные данные... А вот что нам это даст... - это уже отдельная тема.

0

13

Топология

0

14

Диаграмма РАСПРЕДЕЛЕНИЯ ответов нейросети (без тестового множества)

0

15

Диаграмма РАСПРЕДЕЛЕНИЯ ответов нейросети (вместе с тестовым множеством: 935 тестовых примеров из 33935)

0

16

Ответы нейросети по сравнению с реальными данными в реальном (не-нормализованном) масштабе

0

17

Ответы нейросети по сравнению с реальными данными в реальном (не-нормализованном) масштабе

0

18

Ответы нейросети по сравнению с реальными данными в реальном (не-нормализованном) масштабе

0

19

Ответы нейросети по сравнению с реальными данными в реальном (не-нормализованном) масштабе

0

20

Ответы нейросети по сравнению с реальными данными в реальном (не-нормализованном) масштабе

0


Вы здесь » НейроГалактика » Для начинающих » Эксперимент 2 по прогнозированию временного ряда: скользящие средние