Поиск по сайту:
Гость
Редакционная политика

Кросс-валидация - алгоритм оценки торговых систем

08.01.2014 14:28 - mehanizator - Стратегии
Как обычно поступают при поиске оптимальных параметров торговой стратегии? Гоняют эту стратегию на решетке возможных параметров, и выбирают наилучшую эквити из полученных. Однако в подавляющем большинстве случаев стратегия не дает в реальной торговле такие же хорошие результаты, которые она показывала на графике в прошлом.

Это происходит от того, что происходит «переоптимизация», из всего набора параметров выбирается такой, который наиболее точно описывает особенности тренировочных данных. Однако, чем точнее система подстроена под местные особенности данных, тем хуже ее способность к обобщению.

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

Идея проста – оптимизировать систему на одном куске данных, а тестировать ее на другом куске данных. Например, если есть данные за два года, оптимизировать систему на данных за первый год, а тестировать ее на данных за второй год.

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

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

Так мы пришли к алгоритму кросс-валидации, в данном случае состоящий из двух блоков.

Следующий шаг – увеличить число блоков. Обычно используется 10-15. Это повышает устойчивость оценки.

Таким образом, алгоритм N-блочной кросс-валидации таков:

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



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


Автор: mehanizator
Понравилась статья? Перепост приветствуется!

Ваш комментарий:

Комментарии (последние вверху):

27.02.2014 08:30 - t_trade:
Хорошо, я понял:) "торгуя в песочнице - пользуйся методами для песочницы" :)
27.02.2014 08:27 - mehanizator:
на участке в 3 года, если он однородный, что угодно может оказаться устойчивым. возьмите лет 15 :)
27.02.2014 08:26 - mehanizator:
в кросс валидации IS и OOS тоже не пересекаются в том смысле что для построения эквити на одном участке используются элементы, полученные на других участках.
27.02.2014 08:14 - t_trade:
Да, но и участок IS увеличивается почти в 2 раза. Вот в чем дело. Как пересечение машек может быть устойчиво?:)
По сути, мы, имея 3 года, оптимизируем систему для дальнейшей торговли. И хотим знать, а не подвержены ли эти параметры влиянию какого-нибудь случайного выброса. Тогда - да, кросс-валидация - идеальный метод.

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

Александр, я не пытаюсь спорить с Вами. Я учился трейдингу в том числе по Вашей книге. Я просто пытаюсь понять, где я не прав, потому что мне не кажется этот метод эффективным. Вы сами используете кросс-валидацию?
27.02.2014 07:54 - mehanizator:
если на OOS получается примерно то же самое, что на IS, значит устойчива система. вроде очевидно?

кроссвалидация дает участок OOS вдвое больший чем просто разбиение на IS-OOS. насколько адекватна оценка по вдвое большим данным? ну, по крайней мере можно сказать что она точно более адекватна, так почему бы не пользоваться?
27.02.2014 07:40 - t_trade:
Собственно, вопрос в том, насколько адекватна такая оценка кусочков OOS будет по сравнению с разбивкой на 2 части. когда OOS по размеру сопоставим с IS.
27.02.2014 07:38 - t_trade:
Я понимаю, о чем Вы. Ну вот, например. Пересечение МАшек:) за 3 года оптимальными оказались 9 и 14. Я хочу проверить, насколько эти параметры устойчивы. Разбиваю на 15 кусков, и оптимизирую 15 раз, каждый раз последовательно исключая 1/15 часть, так? получаю 10 раз 9 и 14. И 5 раз 8 и 16. Склеиваю эквити из этих 1/15 кусочков, подставляя те параметры, которые получились при тестах без их участия. И получаю почти такую же эквити, как и при оптимизации за все 3 года.

И так с каждой системой, которую я проверил.
27.02.2014 07:29 - mehanizator:
А какие результаты вы пытались получить? Результаты оптимизации? Но это не метод оптимизации. Это метод проверки устойчивости результатов оптимизации.

Кросс-валидация это и есть вариант IS-OOS. Вы строите out-of-sample эквити и оцениваете ее параметры.
27.02.2014 07:10 - t_trade:
Александр, добрый день. Я покопался с этим методом и пришел к такому результату: почти все тесты на 14/15 размере данных с последовательно исключаемой 1/15 частью дают примерно такие же результаты, что и оптимизация на всем участке данных. Что не удивительно на самом деле. Чем же хорош этот метод? как он может дать более адекватную оценку по сравнению с IS-OOS? Может, я брал слишком маленькие кусочки (4 месяца для интрадей, разные системы проверял, от 1 до 5 сделок в день)
09.01.2014 10:32 - mehanizator:
ну ок. есть разные техники валидации. каждый выбирает что ему больше нравится.
09.01.2014 09:12 - spitfire:
Ну как так? Допустим берем тестовый период 6 лет, IS = полгода, OOS = 1 месяц. Тогда весь тест будет 5.5 лет из 6 возможных. То есть пропадет только первый IS-период. Какая еще половина пропадет, Вы что. Все зависит от соотношения между IS и общем размером теста.
09.01.2014 07:34 - mehanizator:
поскольку при форвардном тестировании тестируется только прошлое на будущем, получается в два раза меньше теста.
09.01.2014 07:27 - spitfire:
оптимизировать на будущих данных чтобы протестить в прошлом это конечно сильно. А чем не нравится форвардное тестирование?
08.01.2014 20:43 - Drozd:
mehanizator, по разному бывает.
08.01.2014 20:26 - mehanizator:
факторы я даю, конечно.
08.01.2014 20:10 - robomakerr:
>mehanizator: скармливаю данные алгоритму, он... выдает модель если есть значимые факторы

Он сам ищет, что может являться фактором? Или список потенциальных факторов ему дается заранее?
08.01.2014 17:47 - mehanizator:
я думаю что такое редкость, рынок все-таки очень сильно отличается по периодам.
08.01.2014 17:43 - ab_trader:
mehanizator, круто. А все-таки, когда параметры мало меняются от блока к блоку, это должно говорить об устойчивости системы?
08.01.2014 17:36 - mehanizator:
ab_trader я уже очень давно параметры руками не подгонял. просто скармливаю данные алгоритму, он кросс-валидирует там все и либо выдает модель если есть значимые факторы либо не выдает.
08.01.2014 17:35 - mehanizator:
Drozd, если есть четкая идея, то в ней наверняка уже сидит толпа народа :)
08.01.2014 17:28 - ab_trader:
Понятно. Наверное, помимо качества тестовой эквити, надо еще смотреть на разницу параметров на разных участках. Если значения параметров близки, то система устойчива. Мех, а как на практике получается, параметры на разных участках для хороших систем сильно отличаются или нет?
08.01.2014 17:12 - Drozd:
Остался только один вопрос вопрос открытым - зачем оптимизировать систему? Если есть четкая идея, основанная на конкретном явлении, то как правило параметры колеблются в районе двух-трех единиц, а это можно и руками перебрать и не важно на каком участке. Идея или работает или не работает. Все прочее блуд и подгонка )
08.01.2014 16:26 - Intro:
А вот кстати разбивать на много блоков для меня идея свежая. Спасибо.
08.01.2014 16:08 - mehanizator:
тот, который получен с использованием всех данных. кроссвалидация не определяет параметры системы, она определяет степень устойчивости этих параметров.
08.01.2014 15:52 - ab_trader:
В результате кросс-валидации в худшем случае мы получим N наборов параметров системы. Как определить какой надо в торговле использовать?
X

Вход

Email:
Password:
 

Восстановить пароль

Email: