Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 361

 
СанСаныч Фоменко:

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

Все эти обучения на каждом новом баре - жевано и пережевано на этом форуме и вообще в рамках ТА.

В борьбе с переобучение (сверх подгонкой) мне известно два приема.

1. Очистка набора предикторов от предикторов не имеющих отношения к целевой переменной - очистка от шума входного набора предикторов. На первых 100 илстах этой ветки очень подробрно рассматривался этот вопрос

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

3. Затем берем файл, который находится отдельно предыдущего и на нем прогоняем модель. Ошибка опять же должна быть примерно одинакова с предыдущими.

4. Если эти проверки делать регулярно, то ваш вопрос: "просадка 20% - это сигнал для переобучения" вообще не стоит так как в результате первых трех шагов получена просадка как параметр модели и выход за ее пределы говорит, что модель не работоспособна и все надо начинать сначала.


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

Также фактор сезонности, фактор кризиса и прочие прочие многие разные закономерности, которые нужно учесть

 
СанСаныч Фоменко:

1. Очистка набора предикторов от предикторов не имеющих отношения к целевой переменной - очистка от шума входного набора предикторов. На первых 100 илстах этой ветки очень подробрно рассматривался этот вопрос

Какое в итоге появилось решение- как определять предикторы не имеющие отношения к выходным командам?
 
elibrarius:
Какое в итоге появилось решение- как определять предикторы не имеющие отношения к выходным командам?
Как? - Все от конкретики зависит. Мне для решения простой задачи потребовалось 2 дня. Теперь решение кажется очевидным.))
 
Yuriy Asaulenko:
Как? - Все от конкретики зависит. Мне для решения простой задачи потребовалось 2 дня. Теперь решение кажется очевидным.))
Полагаю, что есть и общие, универсальные принципы? Ну и про ваш конкретный пример тоже интересно узнать.
 
elibrarius:
Полагаю, что есть и общие, универсальные принципы? Ну и про ваш конкретный пример тоже интересно узнать.

В моем блоге посмотрите.

Принципы, да, универсальны. Но общих решений нет. Разве для каких-то классов задач.

 

Краткое содержание предыдущих сотни страниц :)

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

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

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

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


СанСаныч Фоменко:

А НС  способны предсказывать не стационарные ряды? Если могут, то какие виды нестационарности?

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

Если и брать нейронку, то давать ей можно только уже каким-то образом обработанные цены (а не чистые ohlc), например индикаторы.

 

Спасибо за краткое содержание, 100 страниц уж очень не хотелось читать...)

Процесс ручного выбора предикторов, например комбинациями по 3 шт. будет проходить очень долго. В МТ5 - 38 стандартных технических индикатора. Комбинаций по 3 - огромное число. К тому же надо еще подбирать к ним периоды, типы цен и др. входные параметры. А если еще добавить интересные нестандартные индикаторы, то кол-во тестов еще увеличится.

Посему, нужно искать автоматизированную оценку индикаторов. Из статей Vladimir Perervenko нашел 2 общих метода:

1) Удаление высококоррелированных переменных - там это делается на R.

2) Выбор наиболее важных переменных - тоже решено на R.

Но я, пока непосредственно на МТ5 пишу, может уже есть готовые решения по этим вопросам? Или метод переноса решений из R в МТ5, хотя бы в упрощенном варианте....?

Корелляцию индикаторов в принципе понятно как искать - просто ищем разницу между каждой парой индикаторов -> суммируем ее для каждого бара -> делим на кол-во баров. (или как то по другому?)

С наиболее важными - не до конца разобрался...

Может еще какие-то методы очистки предикторов есть?

 
elibrarius:

Но я пока непосредственно на МТ5 пишу, может уже есть готовые решения по этим вопросам? Или метод переноса решений из R в МТ5, хотя бы в упрощенном варианте....?

Писать всё сразу на MQL при этом опираясь на R не лучший вариант. Легче разработать стратегию на R, потом с помощью этой библиотеки https://www.mql5.com/ru/code/17468 вызывать R код из советника и потестить его уже в тестере.
Скорее всего в процессе создания и тестирования много будет удаляться и меняться, замены пакетов, моделей, итд, проще всё это менять и тестировать в самом R.

Ну и в конце когда всё нравится и работает - можно попробовать вручную портировать код на mql.
Многие пакеты используемые в R на самом деле написаны в C/C++, тут можно найти исходники для стандартных пакетов https://cran.r-project.org/web/packages/available_packages_by_name.html

 
Dr. Trader:

Краткое содержание предыдущих сотни страниц :)

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

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

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

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


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

Если и брать нейронку, то давать ей можно только уже каким-то образом обработанные цены (а не чистые ohlc), например индикаторы.

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

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

 
Dr. Trader:

Писать всё сразу на MQL при этом опираясь на R не лучший вариант. Легче разработать стратегию на R, потом с помощью этой библиотеки https://www.mql5.com/ru/code/17468 вызывать R код из советника и потестить его уже в тестере.
Скорее всего в процессе создания и тестирования много будет удаляться и меняться, замены пакетов, моделей, итд, проще всё это менять и тестировать в самом R.

Ну и в конце когда всё нравится и работает - можно попробовать вручную портировать код на mql.
Многие пакеты используемые в R на самом деле написаны в C/C++, тут можно найти исходники для стандартных пакетов https://cran.r-project.org/web/packages/available_packages_by_name.html

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

Надеюсь и с др. решениями по отсеву предикторов получится так же просто)

Так есть еще другие решения по поиску ненужных предикторов?

Причина обращения: