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

 
Aleksey Vyazmikin:

На рисунках показан финансовый результат(ось y) модели при выборе разной вероятности для бинарной классификации (ось x). На тестовой выборке у меня получилось, что входить в рынок надо всегда при появлении активационного (обучение решает вопрос - входить в рынок или нет) сигнала. Получился парадокс такой, что обучение только ухудшает базовый активационный сигнал и я бы этого не увидел, если бы не решил посмотреть как меняется финансовый результат от смещения точки классификации на отрезке вероятности.

У нас совсем разный подход к проблеме. Мне чуждо чисто математическое описание цены без вещественных(визуально наблюдаемых закономерностей) обоснований. Напротив, я применяю ZZ и вижу эффективность от этого (педикторы на ZZ всегда в первых рядах во всех пакетах МО). Думаю, что объединение двух подходов могло бы улучшить результат.

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

ну как, импортанс надо смотреть на тестовой выборке, а фитить на обучающей. Классически встроенный импортанс типа gini всегда врет, обязательно нужно делать permutation (последовательно рандомизировать каждый из пердикторов и смотреть ошибку модели), потом самые хреновые выкидывать. Предварительно надо избавляться от коррелированных фичей, иначе импортанс через перестановку тоже будет врать. Никакой ерунды не получается, получается наилучшая из возможных моделей. Зачем придумывать велосипед если пока лучше ничего не придумали.

 
Aleksey Vyazmikin:

Выглядит не плохо, но период работы модели слишком мал, как она себя ведет на данных годичной давности?

15-минутки, просто не обучаю дольше потому что ждать дольше

разные модели ведут себя по разному, конкретно эта не очень хорошо.. сделать такой ровный график на 15-минутках ООС за несколько лет, наверное, только fxsaber может :)

у меня безыдейный лернинг, т.е. в модель вообще никакой стратегии не закладывается изначально
 
Aleksey Vyazmikin:

Вот смотрю на график зависимости прибыли от числа деревьев в модели (512 моделей)

и выходит вроде как модели с большим числом деревьев за 60 реже сливают или же выборка маленькая...

Вот другие графики с разным числом деревьев.

Выборка 7400 для всех, алгоритм rf

Число деревьев 50


Ошибка падает при росте количества деревьев. Казалось бы надо увеличивать, вдруг до нуля.

Число деревьев = 150


при 150 точность растет, но весьма скромно - пару сотых

Увеличим еще количество деревьев




Вывод: до 50 деревьев еще есть смысл увеличивать число деревьев, а вот более 100 особого смысла нет.

Сейчас лень делать, но я менял размер выборки.

Размер выборки до 1000 наблюдений сильно влияет на точность модели. А вот после 5000 размер выборки НЕ влияет на точность моделирования.


Отсюда я делаю вывод: ошибка определяется НЕ моделью или ее параметрами, а связкой "предикторы- целевая". 

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

Увеличим еще количество деревьев

Отсюда я делаю вывод: ошибка определяется НЕ моделью или ее параметрами, а связкой "предикторы- целевая". 

50-100 деревьев рекомендуемые изначально, больше смысла нет никакого плодить столько слабых классификаторов, тоже улучшений не наблюдал

монте-карло и иже с ними в помощь, СанСаныч.. конструировать связки не человеческого ума дело, это просто е.. мозгов
 
Maxim Dmitrievsky:

ну как, импортанс надо смотреть на тестовой выборке, а фитить на обучающей. Классически встроенный импортанс типа gini всегда врет, обязательно нужно делать permutation (последовательно рандомизировать каждый из пердикторов и смотреть ошибку модели), потом самые хреновые выкидывать. Предварительно надо избавляться от коррелированных фичей, иначе импортанс через перестановку тоже будет врать. Никакой ерунды не получается, получается наилучшая из возможных моделей. Зачем придумывать велосипед если пока лучше ничего не придумали.

Честно говоря не понял метод - речь идет о пошаговом отключении предикторов из обучения и сопоставлении результатов с этим предиктором и без него? Тогда что значит рандомизировать? Как решить - хреновый или нет - если предиктор позволяет разбить верно 1% выборки и находится на средней глубине дерева - то хорош или плох он? Может как раз надо учитывать качество построения дерева с корневым предиктором, как оно на каждом уровне режет выборку - может нужен плавный спад градиента... Велосипед приходится придумывать, так-как то, что в открытом доступе не есть лучшее из того, что существует, вот к примеру может надо добиваться разделения выборки не максимуму а по средней или по х сигмам или ещё как - может будут правила сложней, но устойчивей. Кстати, вот не пойму, почему нет метода обучения, который бы использовал не только числовые счетчики для сплитов, но и логические, сравнивая между собой предикторы?

Maxim Dmitrievsky:

15-минутки, просто не обучаю дольше потому что ждать дольше

разные модели ведут себя по разному, конкретно эта не очень хорошо.. сделать такой ровный график на 15-минутках ООС за несколько лет, наверное, только fxsaber может :)

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

А не пробовали как раз заложить примитивную стратегию и обучать как бы фильтры для неё, которые одобряют или запрещают вход в рынок?

 
Aleksey Vyazmikin:

