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

 
Aleksey Nikolayev #:

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

Правильно поняли - проводить какие либо действия для того, что бы выборка train больше была похожа на выборку exam.

Вопрос в том, как это лучше тогда делать.

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

 
Aleksey Vyazmikin #:

Правильно поняли - проводить какие либо действия для того, что бы выборка train больше была похожа на выборку exam.

Вопрос в том, как это лучше тогда делать.

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

У Владимира было в статье про это, не помню как назывался тот пакет, но он как раз выкидывал не прогнозируемые строки из выборки
 
mytarmailS #:
У Владимира было в статье про это, не помню как назывался тот пакет, но он как раз выкидывал не прогнозируемые строки из выборки

Интересно, надо будет поискать. Но, я то хочу выкидывать не то, что не прогнозируемые, а те, что не встречаются в выборке вне обучения. Даже интересно их как то пометить конечно, а не просто выкинуть - идентифицировать.

 
Aleksey Vyazmikin #:

Интересно, надо будет поискать. Но, я то хочу выкидывать не то, что не прогнозируемые, а те, что не встречаются в выборке вне обучения. Даже интересно их как то пометить конечно, а не просто выкинуть - идентифицировать.

Возможно, речь об удалении выбросов в наблюдениях, которые могут быть двух типов - по величине ответа и по величине предикторов (могут оба совмещаться в одном наблюдении). Собственно выбросами называются первые, а вторые обычно называются как-то по другому. Эта наука хорошо проработана для линейной регрессии. Наверное, можно каждое наблюдение из test проверить не является ли оно выбросом в каком-то смысле относительно exam.

 
Aleksey Vyazmikin #:

Интересно, надо будет поискать. Но, я то хочу выкидывать не то, что не прогнозируемые, а те, что не встречаются в выборке вне обучения. Даже интересно их как то пометить конечно, а не просто выкинуть - идентифицировать.

Можно через деревяные модели.. 
Разшыть модель на правила,  проанализировать правила по нужной статистике(повторяемость еще что то..) , посмотреть появляеться ли правило на новых данных..

Пакет "intrees"  5 строчек кода и вперед
 
mytarmailS #:
У Владимира было в статье про это, не помню как назывался тот пакет, но он как раз выкидывал не прогнозируемые строки из выборки

Пакет NoiseFiltersR. Посмотрите статью

 
elibrarius #:
Самое оптимальное метапараметры выбирать не по одному участку test, а на нескольких склеенных собранных кросс валидацией или валкинг форвардом. Недавно обсуждали.

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

например, на выходе такая таблица

        iterations      test-Logloss-mean       test-Logloss-std        train-Logloss-mean      train-Logloss-std
0       0       0.689013        0.005904        0.681549        0.007307
1       1       0.685340        0.011887        0.660894        0.001061
2       2       0.685858        0.012818        0.641069        0.004738
3       3       0.685975        0.023640        0.629656        0.000656
4       4       0.686613        0.024923        0.612977        0.002072
...     ...     ...     ...     ...     ...
95      95      0.863043        0.402531        0.123702        0.028628
96      96      0.866321        0.406193        0.122224        0.028623
97      97      0.869681        0.409679        0.120777        0.028611
98      98      0.873030        0.413121        0.119361        0.028595
99      99      0.874569        0.419064        0.117974        0.028572
 
Vladimir Perervenko #:

Пакет NoiseFiltersR. Посмотрите статью

Если с шумовыми предикторами всё более-менее понятно, то с шумовыми примерами не очень. Хотелось бы узнать побольше о способах их определения (в смысле теории, а не названий используемых пакетов/функций, хотя конечно в R всегда есть ссылки на статьи). Понятно, что при классификации должен быть класс "не торговать", поскольку стремление всё время быть в рынке считается ошибкой. Но не очень понятно как корректно описать этот класс в более-менее формальном виде.

 
Maxim Dmitrievsky #:

А как правильнее потом использовать результаты CV?

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

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

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

На всём датасете - нелогично.
Какую наилучшую глубину истории получил - на такой же и дальше обучаться. У меня модель обученная N раз по 50000 строк М5 (почти год) может показывать 52% на сумме всех форвардов , если обучать со всеми теми же параметрами и с отличием только в глубине истории, т.е. на 70000 или 30000 строках, то будет уже менее 50% на сумме всех форвардов.

Причина в том, что в листья будут попадать не те же самые примеры. Деревья могут больше или меньше листьев иметь и т.п. Думаю, что для разных по размеру датасетов надо менять глубину или число примеров в листе.

 
elibrarius #:

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

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

На всём датасете - нелогично.
Какую наилучшую глубину истории получил - на такой же и дальше обучаться. У меня модель обученная N раз по 50000 строк М5 (почти год) может показывать 52% на сумме всех форвардов , если обучать со всеми теми же параметрами и с отличием только в глубине истории, т.е. на 70000 или 30000 строках, то будет уже менее 50% на сумме всех форвардов.

Причина в том, что в листья будут попадать не те же самые примеры. Деревья могут больше или меньше листьев иметь и т.п. Думаю, что для разных по размеру датасетов надо менять глубину или число примеров в листе.

Ну, по моему мнению, cv нужна для оценки качества датасета, а не робастности конкретной модели. Если средняя ошибка на к-фолдах приемлемая, можно потом на этом датасете обучить модель и она тоже будет неплохой. Можно позаимствовать параметры усреднённые из моделей, использованных для cv.
Причина обращения: