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

 

Я пробовал разные самописные способы валидации, в том числе те что описаны в этих статьях. Мои выводы такие:

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

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

Что послужило причиной плохого результата в конкретном случае - неизвестно. Всё что можно это оценить насколько модель хороша в среднем - построить модель десятки раз, сделать оценку на валидации. Данные для тренировки/валидации нужно делить каждый раз заново.
То что я считаю достоверным способом, это поделить данные случайным образом в отношении 50%/50% (не по времени, а так чтобы всё было равномерно перемешано, например строчки 1,2,5,7 для тренировки, 3,4,6,8 для валидации), обучить модель на первой части, затем провести валидацию на второй, для оценки модели я использую точность. Повторить это 50 раз (заново разбить данные на 2 рандомные части, обучение, валидация). Затем посчитать среднюю точность на тренировочных данных, и среднюю на валидационных. Допустим средняя точность на тренировочной выборке была 90%, на валидационной - 80%. Точность на фронттесте будет ещё ниже, я использую такое эмпирическое правило: посчитать разность (90%-80%=10%), и отнять её от результата валидации (80%-10% = 70%). Получается, что такая модель на фронттесте будет иметь точность в среднем примерно 70%. Далее, я генетикой подбираю параметры модели и предикторы, чтобы повысить эту оценку от 70% (это гораздо сложнее чем кажется, сложно выйти даже за 50%). 

Но мне не нравится что этот результат - просто среднее значение, без гаранатий. Реальная точность при торговле будет от 60% до 80%, или даже от 50% до 90%, смотря как не повезёт. Как я ни пробовал, но выловить лучшую модель по каким-то признакам не получается. Наверное единственное решение это построить десятки моделей с найденными лучшими параметрами и предикторами, и брать результат куда смотрит большинство (конгресс моделей).

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

 
Dr.Trader:

Я пробовал разные самописные способы валидации, в том числе те что описаны в этих статьях. Мои выводы такие:

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

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

Что послужило причиной плохого результата в конкретном случае - неизвестно. Всё что можно это оценить насколько модель хороша в среднем - построить модель десятки раз, сделать оценку на валидации. Данные для тренировки/валидации нужно делить каждый раз заново.
То что я считаю достоверным способом, это поделить данные случайным образом в отношении 50%/50% (не по времени, а так чтобы всё было равномерно перемешано, например строчки 1,2,5,7 для тренировки, 3,4,6,8 для валидации), обучить модель на первой части, затем провести валидацию на второй, для оценки модели я использую точность. Повторить это 50 раз (заново разбить данные на 2 рандомные части, обучение, валидация). Затем посчитать среднюю точность на тренировочных данных, и среднюю на валидационных. Допустим средняя точность на тренировочной выборке была 90%, на валидационной - 80%. Точность на фронттесте будет ещё ниже, я использую такое эмпирическое правило: посчитать разность (90%-80%=10%), и отнять её от результата валидации (80%-10% = 70%). Получается, что такая модель на фронттесте будет иметь точность в среднем примерно 70%. Далее, я генетикой подбираю параметры модели и предикторы, чтобы повысить эту оценку от 70% (это гораздо сложнее чем кажется, сложно выйти даже за 50%). 

Но мне не нравится что этот результат - просто среднее значение, без гаранатий. Реальная точность при торговле будет от 60% до 80%, или даже от 50% до 90%, смотря как не повезёт. Как я ни пробовал, но выловить лучшую модель по каким-то признакам не получается. Наверное единственное решение это построить десятки моделей с найденными лучшими параметрами и предикторами, и брать результат куда смотрит большинство (конгресс моделей).

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

Все верно сделал! ©

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

Результаты должны быть хуже, но правдивее.

Если получится связь между результатами на CV и nested CV (корреляция). Значит модель подходит под данные.
 
Vizard_:
Не пока)))
7 глянул. Резы не лучше чем у версии полуторогодовой давности, или когда смотрел уже точно не помню. В окне и фйло статистики пишет разные. Отбор значимости входов
спорный, сравнивал в лоб с rf и еще парочкой, причем может присвоить высокий приоритет и совсем малозначемому. Если взять лучший рез(из окна) все равно не айс.
На этих данных получаю не менее 92%. Приблуда(как есть) по прежнему для практического применения малопригодна. За потуги в разработке и полет мысли - респект.

Все имхо разумеется. Теперь пока)))