Честно говоря не понял метод - речь идет о пошаговом отключении предикторов из обучения и сопоставлении результатов с этим предиктором и без него? Тогда что значит рандомизировать? Как решить - хреновый или нет - если предиктор позволяет разбить верно 1% выборки и находится на средней глубине дерева - то хорош или плох он? Может как раз надо учитывать качество построения дерева с корневым предиктором, как оно на каждом уровне режет выборку - может нужен плавный спад градиента... Велосипед приходится придумывать, так-как то, что в открытом доступе не есть лучшее из того, что существует, вот к примеру может надо добиваться разделения выборки не максимуму а по средней или по х сигмам или ещё как - может будут правила сложней, но устойчивей. Кстати, вот не пойму, почему нет метода обучения, который бы использовал не только числовые счетчики для сплитов, но и логические, сравнивая между собой предикторы?

А не пробовали как раз заложить примитивную стратегию и обучать как бы фильтры для неё, которые одобряют или запрещают вход в рынок?

сначала обучаете модель на всех фичах, сохраняете ошибки

затем, последовательно, рандомизируете каждый из предикторов, допустим нормальным распределением, и чекаете ошибку опять на всех фичах, включая этот рандомизированный (измененный), сравниваете с исходной. Переобучать модель при этом не нужно. И так проверить каждый из предикторов. Если предиктор был хороший, ошибка на всей выборке (включая все остальные исходные предикторы) резко увеличится по сравнению с исходной. Сохранить разницы ошибок, отсеять по ним наилучшие фичи. Затем, в конце, обучиться только на лучших и модель в продакшн. Плохие предикторы это шум для модели, нафиг они нужны со своим 1%. Хороших обычно остается штук 5-10, важность остальных убывает по экспоненте (закон Ципфа)

пробовал фильры обучать, но немного, не вижу большого смысла, лучше сразу в одну модель все закладывать

если осилите, как раз про отбор предикторов ОЧЕНЬ грамотно (уже кидал ранее)

Beware Default Random Forest Importances
Beware Default Random Forest Importances
  • explained.ai
0.995 worst radius 0.995 mean perimeter 0.994 mean area 0.984 worst perimeter 0.983 worst area 0.978 radius error 0.953 mean concave points 0.944 mean concavity 0.936 worst concave points 0.927 mean compactness 0.916 worst concavity 0.901 perimeter error 0.898 worst compactness 0.894 worst texture 0.889 compactness...
 
СанСаныч Фоменко:

Вот другие графики с разным числом деревьев.

Выборка 7400 для всех, алгоритм rf

Число деревьев 50


Ошибка падает при росте количества деревьев. Казалось бы надо увеличивать, вдруг до нуля.

Число деревьев = 150


при 150 точность растет, но весьма скромно - пару сотых

Увеличим еще количество деревьев




Вывод: до 50 деревьев еще есть смысл увеличивать число деревьев, а вот более 100 особого смысла нет.

Сейчас лень делать, но я менял размер выборки.

Размер выборки до 1000 наблюдений сильно влияет на точность модели. А вот после 5000 размер выборки НЕ влияет на точность моделирования.


Отсюда я делаю вывод: ошибка определяется НЕ моделью или ее параметрами, а связкой "предикторы- целевая". 


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

 
Maxim Dmitrievsky:

сначала обучаете модель на всех фичах, сохраняете ошибки

затем, последовательно, рандомизируете каждый из предикторов, допустим нормальным распределением, и чекаете ошибку опять на всех фичах, включая этот рандомизированный (измененный), сравниваете с исходной. Переобучать модель при этом не нужно. И так проверить каждый из предикторов. Если предиктор был хороший, ошибка на всей выборке (включая все остальные исходные предикторы) резко увеличится по сравнению с исходной. Сохранить разницы ошибок, отсеять по ним наилучшие фичи. Затем, в конце, обучиться только на лучших и модель в продакшн. Плохие предикторы это шум для модели, нафиг они нужны со своим 1%. Хороших обычно остается штук 5-10, важность остальных убывает по экспоненте (закон Ципфа)

пробовал фильры обучать, но немного, не вижу большого смысла, лучше сразу в одну модель все закладывать

если осилите, как раз про отбор предикторов ОЧЕНЬ грамотно (уже кидал ранее)

Спасибо. Рандомизировать надо теми же значениями, что были у предиктора на выборке, правильно понимаю?

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

Увы, осилить не смогу, поэтому послушаю, пересказ из Ваших уст по случаю.

Правда вот думаю, что опять же это не совсем верно, так-как будет всё зависеть от того, как близко к корню расположен предиктор в дереве...
 
Aleksey Vyazmikin:

Спасибо. Рандомизировать надо теми же значениями, что были у предиктора на выборке, правильно понимаю?

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

Увы, осилить не смогу, поэтому послушаю, пересказ из Ваших уст по случаю.

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

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

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

Важное условие: пердикторы не должны коррелировать, иначе получится белиберда с ошибкам.. Для этого я трансформировал сначала через PCA, но можно составить корреляционную матрицу и убрать все сильно коррелирующие. Есть и другой механизм, но там сложно
 
Maxim Dmitrievsky:

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

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

Если просто шум, тогда мы сломаем вообще сплит, к примеру там разделение с правилом "больше 100", а мы запихаем рандом от 0 до 99, то дальнейшее разбиение будет уже не активно, а ведь наверное важно посмотреть, как будет дальнейшее разбиение работать при выпадении одного из правил листа...

Причина обращения: