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

 
Vizard_:
Юр, сделай нормальную версию проги(или модернизированную) для людей)))

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

"Date";"V1";"A77";"V23A";"Целевая"
01.01.2000;4.999995E-03;1.499891E-03;-2.000213E-03;-5.000234E-03;1

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

3. Без нормализации!(или отключаемую), так как если данные изначально центрированы относительно 0, после преобразования
х-х.мин/....(или какое там у тебя) - улетают)))

4.Выкини рандомность(или отключаемую), пусть просто делит на две части данные, считает по порядку и выводит % удачных предсказаний для 1 (для 0 не надо)

5.Замутил значимость входов - гуд!

6.Пусть помимо той формулы что выводится, выводится и полная!, то есть сейчас

double x2 = 2.0 * (v5 + 1.0) / 2.0 - 1.0;
   double decision = -0.2632437547312642 -0.2634178652535958 * x2
 + 0.05267978803936412

надо -

Имя целевой = -0.2632437547312642 -0.2634178652535958 * вставить конструкцию х2= (2.0 * (v5 + 1.0) / 2.0 - 1.0)
 + 0.05267978803936412

получится -

Имя целевой = -0.2632437547312642 -0.2634178652535958 * (2.0 * (v5 + 1.0) / 2.0 - 1.0)
 + 0.05267978803936412

То есть получится мало мальски пригодная приблуда для быстрых исследований. Потом еще можешь вставить и пр., простые (не жадные)
алгоритмы, с возможностью выбора... В противном случае приблуда малопригодна. Пока файл отредактируешь, то, се... проще другое заюзать...
А где 7 версия?
Не... мне всё нравится, вполне получилась робастая прога. Так что Юра 100 баллов
 
СанСаныч Фоменко:

Так себе - просто мозгов и времени не хватает.

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

Прям с языка снял. Знамо так. Всю ночь не спал всё думал. Смотрите, мы строим модели на основани предиктов для ИДЕАЛЬНОГО выхода. Получая при этом 50-60% обобщения в редких случаях. Подобрать входы для ИДЕАЛЬНОГО выхода не так топросто, если вообще возможно. Ну а что если ВЫХОД будет НЕИДЕАЛЬНЫМ. Что если допустить в него такие ошибки, которые приведут к 100% обобщению??? Тем самым мы узнаем на что способны входные данные и если этот НЕИДЕАЛЬНЫЙ выход зарабатывает (пусть даже с ошибками) то он имеет право жить и в будущем. Сначала подумал что нужно двойная оптимизация, самой модели и выходной переменной. ОДНАКО, потом меня осенило. Зачем эти тёрки, ведь если модель обучилась на 60% обобщения, то подставив формулы в индикатор и получив сигналы на обучающей и тестовой выборке мы получим результат, при котором система работает на 100%. у тоесть если мы получили сигналы на обучающей и тестовой выборке и изменим выходную переменную в соответствии с этими сигналами то получим те самые 100% обучения. Отсюда вывод. Получив несколько моделей с 50-60% обобщения выбираем ту модель которая набрала (заработала) на участке обучения и теста. Это говорит что в целом основные сигналы она заработала (те которые принесли достаточную прибыль) а сигналы где она слила, были не сильно убыточные (поделись улыбкою своей, и она ещё не раз к тебе вернётся), главное что по итогу периода мы заработали. Так что как то так.......
 
Vizard_:
4.Выкини рандомность(или отключаемую), пусть просто делит на две части данные, считает по порядку и выводит % удачных предсказаний для 1 (для 0 не надо)

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

 

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

 

вот кстати как делается валк форвард в пакете caret для R:

http://topepo.github.io/caret/splitting.html (раздел Data Splitting for Time Series)

library(caret)
caretObj <- train(x = trainData[,1:(ncol(trainData)-1)],
                  y = trainData[,ncol(trainData)],
                  trControl = trainControl(method = "timeslice", initialWindow=1000, horizon=300, fixedWindow=TRUE),
                  verbose = TRUE)

 Модель будет обучаться на первых 1000 примерах, затем тестироваться на примерах 1001-1300. Затем сделается сдвиг на 300, обучение на 301-1300, тест на 1301-1600, итд, пока обучающие примеры не кончатся

 