Когда мы имеем дело с человеком уровня Решетова, то можно смело требовать:

1. Обзор аналогов

2. Указание недостатков, которые предполагается преодолеть в этих аналогах

3. Указание на механизм ликвидации этих недостатков (можно скрыть в рыночной экономике конкретику)

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

 

Если этого не делает человек уровня Решетова, то тогда: За потуги в разработке и полет мысли - респект. 

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

 то можно смело требовать:

))))))
 
Vizard_:
Не пока)))
7 глянул. Резы не лучше чем у версии полуторогодовой давности, или когда смотрел уже точно не помню. В окне и фйло статистики пишет разные. Отбор значимости входов
спорный, сравнивал в лоб с rf и еще парочкой, причем может присвоить высокий приоритет и совсем малозначемому. Если взять лучший рез(из окна) все равно не айс.
На этих данных получаю не менее 92%. Приблуда(как есть) по прежнему для практического применения малопригодна. За потуги в разработке и полет мысли - респект.

Все имхо разумеется. Теперь пока)))


HРезультаты в окне это комитет из двух моделей. Если посмотрите то в файле который сохраняет предиктор две моделию В окне это резульатт комитета этих двух моделей. как то так....
 
Vizard_:
Ясно.Блокнот сжат, а вниз не крутил)))Но для срвнения брал из окна.
Удалил сразу за ненадобностью, хотя кому то возможно и пригодиться...
Вообще думаю вы зря хаите эту работу. Во первых она отвечает на очень важный вопрос, а именно какой процент обобщающей информации содержится во входных данных по отношению к выходному. И второе, если Юрий прислушается то что я ему предложил, то получиться вообще бомба, которая закроет множество вопросов. У меня к сожалению так и не удалось обучить модель на 100 процентов на своих данных (без манипуляций с данными которые увеличивают обобщающую способность, как оказалось мнимо), чтобы посмотреть как модель в последствии отработает в будущем. Однако получив 100% обобщения комитета, нужно убедится что каждая из моделей имеет те же самые 100%, тоесть когда входные данные полностью описывают выходной. Тогда и видно будет.... А пока выводы о неработоспособности Оптимизатора преждевременны. Другое дело что каждый из нас пытается построить модель к ИДЕАЛЬНОМУ выходу. Что в свою очередь крайне сложно, если вообще возможно. Ну а что если выход будет не ИДЕАЛЬНЫМ, а чуток с ошибками..... Вот это то и интересно..... Скажем единичкой помечать не те сигналы у которых прибыль 100 пипсов, а ещё и те у которых прибыль -30 пипсов и выше.... Зная об этом допущении достаточно будет вставать по сигналу на 30 пипсов лучше и проблема решена, если получится построить модель с уровнем обобщения 100%
 
Вообще для построения моделей классификации, порядок записей не так уж и важен, важно чтобы модель выучила его на 100% и важно чтобы реакция рынка в ближайшем будущем на теже самые события была таже самая. Так сказать отсутствие противоричивых данных. Другое дело с моделями прогностическими, вот для них как раз таки порядок расположения записей важен. Это одно из отличий между классификацией и прогнозом.....
 

Интересно нам это поможет.... Так то понимаю что вычислительная мощность такой штука на порядок выше, если не на несколько....

https://hi-tech.mail.ru/news/compact-quantum-computer/?frommail=1 

 
СанСаныч Фоменко:
Mihail Marchukajtes:
И все желающие. В архиве z1 два файла train и test. Для Target построить модель на train, применить на test, выложить результаты в % (удачно предсказанных
случаев) для обоих выборок(train = хх%, test = хх%). Методы и модели озвучивать не нужно, лишь цифры. Допускается использование любых манипуляции с данными
и методов добычи.
Файлы:
z1.zip  43 kb
 
Vizard_:
И все желающие. В архиве z1 два файла train и test. Для Target построить модель на train, применить на test, выложить результаты в % (удачно предсказанных
случаев) для обоих выборок(train = хх%, test = хх%). Методы и модели озвучивать не нужно, лишь цифры. Допускается использование любых манипуляции с данными
и методов добычи.

Спасибо! Я попробую.

Давайте договоримся, что в test не заглядывать вплоть до момента оценки обученной модели. Я раньше этим грешил.

То есть, обучаем до посинения лучшую модель на train. Может, две-три модели. Потом их однократный тест на test.