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

 

Помните я говори что получил модель, которая с 01.31.2018 набирает по сей день, а вот как эта модель отработывает эти две недели начиная с 03.05.2018 и по сей день. Результат тестера.

Вполне не плохо для старушки обученной на 40 точках и проработавшей уже как 1.5 месяца на ООС.

А вот это её полный ООС начиная с 01.31.2018

А вы всё ещё считаете что это подгонка???? Напомню что на скринах участок ООС

 

Приведу расчеты, которые показывают, что все является пустой болтовней:

  • без тщательного обоснования, что предикторы влияют на целевую переменную
  • переобученность (сверх подгонка) определяется только на файлах по ВРЕМЕНИ находящихся вне времени обучения.

Исходные данные:

два последовательных по времени файла, имеющие 54 предиктора и целевую переменную на разворот тренда: short-out-long

Расчеты выполняются в rattle, который первый файл R Rat_DF1a делит на три части: train, test, validation. Деление на части производится по sample, т.е. делается случайная выбора баров исходного файла.

Результаты расчета RF : 500 деревьев, 7 предикторов в узле.

Number of observations used to build the model: 2491

Missing value imputation is active.


Call:

 randomForest(formula = trainY ~ .,

              data = crs$dataset[crs$sample, c(crs$input, crs$target)],

              ntree = 500, mtry = 7, importance = TRUE, replace = FALSE, na.action = randomForest::na.roughfix)


               Type of random forest: classification

                     Number of trees: 500

No. of variables tried at each split: 7


        OOB estimate of  error rate: 1.61%

Confusion matrix:

    -1    0   1 class.error

-1 498    5   2  0.01386139

0    3 1067  17  0.01839926

1    1   12 886  0.01446051 

 

Чудеснейший результат! Грааль! Отмечу, что ООВ - это тот кусок файла, который не использовался при обучении.

Здесь же посмотрим ошибку обучения. видим, что 500 не нужно, можно обойтись 50 или 100 деревьями.



Проверим на участке тестирования

Error matrix for the Random Forest model on Rat_DF1a [test] (counts):


      Predicted

Actual  -1   0   1 Error

    -1 110   3   0   2.7

    0    3 221   2   2.2

    1    0   2 194   1.0


Error matrix for the Random Forest model on Rat_DF1a [test] (proportions):


      Predicted

Actual   -1    0    1 Error

    -1 20.6  0.6  0.0   2.7

    0   0.6 41.3  0.4   2.2

    1   0.0  0.4 36.3   1.0


Overall error: 1.8%, Averaged class error: 1.966667%


Rattle timestamp: 2018-03-14 10:57:23 user


Результат обучения подтверждается. Грааль!


Еще раз перепроверим на участке валидации

Error matrix for the Random Forest model on Rat_DF1a [validate] (counts):


      Predicted

Actual  -1   0   1 Error

    -1 105   1   0   0.9

    0    1 218   2   1.4

    1    0   1 205   0.5


Error matrix for the Random Forest model on Rat_DF1a [validate] (proportions):


      Predicted

Actual   -1    0    1 Error

    -1 19.7  0.2  0.0   0.9

    0   0.2 40.9  0.4   1.4

    1   0.0  0.2 38.5   0.5


Overall error: 0.9%, Averaged class error: 0.9333333%


Rattle timestamp: 2018-03-14 10:59:52 user


Грааль! Можно бежать в микрофинансовую компанию и занимать как можно больше бабок!


Но есть одно НО: деление файла проводилось случайной выборкой баров, а торговать будет строго по возрастанию времени.

Проверим на файле, в котором был сохранена эта хронология - это Rat_DF1b

А вот и результат:

Error matrix for the Random Forest model on Rat_DF1b (counts):


      Predicted

Actual -1   0   1 Error

    -1  0 324 237 100.0

    0   0 633 540  46.0

    1   0 152 697  17.9


Error matrix for the Random Forest model on Rat_DF1b (proportions):


      Predicted

Actual -1    0    1 Error

    -1  0 12.5  9.2 100.0

    0   0 24.5 20.9  46.0

    1   0  5.9 27.0  17.9


Overall error: 48.5%, Averaged class error: 54.63333%


Rattle timestamp: 2018-03-14 11:02:16 user


КАТАСТРОФА! МОДЕЛЬ ПЕРЕОБУЧЕНА! ПРЕДИКТОРЫ ПО ОТНОШЕНИЮ К ЦЕЛЕВОЙ ПЕРЕМЕННОЙ - ЭТ О ПРОСТО ШУМ, ТОЛЬКО НА ШУМЕ МО СПОСОБНО ВЫДАТЬ СТОЛЬ УДИВИТЕЛЬНЫЕ РЕУЗЛЬТАТЫ.


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

 Но схема ВСЕГДА должна быть как минимум именно такой, причем она еще НЕ полная - нужен еще прогон тестера, который подтвердит результат тестирования на обычном последовательном файле. Ну, а потом в микрофинансовую компанию.



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

Приведу расчеты, которые показывают, что все является пустой болтовней:

  • переобученность (сверх подгонка) определяется только на файлах по ВРЕМЕНИ находящихся вне времени обучения.

Cтранно, что у вас на  test, validation  получились такие хорошие результаты. В моих экспериментах и там было все гораздо хуже. Делая разную инициализацию ГСЧ перед перемешиванием - получал разные результаты на  test и validation - очень сильно отличающиеся при разных ГСЧ, как по ошибке, так и по кол-ву сделок.