Vizard_:
Юр, сделай нормальную версию проги(или модернизированную) для людей)))

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


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

3. Без нормализации!(или отключаемую), так как если данные изначально центрированы относительно 0, после преобразования
х-х.мин/....(или какое там у тебя) - улетают)))

4.Выкини рандомность(или отключаемую), пусть просто делит на две части данные, считает по порядку и выводит % удачных предсказаний для 1 (для 0 не надо)

5.Замутил значимость входов - гуд!

6.Пусть помимо той формулы что выводится, выводится и полная!, то есть сейчас


7. А где 7 версия?
  1. Суть в том, что запятая в Excel применяется для разделения целой части числа от дробной. Вполне понятно, что если натыкать побольше разделителей, то те, кто редактируют выборки в разных приблудах, попросту не смогут засунуть своё хозяйство без дополнительных танцев с бубном в jPrediction. Т.е. в данный момент всё сделано более или менее совместимым с электронными таблицами. В данный момент реализован парсер только для файлов формата CSV и он заточен под электронные таблицы. Но jPrediction собран в OOП и можно расширять интерфейс для других форматов.
  2. Вторая суть в том, что в jPrediction нет и никогда не будет дополнительных настроек. Задача пользователя в jPrediction - взять готовую выборку и нажав клавишу F8 получить за приемлемое время модель или сообщение "Garbage in, Garbage out". Кому нравится всякая беспонтовая суета, типа: ковыряться в алгоритмах обучения, чего то там настраивать программах, проектировать архитектуру сетей, а не заниматься исследовательской деятельностью в плане подбора качественных данных для задачи, то пусть берут другие пакеты ML. Таких пакетов сейчас валом и ковыряться в них можно до конца жизни. Основная суть машинного обучения состоит в том, что обобщающая способность модели зависит только от качества данных в выборке, а не от алгоритмов и их настроек. Поэтому, все проблемы нужно искать в выборке, а не пытаться что-то настроить в jPrediction.
  3. См.  п. 2.
  4. См.  п. 2
  5. -
  6. Там выводится не формула, а код для портации модели в другие приложения. В данный момент реализован код для портации в Java приложения. Позже планируется портация кода моделей в MQL. Такой код должен быть максимально лаконичным, а не длинючей портянкой. Поэтому, всё лишнее из него удалено, а всё что часто повторяется, вынесено отдельно.
  7. Сайт проекта на jprediction.com и там же есть пункт меню "Скачать" для загрузки свежих версий.

Если кому что не шибко нравится в jPrediction, то проект открытый с Open Source под лицензией GNU GPL и делать от него форки, чего то там менять и допиливать не только не запрещается, но в какой-то степени даже приветствуется.

 
Dr.Trader:

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

 

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

 

вот кстати как делается валк форвард в пакете caret для R:

http://topepo.github.io/caret/splitting.html (раздел Data Splitting for Time Series)

 Модель будет обучаться на первых 1000 примерах, затем тестироваться на примерах 1001-1300. Затем сделается сдвиг на 300, обучение на 301-1300, тест на 1301-1600, итд, пока обучающие примеры не кончатся

Супер информация. Спасибо!
 
Dr.Trader:

Все оценки которые сейчас выдаёт jPrediction - неадекватны для форекс, и только вводят в заблуждение.

Это бездоказательные голословные утверждения, т.е. то что в простонародье именуется брехнёй. Чтобы доказать эффективность Walk Forward, будьте добры  представить результаты сравнительных исследований моделей полученных в jPrediction и моделей полученных после Walk Forward, в таком виде, чтобы их можно было перепроверить на "вшивость". Если такие результаты подтвердят Ваши слова, то тогда появится смысл заменить алгоритм тестирования, который реализован в данный момент в jPrediction на Walk Forward.

Уже неоднократно сталкивался с тем, что казалось бы "очевидные" идеи после их реализации и проверки опытом, оказывались "пустышками". Результативность даёт только очень малая часть идей и зачастую только после дополнительной правки "напильником". Потому что в идеях упускаются детали. А дьявол сидит в этих самых деталях.

Линус Торвальд (создатель ядра Linux) не устаёт повторять: "Теория рано или поздно встречается с практикой. И практика всегда оказывается критерием истины. Всегда!".

