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

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

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


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


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

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

1

Сабж, собственно...

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

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

публиковаться буду по мере возможности...

0

2

Ждем, затаив дыхание... :)

0

3

А уж как я жду ;) гы-гы... результатов. Ведь эксперимент уже идет, собственно!

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

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

Для начала, - см. иллюстрацию ...
Что мы тут видим?

* Голубая (большая, полупрозрачная) стрелка указывает тренд (нисходящий).
* Вертикальные прямоугольники разбивают (совершенно условно) этот тренд на две фазы.
* Красные тонкие линии - это скользящие средние (выбранные произвольно: это - всего лишь иллюстрация) с разными периодами усреднение (от 30 и далее, с шагом 30).
* Ну, желтый - график у нас.

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

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

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

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

0

4

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

Ну, короче. Для начала - опишу, что было задумано. ...

0

5

Да насчёт индикаторов я несколько погорячился (что довольно для меня свойственно :)). Уже потом даже я подумал, что несколько перегнул. Действительно многие индикаторы сильно коррелируют с ценой, но не все, естественно. Насколько я уразумею, чем больше период СС, тем меньше она коррелирует (ну это грубо сказано). Т.е. СС с маленьким периодом практически совпадают с ценовым графиком и соответственно сильно коррелируют. А у СС с достаточно большим периодом такой корреляции уже может и не быть.
Это даже не столько я подумал, сколько Ежов и Шумский меня натолкнули (на будущее, если что будем ссылаться ЕиШ). Пересматривал эту книжку и там была идея, что следует учитывать и далёкие значения ряда (что имеет место в классическом ТА), там для этого предлагался вейвлет-анализ. Я подумал, что индикаторы, и в частности, СС можно рассматривать в этом ключе, т.е. если они не коррелированны с ценой, то они могут нести полезную информацию, напр., косвенно фиксирующую предыдущие паттерны динамики ВР.

А box-counting: прогу нарыл или сам написал алгоритм?
Ждем продолжения. Я тут тоже кое-какие фишки пробую. Скоро наверно будет отчёт об этом.

0

6

Уж поскольку, начинают обычно с начала, и я с начала же и начну.

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

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

А ведь и действительно: очень часто видно, что даже когда тренд в одну сторону в самом разгаре, внутри него бывают ТАКИИЕЕ свечи в обратную сторону, что подумаешь: "Не начало ли это противоположного тренда??".

Но рынок - он всегда прав, а мы не об этом сейчас.

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

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

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

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

Для этого надо оценивать степени корреляции. И чем они меньше - тем хуже сеть будет предсказывать!

=====================================================================================================

Теперь - вкратце (т.к. эксперимент не удался) - описание. Строго говоря, было поставлено несколько однотипных экспериментов.

Основой данных (во всех случаях) были часовые бары GBPUSD (OHLC) за период с начала 2001 года (примерно 34 тыс). На основе этих данных в Экселе рассчитывались скользящие средние с разными периодами... (обчно, по числам Фибоначчи: 2, 3, 5, 8, 13, 21 (дальше редко шел)). Иногда я рассчитывал сначала типичную цену (Typical = (High + Low + Close) / 3), потом от нее брал скользящее среднее, а уж потом - от этого скользящего - все остальное (т.е., сглаживал поток, как мог: извращался по-всякому).

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

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

Хм, да, ну, и вот еще что, конечно, для подачи на входы, я готовил не сами значения всего того, что я перечислил, а приращения (с плюсом или с минусом).

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

Ну, скажем, я сортирую данные по признаку среднего приращения скользящей средней с периодом 8 за последние 6 часов. У меня получается, что есть участки, например, где таковое равно нулю (скользящая средняя не растет - не падает): выходит, флэт на рынке галимый. И до максимума. Ну, и я разбивал все множество на части. И отдельно учил одну нейросеть, например, прогнозировать во время флэта, другую - во время слабого тренда, третью - во время умеренного тренда, четвертую - во время сильного тренда и т.д....

Еще я иногда добавлял индикатор эффективности рынка (т.н. Effectivity Ratio - за точность написания не ручаюсь: с английским у меня туго, но это - Коэффициент Эффективности в переводе).

ER рассчитывается как отношение общего приращения цены за n периодов (по модулю) к сумме всех приращений цены в кажом из баров взятого периода (по модулю, опять же). "Физический смысл" этого индикатора таков: что если, к примеру, цена за 10 часов сдвинулась на 100 пунктов и каждый час она сдвигалась на 10 пунктов (значение индикатора при этом должно быть равно 1: ER = 100 / (10+10+10+10+10+10+10+10+10+10) = 1), то это - эффективный рынок (целенаправленно двигался в одном направлении). Ну, а если же рынок за 10 часов сдвинулся на 10 пунктов... а за первый час он сходил на 50 вверх, за второй - на 50 вниз, и т.д., - то это - низкоэффективный рынок (значение ER будет близко к нулю).

Чаще всего, я не старался апроксимировать сам по себе этот ER, но использовал его в качестве критерия для сортировки данных: типа, если рынок эффективный - это одно, если нет - это совсем другое.

Ну, а теперь - итоги моих опытов (в общем виде).

Хочу сказать, что я не вдавался в подробности, что там делает этот boxcounting... но результаты этого анализа часто оказывались неудовлетворительными. В некоторых случаях я несмотря на это учил сеть (и получал такие же неудовлетоврительные итоги). В некоторых - вообще отказывался от обучения НС.

Итак: итоги (выводы).

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

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

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

Это - итог.

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

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

2) движение скользящей средней в следующий период времени мало зависит от движения этой же скользящей средней 5, 7, 10 периодов назад. Результаты анализа boxcouning прямо показывают неэффективность формирования "скользящего окна" с глубиной погружения более 4. На диаграмме это выглядит так, что "важность" (я пока что ее так назову) данных падает по геометрической прогрессии, по мере отдаления от текущего момента в глубь истории.

Т.е. самое последнее движение цены имеет для прогноза наибольшую важность, предпоследнее - тоже важно, но меньше. Движение 3 периода назад - значительно менее важно, а движение 4 и более периодов назад - вообще практически не важно для прогнозирования будущего движения.

Следовательно, можно сделать вывод, что зависимость следующего хода от хода, сделанного n периодов назад падает, видимо, квадратнопропорционально n. А ведь мне казалось, что такого явления наблюдаться не должно... Мне вообще казалось, что чем глубже "погрузиться" в исторю - тем точнее будет прогноз.

Это - итоги.

А вот мои выводы: прогнозирование отдельновзятой скользящей средней, конечно же, вполне вероятно при помощи НС. Нейросети куда проще апроксимировать сглаженный временной ряд, нежели "сырой".  Однако, прогнозирование это больше похоже на дорисовывание очередного данного приблизительно в том же направлении, что и последнее движение. И в этой связи весьма сомнительной представляется возможность предсказывания смены тренда, например.

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

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

Проще говоря: если ты даже имеешь на 100% точный прогноз следующего приращения скользящей средней с периодом 21, то это ровным счетом (ну, для строгости, скажу, что "ровного счета" тут нет, но у этой цифири столько много нулей после запятой перед значащими цифрами, что можно считать, что это - полный ноль) ни на йоту не повышает точность прогноза следующего приращения цены.

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

Поэкпериментировать тут хотелось бы вот в каком направлении: допустим, входные дынне - это три скользящих средних с периодами 20, 25 и 30. Мы предсказали движение скользящей средней с периодом 30 с достаточно высокой точностью, - переходим к предсказыванию (уже на основе этих данных) "меньшей" скользяшки... ну, и т.д. Потом - 15, 20, 25... потом - 10, 15, 20... ну, и т.д. ... что из этого получится - еще не знаю: не пробовал. Но собираюсь попробовать.

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

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

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

Общие итоги: задачу нужно ставить более тонко. Решение "в лоб" здесь невозможно.

0

7

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

0

8

что-то никак не могу разобраться: куда девается кртинка постоянно... но обещаю разобраться!

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

0

9

в разделе "Полезные ссылки" я добавил ссылку на сайт, где можно скачать Excel Neural Package (где есть boxcounting)

0

10

что высокая степень корреляции - это плохо

Это плохо, если между входами. Но не смертельно, в конце концов можно их ортогонализовать. Просто это говорит, что входы "измеряют" примерно оджно и тоже. Высокая корреляция между входами и выходом - архихорошо!

я не вдавался в подробности, что там делает этот boxcounting

BC измеряет "корреляцию" (вернее ее обобщенный на нелинейный случай аналог, т.е. общую информационную прогностическую ценность) между входами и выходом. Предполагается, что используются различные наборы входов и из них отбирается наиболее BC-коррелированный с выходом. Но поскольку прога халявная ХЗ - чё он там на самом деле делает. Да и к платным признаться доверия большого нет. Фирмы софтовые тоже разные бывают. Прогу скачиваю - надо посмотреть что там за чудо...

Информацию всю пока ещё не переварил - много ты выдал, однако  :)

0

11

Что то этот НейроЭкзель у меня не работает. Делаю всё по инструкции а он экзель подвешивает и никаких тебе бокскаунтингов. Попробую ещё на работе - может ему винда моя дом. не нравится...

0

12

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

А читать всю эту лабуду можно подиагонали. Я тут, можно сказать, пока что в темноте блуждаю... что-то получается, что-то нет. Когда (и если) что-то путное будет получаться, - ты узнаешь первым :)))

0

13

Я тут, можно сказать, пока что в темноте блуждаю...

Не, кстати оч. интересно. Мы мыслим как бы с разных концов - ты больше как практик, потихоньку осваивающий теорию, а я наоборот, как теоретик, приобщающийся к практике. Так что это взаимодополняет друг друга. Сама идея разбить ВР по рыночным режимам оч. интересна, мне бы такое не скоро в голову пришло. Весь вопрос тут, как выделять эти режимы. Над этим стоит подумать.

0

14

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

Так вот: я беру и сортирую данные по какому-бы то ни было столбцу. Например, по столбцу, где у меня среднее приращение какой-то из скользящих средних за z периодов. И тогда становится весьма очевидно, что из моих 33000 примеров есть около 1000 примеров, где скользяшка эта вообще не двигалась (приращение - 0). Далее, есть еще одна тысяча примеров, где скользяшка двигалась на 1 пункт... потом - тысяча, где на 2... ну, и т.д.

0


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