Блог им. Eth_algotrader

Новый взгляд на проблему переподгонки

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

Зачем люди растят сложность и переобучают модели? Чтобы избавиться от лосей. Вот была простая, условно пробойная, система, которая забирала все крупные движения рынка, но за компанию ловила много лосей:
Новый взгляд на проблему переподгонки

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

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

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

Они сразу бросились бы в глаза, если бы наши данные были размечены, как в машинном обучении, и тогда пропуск тренда считался бы такой же (на самом деле — еще более дорогой, ведь у трендовых систем всегда большие профиты и мелкие лоси) ошибкой, как и стоп-лосс. И мы бы увидели, что добились роста precision (винрейта) при сильной потере recall (число взятых профитов). Или, в терминах матрицы ошибок, подняли специфичность (способность различать лоси, или ошибки 1-го рода) за счет падения чувствительности (способности не упускать профиты, что является ошибкой 2-го рода). Что, вероятно, говорит о переобучении, потому что если трендовая модель не берет тренды, то, скорее всего, она потеряла обобщающую способность.

Такой подход мог бы помочь выявить, что не все сложные модели являются переобученными (и не все простые — эффективными). Было бы интересно проверить им, например, модели Майтрейда))
★3
28 комментариев
а если запустить систему с подстраивающимися параметрами в зависимости от состояния рынка?..

avatar
wistopus, ну к этому почти все рано или поздно приходят. В том или ином виде.

Но это ничего не меняет. Модель все равно будет брать какой-то % лосей от общего числа. И какой-то % профитов. И ее можно будет оценивать по этим критериям.
avatar
wistopus, чтобы подстраивать параметры, надо сначала разобраться, когда и как меняются эти самые параметры. Для этого надо выйти на мат. модель. А на модель выходят единицы, ввиду усвоения правильных Знаний. А выйдя на модель, можно и ручками торговать, расчеты то уже есть.
P.S. — с индикаторами (строящие модель) естественно удобнее и быстрее.
avatar
Сразу бросается в глаза переподгонка-подгонка

Упование на то, участков типа (А) будет больше чем (В). Или «тренды» с углом 45 встретятся чаще «трендов» под 10 градусов. Или волатильность сохранится на уровне (n) в будущем. итд.

avatar
22022022, как раз в первом варианте переподгонка фильтров отсутствует, потому что нет фильтров :))) Система просто берет все подряд, что проходит базовые условия. Для некоторых систем это означает быть всегда в рынке.
avatar
Eth_algotrader, 
Система просто берет все подряд, что проходит базовые условия. Для некоторых систем это означает быть всегда в рынке
опять таки влезу...
а не надо все время быть в рынке — энто просто экономически не выгодно..

avatar
wistopus, всегда в рынке — это же не обязательно всегда лонг. Есть переворотные системы, которые всегда в рынке. То лонг, то шорт. И на удивление прибыльны на дистанции (на сильно трендовых активах, конечно же).
avatar
Eth_algotrader, 
То лонг, то шорт
как говорил мне Сумашедший Квант, который собаку съел во время своего трейдерства тогда еще по месту своего проживания....
— шортить в капиталистической России под такие проценты — энто забесплатно кормить своего брокера...
avatar
wistopus, значит, первым параметром торговой стратегии является место проживание трейдера)))
avatar
wistopus, можно фьючерсы продавать на базовый актив.
avatar
Eth_algotrader, торгуйте модель, она на рынке одна. И во время тренда, и во время флета.
avatar
Matrica, поделитесь?
avatar
Eth_algotrader, если убрать все циферки, то визуально получите модель. Или модель в модели, т.к.процесс на рынке непрерывный. А вот как искать эти правильные пропорции (они не в процентах считаются), каждый докумекивает сам.



avatar
Сама разметка уже элемент подгонки. 
avatar
SergeyJu, ну да. Поэтому правильнее было бы здесь говорить о проблеме переподгонки фильтров.
avatar

1. С точки зрения метрик качества модели, в трейдинге можно забить на ложно отрицательные. Тем на рынке дофига, рынков дофига, всего дофига, умеешь хорошо говорить «вот щас точно оно», даже если мимо вагонами пролетают упущенные возможности — этого более чем достаточно для заработка.

2. Ложно отрицательные  как мера робастности и переподгонги. Идея интересная, но не думаю, что там что-то есть. Детали раскрывать не буду). 

avatar
Replikant_mih, 1. в том и дело, что с точки зрения метрик качества. Вот человек смотрит на свои метрики. Они растут. Он добавляет еще фильтров. Они снова растут. С этой точки зрения все действительно будет прекрасно! :)) А модель, тем временем, перестала полноценно брать то, на что она заточена, даже на истории… Чего уж говорить о будущем!

