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

elibrarius:

Попробуйте как есть для кросс-валидации. В цикле 10 раз с разными неизвестными участками по 1/10 от общего количества данных. Это будет наилучшая оценка для выбора катбуста с какими то параметрами  или лассо с параметрами по умолчанию.

Бинаризация происходит по определенному методу оценки выборки, поэтому кросс валидация будет показывать лучше результат на участках основной выборки.

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

Сейчас фактически CatBoost у меня обучается на 60% от всех данных - по 20% идет контроль остановки и по последним 20% оценка модели.

Если говорить о 10% для обучения - то этого слишком мало для выборки.
Aleksey Vyazmikin:

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

Вы про какую-то стандартную/древнюю кросс валидацию пишете.
Во первых, не нужно перемешивать строки а брать блоками как есть 0-90 обучение 90-100 тест, потом 10-100 обучение, 0-10 тест, потом 20-100-10 обучение 10-20 тест и т.д..
Во вторых по совету Прадо надо оставлять пробел (pruning) между трейном и тестом, чтобы соседние примеры из трейна и теста не попали в работу. Пример из трейна соседний с 10-100 примерами из теста будет им подсказкой/подглядыванием. Подробнее тут https://dou.ua/lenta/articles/ml-vs-financial-math/
Или вот картинка:

Aleksey Vyazmikin:

Сейчас фактически CatBoost у меня обучается на 60% от всех данных - по 20% идет контроль остановки и по последним 20% оценка модели.

Если говорить о 10% для обучения - то этого слишком мало для выборки.
Можете 20% или сколько хотите.

И наконец вместо кроссвалидации можете применить валкинг форвард. Который не по кругу тестовый участок берет, а только впереди.
Машинное обучение против финансовой математики: проблемы и решения
Машинное обучение против финансовой математики: проблемы и решения
  • dou.ua
Всем привет! Так получилось, что я уже около семи лет занимаюсь машинным обучением. В последние несколько из них я как исследователь и CTO Neurons Lab часто работаю с финансовыми данными в рамках проектов, связанных с инвестиционным менеджментом и алгоритмическим трейдингом. Чаще всего клиенты приходят с текущими стратегиями, которые нужно...
Maxim Dmitrievsky

За что отвечает параметр shuffle? Обычно если он False, то результаты гораздо хуже, чем при True. 

train_test_split(X, y, train_size = 0.5, test_size = 0.5, shuffle=True)

Картинка с объяснением валкинг форварда.

[Удален]
Evgeni Gavrilovi:

За что отвечает параметр shuffle? Обычно если он False, то результаты гораздо хуже, чем при True. 

перемешивает примеры для трейн и тест, чтобы они последовательно не шли

Maxim Dmitrievsky:

перемешивает примеры для трейн и тест, чтобы они последовательно не шли

случайным образом? то есть как здесь указано? тест на случайной выборке 50% 

[Удален]
Evgeni Gavrilovi:

случайным образом? то есть как здесь указано? тест на случайной выборке 50% 

да, можно почитать в документации sklearn

проверил такое же (как в видео) на сезонной версии.. вроде, сильно не улучшает ничего

elibrarius:

Вы про какую-то стандартную/древнюю кросс валидацию пишете.
Во первых, не нужно перемешивать строки а брать блоками как есть 0-90 обучение 90-100 тест, потом 10-100 обучение, 0-10 тест, потом 20-100-10 обучение 10-20 тест и т.д..
Во вторых по совету Прадо надо оставлять пробел (pruning) между трейном и тестом, чтобы соседние примеры из трейна и теста не попали в работу. Пример из трейна соседний с 10-100 примерами из теста будет им подсказкой/подглядыванием. Подробнее тут https://dou.ua/lenta/articles/ml-vs-financial-math/
Или вот картинка:

Можете 20% или сколько хотите.

И наконец вместо кроссвалидации можете применить валкинг форвард. Который не по кругу тестовый участок берет, а только впереди.

Всё что Вы тут говорите мной и так используется в экспериментах.

Какая цель этих ухищрений, с дроблением выборки на куски, - нахождение куска, где закономерность, присущая всей выборке менее зашумлена. Чем меньше шума/более выраженных правил, способствующих классификации, тем лучше будет модель. Да, такой метод имеет право на жизнь, но его хорошо применять, когда известно, что предикторов, связанных с целевой больше, тем случайных и когда объем выборки достаточно велик, что бы вместить по возможности множество комбинаций предикторов между собой, а чем больше предикторов тем больше должна быть выборка. У меня выборки редко превышают 20к строк (100%), а предикторов уже более 2к, и очевидно что уже все комбинации не попадут просто в саму выборку и не будут учтены моделью, отсюда всегда будет Recall не более +-50%.

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

Aleksey Vyazmikin:

Всё что Вы тут говорите мной и так используется в экспериментах.

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

Нет - нахождение усредненных показателей модели (ошибка и т.п.) по всем тестовым кускам. Или суммы балансов.

Кросс валидация вам подойдет, если допустимо использование в качестве теста ранних строк.
Валкинг форвард, пожалуй уже нет. 20000 строк сложно поделить на много кусков, чтобы тест был впереди.

У вас нетипичная схема, так что особо и не посоветуешь что-то)
elibrarius:

Нет - нахождение усредненных показателей модели (ошибка и т.п.) по всем тестовым кускам. Или суммы балансов.

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

elibrarius:

Кросс валидация вам подойдет, если допустимо использование в качестве теста ранних строк.

Валкинг форвард, пожалуй уже нет. 20000 строк сложно поделить на много кусков, чтобы тест был впереди.

У вас нетипичная схема, так что особо и не посоветуешь что-то)

Использование ранних строк недопустимо по той причине, что по ним проходила оценка квантов - на 60% выборки. Тут всю процедуру оценки делать по отдельным кускам - но какой в этом смысл - глобально его нет.

Метод Lasso показал результат лучше, CatBoost - я конечно и на других потом выборках сравню, но судя по всему, он позволяет обобщить сильно разряженные бинарные предикторы, где единиц процентов 10-20%. Вот как это заставить работать на извлечения дохода - вопрос.