Дополнительная проблема Walk Forward заключается в том, что мы получаем множество моделей на каждом из optimization period. Какую из этих моделей необходимо оставить в качестве рабочей и по какому критерию её отбирать?

 
Yury Reshetov:

Это бездоказательные голословные утверждения, т.е. то что в простонародье именуется брехнёй. Чтобы доказать эффективность Walk Forward, будьте добры  представить результаты сравнительных исследований моделей полученных в jPrediction и моделей полученных после Walk Forward, в таком виде, чтобы их можно было перепроверить на "вшивость". Если такие результаты подтвердят Ваши слова, то тогда появится смысл заменить алгоритм тестирования, который реализован в данный момент в jPrediction на Walk Forward.

Уже неоднократно сталкивался с тем, что казалось бы "очевидные" идеи после их реализации и проверки опытом, оказывались "пустышками". Результативность даёт только очень малая часть идей и зачастую только после дополнительной правки "напильником". Потому что в идеях упускаются детали. А дьявол сидит в этих самых деталях.

Линус Торвальд (создатель ядра Linux) не устаёт повторять: "Теория рано или поздно встречается с практикой. И практика всегда оказывается критерием истины. Всегда!".

Дополнительная проблема Walk Forward заключается в том, что мы получаем множество моделей на каждом из optimization period. Какую из этих моделей необходимо оставить в качестве рабочей и по какому критерию её отбирать?

Не стоит ссориться. Мы работаем над очень сложным объектом исследования. Тут есть много допущений. И эти допущения приводят к переобученности и сливу вне выборки.

Два простых правила: обмануть рынок, не обмануть себя. 

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

 

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

 
Yury Reshetov:

Это бездоказательные голословные утверждения, т.е. то что в простонародье именуется брехнёй. Чтобы доказать эффективность Walk Forward, будьте добры  представить результаты сравнительных исследований моделей полученных в jPrediction и моделей полученных после Walk Forward, в таком виде, чтобы их можно было перепроверить на "вшивость". Если такие результаты подтвердят Ваши слова, то тогда появится смысл заменить алгоритм тестирования, который реализован в данный момент в jPrediction на Walk Forward.

Уже неоднократно сталкивался с тем, что казалось бы "очевидные" идеи после их реализации и проверки опытом, оказывались "пустышками". Результативность даёт только очень малая часть идей и зачастую только после дополнительной правки "напильником". Потому что в идеях упускаются детали. А дьявол сидит в этих самых деталях.

Линус Торвальд (создатель ядра Linux) не устаёт повторять: "Теория рано или поздно встречается с практикой. И практика всегда оказывается критерием истины. Всегда!".

Дополнительная проблема Walk Forward заключается в том, что мы получаем множество моделей на каждом из optimization period. Какую из этих моделей необходимо оставить в качестве рабочей и по какому критерию её отбирать?

При всем моем уважении к тебе, Решетов, доказывать свое место под солнцем должны авторы велосипедов, включая свою терминологию, типа "обобщающая способность". Удобство позиции Dr.Trader  состоит именно в том, что все необходимые доказательства как теории так и практической проверки миллионами пользователей высказываемых им идей сделаны до него, зачастую много лет назад. Он же просто приводит конкретные примеры использования. И правильность обсуждаемого поста очевидна как на интуитивном уровне, так и на теоретическом.
 
Alexey Burnakov:

Не стоит ссориться.

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

Alexey Burnakov:

Мы работаем над очень сложным объектом исследования.

Кто-то работает, а кто-то звиздит бездоказательно (не будем показывать пальцем)

Alexey Burnakov:

Не стоит ссориться.

Согласен.

Alexey Burnakov:

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

Допущения на хлеб не намажешь, в карман не положишь. Поэтому всё нужно сверять опытным путём, а не допускать непроверенные допущения, чтобы не наступить на грабли - переобученности и сливу вне выборки.


Alexey Burnakov:

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

 

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

Суть в том, что у всех методов есть достоинства и недостатки. Допущения преувеличивают достоинства и не принимают во внимание недостатки.

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

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

 
Yury Reshetov:


Суть в том, что у всех методов есть достоинства и недостатки. Допущения преувеличивают достоинства и не принимают во внимание недостатки.

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

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

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