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

 
elibrarius:

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

Это ясно, что в соответствии с алгоритмом, а какой алгоритм правильный? Только в CatBoost имеется 3 алгоритма для построения сетки.

elibrarius:

Проще всего обучить 24 стандартных леса/бустинга, на каждый подавая предикторы соответствующего часа.

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

 
Aleksey Vyazmikin:

Это алгоритм, который проверяет диапазон значений предиктора на предсказательную способность и пытается разбить участки диапазона таким образом, что бы они лучше выделяли способность предсказания. Допустим есть выборка с 3 целевыми, выборка распределяется так 1 - 24%, 2 - 50%, 3 - 26%, и есть некий предиктор с диапазоном значений, так вот цель сетки найти участки значений предикторов где, допустим целевая 1 будет "предсказываться" не 24%, а больше, и сплитом будет выделен этот участок. Варианты алгоритмов построения таких сеток есть разные.

Интересная идея, но не проще ли сделать так?..

п.1) Есть у нас какой то алгоритм маш. обуч. МО

п.2) есть выборка , которая поделена на трейн и тест

п.3) есть цена, которая кластеризирована по какому то принципу  (время,графический паттерн, все вместе , что то еще.. ...)    (это можно воспринимать как состояние рынка или просто кластер )

пс. кластеров должно быть много или оч. много


алгоритм действий :

1) Обучаем МО на трейне

2) пол ученой моделью предсказываем тест

3) на тесте выделяем те точки которые модель предсказала без ошибок , назовем их  ХТ (хорошая точка)

4) каждая ХТ соответствует какому то кластеру из п.3 выше..

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


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

 
mytarmailS:


п.3) есть цена, которая кластеризирована по какому то принципу  (время,графический паттерн, все вместе , что то еще.. ...)    (это можно воспринимать как состояние рынка или просто кластер )

пс. кластеров должно быть много или оч. много

Тут не понял, Вы предлагаете взять голую цену точек разметки целевых и их кластерелизовать или как?


mytarmailS:


3) на тесте выделяем те точки которые модель предсказала без ошибок , назовем их  ХТ (хорошая точка)

4) каждая ХТ соответствует какому то кластеру из п.3 выше..

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

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

 
Aleksey Vyazmikin:

Это ясно, что в соответствии с алгоритмом, а какой алгоритм правильный? Только в CatBoost имеется 3 алгоритма для построения сетки.

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

Какая разница, где вы сократите выборку? Снаружи, сделав 24 леса или внутри, например добавив первые 24 узла с разделением по часам? От этих 24 узлов в каждую оставшуюся ветку уйдет 1/24-я часть выборки.

 
Кстати, что мне не нравится в бустингах, это то, что рекомендованная глубина дерева 7-10.
Т.е. если мы имеем 100 предикторов, и деление там тоже начинается с середины каждого предиктора. То с большой вероятностью мы будем иметь 7 разных предикторов поделенных посередине. Может быть 1 или 2 поделятся до четверти, вряд ли мельче.
Или в бустинговых алгоритмах не половинным делением алгоритм работает, а более мелкими кусочками? Кто-то знает?
И кто какую глубину дерева использует?
 
elibrarius:

Какая разница, где вы сократите выборку? Снаружи, сделав 24 леса или внутри, например добавив первые 24 узла с разделением по часам? От этих 24 узлов в каждую оставшуюся ветку уйдет 1/24-я часть выборки.

Дело не в сокращении, а в статистике поведения предиктора на выборке вне сплита - это должно снизить случайность отбора значения предиктора.

Кстати, АлгЛиб сетку делает на каждом сплите или один раз и потом пользуется этой сеткой? Как я понял, разработчики CatBoost утверждают, что сетка делается один раз у них.

 
Aleksey Vyazmikin:

Тут не понял, Вы предлагаете взять голую цену точек разметки целевых и их кластерелизовать или как?

Целевая ваша, любая.. я немного рвано обяснил....

кластера нужны только для одной цели:


Вот мы нашли ХТ на тестовых новых , и приняли их как хорошие..

Теперь на новых данных нам надо найти эту ТХ чтобы применить к ней модель, так как модель хорошо работает только на ХТ, а как мы ее распознаем на новых данных? как вариант по номеру кластера

 
Aleksey Vyazmikin:

В целом, я согласен про взаимокомпенсацию разнонаправленных сигналов, но для этого в моем случае нужно применять разные стратегии, и под каждую делать разметку - это другая песня, но я планирую и это применять.

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

Доведу идею до некоторого логического завершения. Пусть у нас имеется набор систем на одном активе. Каждая система, когда находится в рынке, держит позицию фиксированного объёма, но направление может меняться. Доходности и волатильности стратегий известны. Определим корреляцию между стратегиями формулой (t1-t2)/sqrt(T1*T2), где T1 и T2 длительность времени их пребывания в рынке, t1 и t2 - длительность времён, когда эти стратегии одновременно в рынке и направлены, соответственно, одинаково и противоположно. Это упрощённая формула, выведенная в предположении о близости цены к СБ. Теперь есть все данные для применения теории Марковица для нахождения оптимального портфеля.

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

1) Менять алгоритм оптимизации (ограничения на параметры, штрафы). Уточнять определение корреляции между стратегиями.

2) Оптимизировать портфель уже в момент построения стратегий. То есть искать стратегии исходя из условия оптимальности портфеля на них. Не вполне понятно, как это можно формализовать практически применимым способом, но подход кажется более логичным в целом. Хотя, как вы уже писали, потребуется переписывание алгоритмов и тд и тп. Не факт, что овчинка стоит выделки

 
Aleksey Vyazmikin:

Дело не в сокращении, а в статистике поведения предиктора на выборке вне сплита - это должно снизить случайность отбора значения предиктора.

Кстати, АлгЛиб сетку делает на каждом сплите или один раз и потом пользуется этой сеткой? Как я понял, разработчики CatBoost утверждают, что сетка делается один раз у них.

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

Один раз обучает. Дообучения нет. Для деревьев/лесов дообучения вроде вообще нет, видимо из за того, что заново обучить достаточно быстро.
И почему сетку? В деревьях узлы и листья.

 
elibrarius:
Кстати, что мне не нравится в бустингах, это то, что рекомендованная глубина дерева 7-10.
Т.е. если мы имеем 100 предикторов, и деление там тоже начинается с середины каждого предиктора. То с большой вероятностью мы будем иметь 7 разных предикторов поделенных посередине. Может быть 1 или 2 поделятся до четверти, вряд ли мельче.
Или в бустинговых алгоритмах не половинным делением алгоритм работает, а более мелкими кусочками? Кто-то знает?
И кто какую глубину дерева использует?

 

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