2. Против секретных аргументов у меня есть только секретные контраргументы, так что я тоже не буду их раскрывать! :)))

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

Eth_algotrader, 
1. Робастность модели и метрики качества (обычно это трейдерские — PF, winrate и т.д.) на бою, на OOS или где угодно — для меня это две разные вещи. Метрики качества — по сути это метрики в моменте, а робастность — про то, с какой вероятностью ты такие метрики сможешь в будущем увидеть :).

 

2. Технично обсудили)).

 

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

 

«Пару раз замечал» обычно путь к подгонке. Ну вернее стриггерить рисёч можно и «пару разами», но понимать что работает, что нет — через рисёч, ну или хотя бы расширить «пару раз» до большего кол-ва раз.

avatar
Replikant_mih, меня метрики вне контекста робастности интересуют крайне мало.

стриггерить рисёч можно и «пару разами», но понимать что работает, что нет — через рисёч, ну или хотя бы расширить «пару раз» до большего кол-ва раз.

Пару раз это и есть пару рисерчей, а не пару случаев. Потому что каждый такой раз состоял из >1000 наблюдений (сделок).
avatar
Концептуально я сейчас предпочитаю простые системы с минимальным числом параметров. Желательно побольше и на разных активах. Тогда можно строить метасистему их включения/выключения или даже раздачи весов. 
А вот использование того, что принято называть фильтрами при проектировании систем я так и не смог приспособить к делу. Когда-то даже воспроизвел с очень высокой точностью фильтры А.Г. с его активной помощью. Но и им применения не нашел. 
avatar
SergeyJu, я думаю, это самый правильный и надежный подход. У меня почему-то само собой получается так, что мне всегда проще и интереснее допиливать какую-то одну систему. Очень много времени ушло, чтобы избегать при этом переподгонки. 

Но в любом случае надо диверсифицироваться конечно.
avatar
Всегда думалось, что системы сначала по ошибкам первого рода надо оценивать. Если у вас пойманные тренды в сумме дают меньше, чем она теряет от этих ошибок, то до ошибок второго рода не доходит дело. Система плохая.
А мерить систему по соотношению ошибок первого и второго рода стоит, если после применения фильтров она по-прежнему берёт ВСЕ тренды, определённые ею без фильтров. Только меньшую долю тренда.
avatar
svgr, Если у вас пойманные тренды в сумме дают меньше, чем она теряет от этих ошибок, то до ошибок второго рода не доходит дело.

Так ведь это может случаться как раз потому, что система упускает слишком много трендов :) (делает ошибка 2 рода)

А мерить систему по соотношению ошибок первого и второго рода стоит, если после применения фильтров она по-прежнему берёт ВСЕ тренды, определённые ею без фильтров. Только меньшую долю тренда.

Но ведь если она по прежнему берет ВСЕ тренды, то и ошибок 2го рода нет. А уменьшение взятой величины тренда надо как-то иначе мерить…
avatar
Eth_algotrader, методически нужно чётко раскладывать систему.
1. Изначально система берёт тренды при всех параметрах из какой-то сплошной области. Далее вы сужаете область, выделяя прибыльную зону. Тут все ошибки 1-го и 2-го рода считаются зафиксированными, присущими системе.
2. Дальнейшие манипуляции с фильтрами ведутся внутри этой зоны только таким образом, чтобы новых ошибок 2-го рода не возникало. По возможности такого результата делается вывод о применимости фильтра с его областью параметров.

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

Это же невозможно. Вы в любом случае упустите часть профитов при включении фильтров. И, если бы этого не происходило, тогда вместо вашей формулы «приобретаете больший процент выигрышных сделок, но теряете в средней величине сделки» было бы «приобретаете больший процент выигрышных сделок, и большую величину средней сделки».

avatar
Eth_algotrader, описанный эффект зависит от типа системы.
Раз речь ведёте о трендах, то можно представить картину: при применении т. н. 'фильтра' часть убыточных без фильтра заходов в тренд становятся слабо прибыточными, а прибыточные без фильтра с фильтром уменьшаются в размерах из-за ухудшившихся входов и выходов.
Средняя по прибыльным уменьшается, средняя по убыточным несколько увеличивается. Общая средняя снижается. Доля прибыльных растёт. Сумма прибыльных минус сумма убыточных несколько возрастает.
avatar

теги блога Eth_algotrader

....все тэги



UPDONW
Новый дизайн