Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 742
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Помните я говори что получил модель, которая с 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). Порядок должен быть такой:
Удачи
Если говорить об оценивании предикторов с помощью моделей, то по моему мнению наиболее продвинутым является пакет RandomUniformForest. В нем очень подробно рассмотрен вопрос важности предикторов с различных точек зрения. Рекомендую поизучать. В какой то своей статье я подробно рассказывал о нем.
Я отказался от использования модельного выбора предикторов. Ограничен особенностями используемой модели.
Удачи
Из Никоnенко С., Кадурин А., Архангельская Е. "Глубокое обучение" стр. 139.
Чтобы на валидации данные были той же природы, что и на данных обучения - нужно их перемешать между собой. Иначе там может оказаться случайный кусок тренда или флета. В результате будет не оценка модели на ее способность к обобщению, а подгонка под конкретный кусок непрерывной истории на valid участке (мы ведь по нему будем делать остановку).
Но, как написал выше, после экспериментов с разной инициализацией ГСЧ, в которых получались разные по удачности valid наборы, - пришел к выводу, что valid участок возможно и не нужен. Кроме него можно использовать др. методы регуляризации. Впрочем эти эксперименты были на малом количестве данных (5 дней), и если число примеров увеличить раз в 10, возможно перемешивание будет равномернее и данные на этих участках будут однороднее (т.е. одной природы) - в таком случае valid может быть полезен.
Обновление: В случае если данных очень много и в valid участок попадают несколько флетов и трендов обоих направлений, то в таком случе перемешивание с обучающим набором возможно и не нужно.Если говорить об оценивании предикторов с помощью моделей, то по моему мнению наиболее продвинутым является пакет RandomUniformForest. В нем очень подробно рассмотрен вопрос важности предикторов с различных точек зрения. Рекомендую поизучать. В какой то своей статье я подробно рассказывал о нем.
Я отказался от использования модельного выбора предикторов. Ограничен особенностями используемой модели.
Удачи
А я считаю что наиболее продвинутым является совсем другой продукт ;-).... В котором реализовано чуть по другому.
Две сети, где выборка делится на 2 под выборки train и test, где для сети Б (второго полинома), трейном является тест, а тест трейном. При этом считается исключительно выборка тест, где половину отрабатывает один полином, другую другой. Причём классы делятся равномерно. То есть единички разделили поровну на трейн и тест и соотвественно нули разделили тоже по ровну. И к сожалению никакого там времени нет. Файл можно подавать хоть как по упорядоченности векторов. Может быть в этом залог снижение оверфита???
Правда я не совсем понимаю, может быть говоря про участок валидации это и есть участок трейн в ЛЮБИМОМ мной оптимизаторе ???
А Вашем случае участок Тест является контрольный, когда мы даем сети поработать какое то время... Запутался в понятиях...
Во всяком случае считаю так, что участок тест никак не может влиять на участок тренировки и должен быть сформирован максимально рандомно, для задач классификации, где контрольный участок даже идя упорядоченным по времени не будет зависить от этого самого времени. Почему? Да потому что перемешав все данные мы стараемся выудить из этого набора реальный потенциал, а не удачное стечение обстоятельств в виде упорядоченности. Вообщем перемешивая данные вы реально видите на что они способны, эти данные... Как то так....
При неоднократной оптимизации результат должен прыгать в пределах 10-20% это как раз таки из за упорядоченности данных, один раз хорошо упорядочились, в другой раз чуть хуже и т.д.... ИМХО!!!
Из Никоnенко С., Кадурин А., Архангельская Е. "Глубокое обучение" стр. 139.
Чтобы на валидации данные были той же природы, что и на данных обучения - нужно их перемешать между собой. Иначе там может оказаться случайный кусок тренда или флета. В результате будет не оценка модели на ее способность к обобщению, а подгонка под конкретный кусок непрерывной истории на valid участке (мы ведь по нему будем делать остановку).
Но, как написал выше, после экспериментов с разной инициализацией ГСЧ, в которых получались разные по удачности valid наборы, - пришел к выводу, что valid участок возможно и не нужен. Кроме него можно использовать др. методы регуляризации. Впрочем эти эксперименты были на малом количестве данных (5 дней), и если число примеров увеличить раз в 10, возможно перемешивание будет равномернее и данные на этих участках будут однороднее (т.е. одной природы).
Обновление: В случае если данных очень много и в valid участок попадают несколько флетов и трендов обоих направлений, то в таком случе перемешивание с обучающим набором возможно и не нужно.Юношеский дух противоречий неукротим :)
Я говорил о классификации таймсерий. Например для М15 две недели на обучение приблизительно 1000 баров. Следующая неделя на валидацию - 500 баров. При обучении обучающий набор перемешиваем а валидационный нет.
Перемешивание всего набора перед разделением необходимо в двух случаях: стратифицированные наборы и кроссвалидация. И в этом случае семплирование нужно делать без замещения, для избежания попадания одинаковых примеров в оба набора.
Учитывая то, что у нас нет ограничений в количестве примеров и что все таки это таймсерии, лучше делить до перемешивания. ИМХО