Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 103
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Мне тоже интересно как в пакете foreca определяется зависимость входов и выхода. Может там тривиально, а может и нет.
Я лишь через строчку посмотрел, пусть меня поправят или подтвердят, но по моим представления пакет на основе некоторого внутреннего алгоритма оценивает предсказательную способность конкретной случайно величины, т.е. способность к эстраполяции своих значений случайной величины в будущее. Если это трендовый участок, то получим одно, а если это приращения цены, то и получим 0.83%, что для меня совершенно очевидно. И все дело в самом методе и на практике все обстоит с точностью до наоборот, так как приращения предсказываются гораздо лучше - они гораздо ближе к стационарности, чем тренды нестационарных временных рядов. Мы должны понимать сам инструмент и применять этот инструмент к объектам, к которым этот инструмент подходит.
Если говорить в общем, то есть ошибки системного анализа.
Ошибка №1.
Применение правильным методов к неправильно поставленной задаче.
В статистике чрезвычайно широко распространена.
Вообще мне кажется, что потеряна первоначальная мысль. По мне эта первоначальная мысль состояла в том, что необходимы методы, которые бы НЕ ЗАВИСИМО ОТ МОДЕЛИ определяли способность каждого из используемых предикторов предсказывать целевую переменную.
Пример отбора независимого от модели - пакет vtreat. Он как-то анализирует данные, а потом выставляет им оценку соответствия целевым значениям.
Для таблицы iris создаётся 10 новых предикторов со случайными значениями. designTreatmentsN оценит каждый предиктор, чем оценка ниже, тем лучше. В этом примере оригинальных 4 предиктора (последние на графике) явно выделяются, имеют почти нулевую оценку, что очень хорошо. При отборе предикторов нужно убирать первым делом то что имеет самые большие значения.
Если целевых значений всего 2 - (0/1, TRUE/FALSE, -1/1, фактор с 2 уровнями, итд..) то для специально такого случая есть функция designTreatmentsC
Ещё этот пакет использовался также в y-aware pca. Пакет vtreat шкалирует предикторы в y-aware интервал, а компоненты дальше создаются почти обычным образом (просто без повторного шкалирования и центрирования). То есть, если хочется, с помощью этого пакета можно делать такие интересные вещи как y-aware randomforest например.
Подробнее тут: https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html
Пример отбора независимого от модели - пакет vtreat. Он как-то анализирует данные, а потом выставляет им оценку соответствия целевым значениям.
Для таблицы iris создаётся 10 новых предикторов со случайными значениями. designTreatmentsN оценит каждый предиктор, чем оценка ниже, тем лучше. В этом примере оригинальных 4 предиктора (последние на графике) явно выделяются, имеют почти нулевую оценку, что очень хорошо. При отборе предикторов нужно убирать первым делом то что имеет самые большие значения.
Если целевых значений всего 2 - (0/1, TRUE/FALSE, -1/1, фактор с 2 уровнями, итд..) то для специально такого случая есть функция designTreatmentsC
Ещё этот пакет использовался также в y-aware pca. Пакет vtreat шкалирует предикторы в y-aware интервал, а компоненты дальше создаются почти обычным образом (просто без повторного шкалирования и центрирования). То есть, если хочется, с помощью этого пакета можно делать такие интересные вещи как y-aware randomforest например.
Подробнее тут: https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html
Ну, вот, возврат к истокам.
А теперь далее.
Использование любых моделей ТОЛЬКО после обработки для них этими пакетами. Надежда на то, что модели при такой предварительной обработке НЕ будут больны переобучением.
Применение правильным методов к неправильно поставленной задаче.
Про оценку выставляемую временному ряду с CaretFA я не осилил, в описании очень много формул. Я что-то уловил про корреляцию новых значений со старыми, и анализ графика частот после трансформации Фурье, анализ как этот график меняется на новых данных. Там нужно понимать больше в радиофизике чем в форексе :)
Есть примеры в описании пакета, где он применяется к индексам DAX, SMI, CAC, FTSE, используются именно приращения на D1, то есть и пакет, и задачи правильные.
Небольшой нюанс в том, что в примере временной ряд цен сначала обработан логарифмической функций log(), и только после этого найдены дельты. diff(log(EuStockMarkets[c(100:200),])) * 100
Но я не заметил разницы если использовать или не использовать log(), результат оценки не изменился, это было сделано скорее для более удобного отображения данных на графике.
Про оценку выставляемую временному ряду с CaretFA я не осилил, в описании очень много формул. Я что-то уловил про корреляцию новых значений со старыми, и анализ графика частот после трансформации Фурье, анализ как этот график меняется на новых данных. Там нужно понимать больше в радиофизике чем в форексе :)
Есть примеры в описании пакета, где он применяется к индексам DAX, SMI, CAC, FTSE, используются именно приращения на D1, то есть и пакет, и задачи правильные.
Небольшой нюанс в том, что в примере временной ряд цен сначала обработан логарифмической функций log(), и только после этого найдены дельты. diff(log(EuStockMarkets[c(100:200),])) * 100
Но я не заметил разницы если использовать или не использовать log(), результат оценки не изменился, это было сделано скорее для более удобного отображения данных на графике.
В отношении этого пакета для меня вопрос принципиальный:
В отношении этого пакета для меня вопрос принципиальный:
Связи между целевой переменной и предикторами он не ищет. Автор пакета пишет про два применения -
1) оценить временной ряд на то, прогнозируем ли он вообще (по шкале от 0% = "белый шум" до 100%=синусоида) функцией Omega(). Если результат 0%, то пытаться предсказать поведение временного ряда невозможно, какие бы предикторы не использовалась.
2) взять несколько предикторов, оценить их той-же функцией, создать новые предикторы похожим на pca образом дабы у новых предикторов результат Omega() был ещё выше чем у оригинальных. Поможет ли это лучше предсказывать целевые значения, или нет - это уж как повезёт, пакет не интересуется о том что именно нужно предсказать этими предикторами. Смысл как-бы в том, что если предиктор не шум - то модели с его использованием будут предсказывать стабильнее.
Связи между целевой переменной и предикторами он не ищет. Автор пакета пишет про два применения -
1) оценить временной ряд на то, прогнозируем ли он вообще (по шкале от 0% = "белый шум" до 100%=синусоида) функцией Omega(). Если результат 0%, то пытаться предсказать поведение временного ряда невозможно, какие бы предикторы не использовалась.
2) взять несколько предикторов, оценить их той-же функцией, создать новые предикторы похожим на pca образом дабы у новых предикторов результат Omega() был ещё выше чем у оригинальных. Поможет ли это лучше предсказывать целевые значения, или нет - это уж как повезёт, пакет не интересуется о том что именно нужно предсказать этими предикторами. Смысл как-бы в том, что если предиктор не шум - то модели с его использованием будут предсказывать стабильнее.
Вы предметно подтвердили мои подозрения.
Спасибо.
Я считаю, что пакет бесполезен для классификации.
Но для предсказания типа экстраполяции может быть полезен.
Например, возьмем пакет forecast. Он разлагает ряд на три составляющие, затем экстраполирует вперед и складывает. Получает прогноз на шаг или несколько вперед.
Теперь вопрос: какую валютную пару взять? Берем CaretFA и с его помощью вычисляем предсказательную способность нескольких валютных пар. Я подозреваю, что в ограниченном окне такая предсказательная способность меняется при движении окна. Выбрали валютную пару, предсказываем forecast (или другим пакетом - их полно), торгуем, после закрытия всех позиций снова выбираем валютную пару.
Пример отбора независимого от модели - пакет vtreat. Он как-то анализирует данные, а потом выставляет им оценку соответствия целевым значениям.
Для таблицы iris создаётся 10 новых предикторов со случайными значениями. designTreatmentsN оценит каждый предиктор, чем оценка ниже, тем лучше. В этом примере оригинальных 4 предиктора (последние на графике) явно выделяются, имеют почти нулевую оценку, что очень хорошо. При отборе предикторов нужно убирать первым делом то что имеет самые большие значения.
Если целевых значений всего 2 - (0/1, TRUE/FALSE, -1/1, фактор с 2 уровнями, итд..) то для специально такого случая есть функция designTreatmentsC
Ещё этот пакет использовался также в y-aware pca. Пакет vtreat шкалирует предикторы в y-aware интервал, а компоненты дальше создаются почти обычным образом (просто без повторного шкалирования и центрирования). То есть, если хочется, с помощью этого пакета можно делать такие интересные вещи как y-aware randomforest например.
Подробнее тут: https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html
смотрю я на ваш код с ирисами и рандомными предикторами и понимаю что программировать я вообще не умею, то что у меня занимало 10 строчек у вас уложилось в три....
а этот отбор по vtreat, он чем то отличается от того же importense встроенного в RF? имеется ввиду по эффективности
а этот отбор по vtreat, он чем то отличается от того же importense встроенного в RF? имеется ввиду по эффективности
Vtreat лучше. Он оценивает всё статистически, насколько в целом предиктор хорош/плох для предсказани целевой переменной, без подгонки под конкретную предсказательную модель. Рекомендуется использовать предикторы с оценкой не больше 1/(кол-во предикторов). Например если есть 200 предикторов - берём из них только те, у которых оценка меньше 1/200. Можно оценить предикторы, и если все оценки выше порога - вместо безуспешных попыток обучить модель и предсказать новые данные - лучше сразу просто начать искать другие предикторы.
Есть пара минусов - пакет работает с предикторами по одному, и не учитывает их взаимодействие. Ещё мне не нравится что при наличии даже полностью одинаковых, или высоко коррелирующих предикторов - vtreat не удалит повторяющиеся, иногда это очень мешает.