Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 2973
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Да, нет..
Тогда к чему был этот пустой разговор?
Тогда к чему был этот пустой разговор?
А он пустым будет в любом случаи
В общем да, если нет желания.
Грусно что машинное обучение с таргетами не работает и единоразовое обучение не работает...
убери симметричные признаки, чтобы уменьшить bias
например, приращения замени абсолютными приращениями (волатильность)
иногда помогает
убери симметричные признаки, чтобы уменьшить bias
например, приращения замени абсолютными приращениями (волатильность)
иногда помогает
Идея у меня в том, что бы получить модель, которая будет отбирать устойчивые квантовые отрезки по ряду статистических признаков. Всех желающих приглашаю в этот проект.
Что ж вы так залипли на эти кванты?...
В них вообще ничего интеллектуального нет. Просто делится например 10000 строк на 100 кусков, т.е. сортируем и идем снизу отсчитываем 100 строк, если последующие совпадают с сотой строкой (т.е. повторы), то то относим их все к первому куску. Дубли кончились начинаем набирать строки во второй квант - очередные 100 + дубли если есть. И.т. пока не кончатся строки.
Даже 1 дерево на порядки больше полезной информации содержит (т.к. обучено на данных), чем эти квантовые отрезки (просто 100 отсортированных строк с дублями).
Что ж вы так залипли на эти кванты?...
В них вообще ничего интеллектуального нет. Просто делится например 10000 строк на 100 кусков, т.е. сортируем и идем снизу отсчитываем 100 строк, если последующие совпадают с сотой строкой (т.е. повторы), то то относим их все к первому куску. Дубли кончились начинаем набирать строки во второй квант - очередные 100 + дубли если есть. И.т. пока не кончатся строки.
Даже 1 дерево на порядки больше полезной информации содержит (т.к. обучено на данных), чем эти квантовые отрезки (просто 100 отсортированных строк с дублями).
Квантовые отрезки - это кирпичики из которых строится модель CatBoost. Изначально, как я понял, таким способом решался вопрос экономии памяти и в целом ускорения вычислений. Побочным приобретением является сокращения вариантов комбинаций показателей предикторов, делается шаг в сторону снижения мультиколлинеарности, что в целом способствует скорости и качеству обучения. Плюс, отчасти, решается проблема дрейфа данных.
Я же вижу прок и в другом - исследование потенциала вероятностной оценки в данных квантового отрезка. Если взять предложенный Вами метод квантования (на самом деле лучше представить, что целью процесса - является отсеивание однородных групп - аналог - кластеризация), и разбить данные на 20 равномерных квантовых отрезка по числу примеров, то окажется, что в каждом квантовом отрезке осталось всего 5% данных. CatBoost по умолчанию создает 254 разделителя - 255 отрезков. Потом из этих отрезков строятся деревья. Предполагается, что все квантовые отрезки одинаково полезны, и их взаимоположение следует определить путем разбиение группы на подгруппы, методом построения дерева решения. Разбиение происходит как по корневому, так и по другим предикторам. Даже если берём одно дерево, то сколько из первоначальных примеров позитивного класса "1" останется в конечном листе через 6 сплитов? При этом надо учитывать, что отбор сплита происходит по метрикам совокупного числа квантовых отрезков. Учитывая сам метод построения дерева, становится очевидным, что чем качественнее будет сделано разбиение предиктора на квантовые отрезки, тем меньше потребуется сплитов для достижения той же точности в листе. Отмечу - что каждый сплит - гипотеза, а все гипотезы не могут быть верными. Так вот, если мы делаем разбиение с учетом потенциала квантового отрезка принадлежать в большей степени одному из классов, то мы сокращаем число сплитов для достижения схожей точности, а значит и снижаем число потенциально ложных гипотез (сплитов). Кроме того, если можно сразу разделить предиктор на глобальные 3 области - две по принадлежности к классу и одну к неопределенности, то модели в среднем будут меньше и с лучшими статистическими показателями - ожидаю, что и более устойчивыми.
К примеру, представим, что предиктором является осциллятор RSI - существенные действия участников происходят вокруг уровней 70, 50, 30 - всё что за пределами - допустим, не влияет на принятие решений участниками рынка. Тогда разумно построить квантовую таблицу таким образом, что бы отделить эти 3 значения от остальной совокупности. Иначе случайным образом на одном из сплитов окажется больше примеров в квантовом отрезке принадлежности к классу и получится ложное правило на ложной гипотезе.
Можете построить столбиковую диаграмму с отквантованными показателями предикторов и провести кривую вероятностей принадлежности к классу "1" для каждого столбца. Если кривая будет скорей прямой, то такой предиктор я бы отправил на скамейку запасных. У хорошего, по моему мнению, предиктора будет или наклонная линия или же всплески на некоторых столбцах.
Можно говорить, что через квантование я ищу дискретные события, влияющие на вероятность движения цены.
Правило как раз и разделит
Есть разные способы создания квантовой таблицы. Думаю, действительно, можно и через готовый пакет, который строит деревья на одном предикторе с заданными ограничениями в листе по проценту примеров. Что это за пакет и как получить данные в нужном мне формате - я не знаю.
Важным является не просто разбиение, а поиск критериев оценки этого квантового отрезка, которые повысят вероятность того, что принадлежность к классу сохраниться на новых данных.
Почему этим занимаюсь - потому что в этом ключ к построению качественной модели.
Почему долго - много экспериментов, тестовых скриптов. Вот немного разобрался с OpenCL и код теперь частично на видеокарте считается - для этого требуется время - многое приходится изучать.
Важным является не просто разбиение, а поиск критериев оценки этого квантового отрезка, которые повысят вероятность того, что принадлежность к классу сохраниться на новых данных.
Вы хоть раз на код в том же катбусте смотрели? Вы же им пользуетесь. Он не пользуется сторонними пакетами. А вот такой маленькой функцией (она даже проще того что я описал, не смещает точку разделения на количество дубликатов).
Написал комментарии того, что приосходит. На вход подается отсортированный столбец.
Как видите все очень просто и ничего интеллектуального тут нет - просто отсчитываем например 100 строк и всё.
Чуть более сложные варианты могут смещать на число дубликатов, еще можно оптимизировать размер квантов (например если из 10000 строк 9000 дубликаты, то по простой функции будет 11 квантов: 10 от первой 1000 строк и в 11-м остальные 9000 дублей, а можно первые 1000 строк разделить на 99 квантов + 1 квант с 9000 дубликатами).
Но и у них ничего интеллектуального - в основе тот же простой отсчёт нужного числа строк.
Оригинал (там же есть варианты посложнее) https://github.com/catboost/catboost/blob/3cde523d326e08b32caf1b8b138c2c5303dc52e5/library/cpp/grid_creator/binarization.cpp
П.с. Основная причина, почему в очередном кванте не ровно 100 строк, а 315 или 88 или 4121 - не в какой то супер хитрой формуле (где строки объединяются по предсказательной способности, которой вы хотите делать поиск критериев оценки этого квантового отрезка ), а просто в числе дубликатов.Поизучайте недельку функции с этой страницы и сэкономите несколько лет.