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

 

1) Я правильно понимаю смысл разделения набора данных на обучающий, валидационный и тестовый:?

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

2) Кстати, к какому уровню ошибки при обучении/валидации/тесте надо стремиться? 15/20/20% а может 5/10/15%? или др.?

3) Не совсем понимаю, зачем рекомендуется перемешивать обучающие примеры? Мы в любом случае каждый пример обработаем.

 
elibrarius:

Кстати, к какому уровню ошибки при обучении/валидации/тесте надо стремиться? 15/20/20% а может 5/10/15%? или др.?

Предыдущее, да, как-то так.

Что касается ошибки, это зависит от конкретики. Если, скажем, МО или НС определяют вход в сделку, то может и 50% ошибок хватить. К примеру, в удачной сделке вы получаете в среднем 2-3 п прибыли, а в неудачной 1п убытка. В этом случае, 0.5 оч неплохая вероятность.

 
Yuriy Asaulenko:

Предыдущее, да, как-то так.

Что касается ошибки, это зависит от конкретики. Если, скажем, МО или НС определяют вход в сделку, то может и 50% ошибок хватить. К примеру, в удачной сделке вы получаете в среднем 2-3 п прибыли, а в неудачной 1п убытка. В этом случае, 0.5 оч неплохая вероятность.

0,5 как то маловато... А к каким значениям надо стремиться, какие можно реально достичь на практике (не какие-то др. задачи НС, а именно для торговли)?
А то захочу обучить до 10%, но если это нереальная цифра, то буду впустую тратить время и свое и процессорное. Скажем так - какой лучшей ошибки добивались вы и на каком уровне можно остановиться и не искать улучшения?
 
elibrarius:
0,5 как то маловато... А к каким значениям надо стремиться, какие можно реально достичь на практике (не какие-то др. задачи НС, а именно для торговли)?
А то захочу обучить до 10%, но если это нереальная цифра, то буду впустую тратить время и свое и процессорное. Скажем так - какой лучшей ошибки добивались вы и на каком уровне можно остановиться и не искать улучшения?

0.5 маловато? Ну, Вы даете.) Я уже приводил этот пример: у покерного игрока вероятность выигрыша 1/9-1/6, и хорошие игроки всегда в плюсе.

Да и мои все системы работали при вероятности ~0.5, и всегда были в плюсе. По моим сведениям, многие ТС работают с вероятностью близкой к 0.5 - об этом, в частности, говорилось на конференции по автоторговле.

"А то захочу обучить до 10%, но если это нереальная цифра," - реальная или нереальная зависит от конкретной задачи. Скажем, я НС пересечению МАшек обучал - так там достоверность почти 100%.))

 
Yuriy Asaulenko:

0.5 маловато? Ну, Вы даете.) Я уже приводил этот пример: у покерного игрока вероятность выигрыша 1/9-1/6, и хорошие игроки всегда в плюсе.

Да и мои все системы работали при вероятности ~0.5, и всегда были в плюсе. По моим сведениям, многие ТС работают с вероятностью близкой к 0.5 - об этом, в частности, говорилось на конференции по автоторговле.

"А то захочу обучить до 10%, но если это нереальная цифра," - реальная или нереальная зависит от конкретной задачи. Скажем, я НС пересечению МАшек обучал - так там достоверность почти 100%.))

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

 
Vasily Perepelkin:

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

На самом деле возможно. 0.5 с прогнозом и тейком больше стопа, это совсем не тоже самое, что 50/50, и как бог на душу положит,)) - т.е., без прогноза. Мы подбрасываем уже совсем другую монетку.))
 
elibrarius:

1) Я правильно понимаю смысл разделения набора данных на обучающий, валидационный и тестовый:?

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

2) Кстати, к какому уровню ошибки при обучении/валидации/тесте надо стремиться? 15/20/20% а может 5/10/15%? или др.?

3) Не совсем понимаю, зачем рекомендуется перемешивать обучающие примеры? Мы в любом случае каждый пример обработаем.


1) Не все и это принципиально. 

Берем один большой файл. Делим на две не равные части. 

Большую часть делим так, как Вы описали. Получаем ошибки, которые должны быть примерно равны.

После этого модель проверяем на второй части файла. Ошибка на этом участке опять не должна сильно отличаться. 

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


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


Например. 

Если у Вас все четыре ошибки около 35%, то за счет выбора модели дай бог уменьшить ошибку до 30%.


ПС.

Ошибка менее 10% - это явный признак переобученности. Если имеете такую ошибку, то надо сто раз перепроверить.

 

Нашел в ALGLIB обучение методом раннего останова с валидационным участком:

Neural network training using early stopping (base algorithm -   L-BFGS with regularization).    
...
Algorithm stops if validation set error increases for a long    
enough or step size is small enought (there are task where      
validation set may decrease for eternity). In any case solution 
returned corresponds to the minimum of validation set error.    

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

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

Вот что вышло:

Средняя ошибка на обучающем     (80%) участке =0.535 nLearns=200 NGrad=142782 NHess=0 NCholesky=0 codResp=6
Средняя ошибка на валидационном (20%) участке =0.298 nLearns=200 NGrad=142782 NHess=0 NCholesky=0 codResp=6
Полный участок (обучающий + валидационный):
Средняя ошибка обучения=0.497 nLearns=200 NGrad=142782 NHess=0 NCholesky=0 codResp=6
Средняя ошибка на тестовом      (20%) участке =0.132 nLearns=200 NGrad=142782 NHess=0 NCholesky=0 codResp=6

Такое ощущение что произошла подгонка к валидационному участку. Тестовый вообще удачный, но он в обучении не был и не сравнивался, видимо просто случайное совпадение.
Этой ф-ей ансамбли считают, а там разделение 2/3 и все перемешивается между обоими участками, попробую так же сделать...
Перемешал:

Средняя ошибка на обучающем     (60%) участке =0.477 nLearns=10 NGrad=10814 NHess=0 NCholesky=0 codResp=6
Средняя ошибка на валидационном (40%) участке =0.472 nLearns=10 NGrad=10814 NHess=0 NCholesky=0 codResp=6
Полный участок (обучающий + валидационный):
Средняя ошибка обучения=0.475 nLearns=10 NGrad=10814 NHess=0 NCholesky=0 codResp=6
Средняя ошибка на тестовом      (20%) участке =0.279 nLearns=10 NGrad=10814 NHess=0 NCholesky=0 codResp=6

За счет перемешивания ошибка выровнялась на обучающем и валидационном участках.

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

 
Yuriy Asaulenko:
На самом деле возможно. 0.5 с прогнозом и тейком больше стопа, это совсем не тоже самое, что 50/50, и как бог на душу положит,)) - т.е., без прогноза. Мы подбрасываем уже совсем другую монетку.))
Ну я и говорю что возможно, открываемся рандомно и ставим тейк больше стопа в раза 2 например и всё, статистически будет профит, к примеру 100 сделок в плюс по 10 пунктов и 100 в минус по 5 пунктов, в результате 500 пунктов профита, прогноз не нужен.
 
СанСаныч Фоменко:


1) Не все и это принципиально. 

Берем один большой файл. Делим на две не равные части. 

Большую часть делим так, как Вы описали. Получаем ошибки, которые должны быть примерно равны.

После этого модель проверяем на второй части файла. Ошибка на этом участке опять не должна сильно отличаться. 

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

4 участка получается? Обучающий/валидационный/тестовый1/тестовый2 ?

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