В итоге пришел к выводу, что test и validation вообще не нужны, и надо на одном участке обучать, а на другом (у вас он отдельным файлом) оценивать. Так будет исключен случайный фактор "удачности" перемешивания.

 

Ребятки, а грааль готов ? 

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

Приведу расчеты, которые показывают, что все является пустой болтовней:

  • без тщательного обоснования, что предикторы влияют на целевую переменную
  • переобученность (сверх подгонка) определяется только на файлах по ВРЕМЕНИ находящихся вне времени обучения.

Исходные данные:

два последовательных по времени файла, имеющие 54 предиктора и целевую переменную на разворот тренда: short-out-long

Расчеты выполняются в rattle, который первый файл R Rat_DF1a делит на три части: train, test, validation. Деление на части производится по sample, т.е. делается случайная выбора баров исходного файла.



Но есть одно НО: деление файла проводилось случайной выборкой баров, а торговать будет строго по возрастанию времени.

Проверим на файле, в котором был сохранена эта хронология - это Rat_DF1b



Overall error: 48.5%, Averaged class error: 54.63333%


Rattle timestamp: 2018-03-14 11:02:16 user


КАТАСТРОФА! МОДЕЛЬ ПЕРЕОБУЧЕНА! ПРЕДИКТОРЫ ПО ОТНОШЕНИЮ К ЦЕЛЕВОЙ ПЕРЕМЕННОЙ - ЭТ О ПРОСТО ШУМ, ТОЛЬКО НА ШУМЕ МО СПОСОБНО ВЫДАТЬ СТОЛЬ УДИВИТЕЛЬНЫЕ РЕУЗЛЬТАТЫ.


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

 Но схема ВСЕГДА должна быть как минимум именно такой, причем она еще НЕ полная - нужен еще прогон тестера, который подтвердит результат тестирования на обычном последовательном файле. Ну, а потом в микрофинансовую компанию.



Это основная ошибка при разделении на поднаборы(train/val/test). Порядок должен быть такой:

  1. Разделяем   упорядоченный по времени набор данных на train/val/test. 
  2. При обучении перемешиваем только обучаемый набор (никогда валидационный и тестовый). Говорю конечно о классификации
  3. Все параметры преобразования, трансформации предикторов получаем только на обучающем наборе. На val/test их используем.
  4. Оценка, выбор, создание предикторов только по обучающему набору.

Удачи

 

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

Я отказался от использования модельного выбора предикторов. Ограничен особенностями используемой модели.

Удачи

 
Vladimir Perervenko:
  1. При обучении перемешиваем только обучаемый набор (никогда валидационный и тестовый). Говорю конечно о классификации

Из Никоnенко С., Кадурин А., Архангельская Е. "Глубокое обучение" стр. 139.


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

Но, как написал выше,  после экспериментов с разной инициализацией ГСЧ, в которых получались разные по удачности  valid наборы, - пришел к выводу, что valid участок возможно и не нужен. Кроме него можно использовать др. методы регуляризации. Впрочем эти эксперименты были на малом количестве данных (5 дней), и если число примеров увеличить раз в 10, возможно перемешивание будет равномернее и данные на этих участках будут однороднее (т.е. одной природы) - в таком случае valid может быть полезен.

Обновление: В случае если данных очень много и в valid участок попадают несколько флетов и трендов обоих направлений, то в таком случе перемешивание с обучающим набором возможно и не нужно.
 
Vladimir Perervenko:

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

Я отказался от использования модельного выбора предикторов. Ограничен особенностями используемой модели.

Удачи

А я считаю что наиболее продвинутым является совсем другой продукт ;-).... В котором реализовано чуть по другому.

Две сети, где выборка делится на 2 под выборки train и test, где для сети Б (второго полинома), трейном является тест, а тест трейном. При этом считается исключительно выборка тест, где половину отрабатывает один полином, другую другой. Причём классы делятся равномерно. То есть единички разделили поровну на трейн и тест и соотвественно нули разделили тоже по ровну. И к сожалению никакого там времени нет. Файл можно подавать хоть как по упорядоченности векторов. Может быть в этом залог снижение оверфита???


Правда я не совсем понимаю, может быть говоря про участок валидации это и есть участок трейн в ЛЮБИМОМ мной оптимизаторе ??? 

А Вашем случае участок Тест является контрольный, когда мы даем сети поработать какое то время... Запутался в понятиях...

 

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

При неоднократной оптимизации результат должен прыгать в пределах 10-20% это как раз таки из за упорядоченности данных, один раз хорошо упорядочились, в другой раз чуть хуже и т.д.... ИМХО!!!

 
elibrarius:

Из Никоnенко С., Кадурин А., Архангельская Е. "Глубокое обучение" стр. 139.


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

Но, как написал выше,  после экспериментов с разной инициализацией ГСЧ, в которых получались разные по удачности  valid наборы, - пришел к выводу, что valid участок возможно и не нужен. Кроме него можно использовать др. методы регуляризации. Впрочем эти эксперименты были на малом количестве данных (5 дней), и если число примеров увеличить раз в 10, возможно перемешивание будет равномернее и данные на этих участках будут однороднее (т.е. одной природы).

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

Юношеский дух противоречий неукротим :)

Я говорил о классификации таймсерий. Например для М15 две недели на обучение приблизительно 1000 баров. Следующая неделя на валидацию - 500 баров. При обучении обучающий набор перемешиваем а валидационный нет.

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

Учитывая то, что у нас нет ограничений в количестве примеров и что все таки это таймсерии, лучше делить до перемешивания. ИМХО