Переобучение - страница 4

 
Aliaksandr Hryshyn:
Кто какие приёмы использует для минимизации переобучения(подгонки под историю) модели/советника?
Нужно исходить из факта, что, в этом деле нельзя обойтись без анализа исторических данных и необходимо полностью исключить понятие "подгонка под историю". Первичным должна быть сама идея ТС, на чем она базируется. Каждая ТС основывается на показаниях какого-либо индикатора или индикаторов. Последние имеют такой параметр, как объем выборки N, выносящих вердикт после анализа всего объема выборки. Естественно предположить, что, никакой индикатор не может одинаково успешно справляться со всеми историческими данными. Поэтому, на помощь приходят такие параметры, как СЛ и ТП. Вот 3 основных параметра, которых нужно оптимизировать. Нужно найти такие их значения, чтобы ТС смогла пройти весь спектр исторических данных на выбранном ТФ. Получив график наращивания средств за весь период, нужно анализировать и смириться с тем фактом, что, на худших участках первоначальная идея, заложенная в ТС, не работает из-за многоликости рынка. Пытаться искать и разделять весь участок на "плохие" и "хорошие", равно, как на "обучающие" и "форвардные" - пустая трата времени. ТС нужно оценивать по всему объёму доступного исторического материала.
 
Youri Tarshecki:

Ну так вот объясните мне  -как вы решаете по деградации форварда - ПЕРЕобучение это или НЕДОобучение. Переобучение как-то по-особому деградирует, нежели недообучение?

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

Деградация форварда дает оценку обобщающей способности системы (т.е. стабильности, пригодности для неизвестных данных). Когда она (способность) низкая, то с практической точки зрения без разницы пере- или недообучение - в любом случае на выкид. Но если советник обучается классически - через набор параметров и МТ тестер - то здесь не может быть недообученности (с технической точки зрения). А если обучение идет собственным алгоритмом, то можно использовать известные методы (например, ранней остановки) для нахождения оптимальной точки, когда "ошибка минимальна" (наилучший результат на OOS): в ней недооптимизация уже закончилась, а переоптимизация еще не наступила. К сожалению, стандартный тестер не предоставляет такого автоматического функционала по сопоставлению эффективности системы на периоде оптимизации и OOS. OOS в МТ - это и есть форвард тест. Поэтому выделенное жирным - фактически то же самое, что говорю и я. Топикстартер задал вопрос про переобучение, потому ответы здесь про это. Что же касается недообучения, то если под ним понимать не степень оптимизации, а абстрактное "качество кода", куда по-видимому относится выбор предикторов, способы подготовки входных данных, глубины обучающей выборки и прочих мета-знаний, то здесь недообучение определить очень просто - по отсутствию положительных результатов оптимизации.

 

Насчет недообученности не соглашусь - технически ее сделать не составит никакого труда. Т.е. сам факт деградации не говорит переобученность это или недо.

Если топикстартер отвлечется от самого термина и поймет, что оптимум - это что-то по гауссу, то и вопрос будет им сформулирован несколько по-другому- как определить оптимальное количество и плотность тренировок.

А тогда уж можно поговорить конкретнее. 

Лично я определяю по результату проверки.

 

Stanislav Korotky:
Термин этот не дурацкий, а давно устоявшийся и "одобренный лучшими собаководами"

На самом деле overfitting от которого пошло "переобучение" не совсем переобучение, это переподгонка.

 

Попробуем взглянуть на вопрос немного с другой стороны.

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

Интересен вопрос, как можно, хоть частично, ограничить ТС/модель, чтобы она не могла "запоминать" шум? Или как "очистить" исторические данные от шума, повторюсь, шум по отношению к ТС.

Вот простой пример на картинке, предположим, что линии 1 и 2 являются одной и той же моделью. 

 

 

Вот ещё пример,  на участке между двумя вертикальными линиями, модель(красные линии) сильно ошибается. 

 

 
Эти картинки вообще о чем? Что по осям? Количество оптимизаций?
 
Комбинатор:

На самом деле overfitting от которого пошло "переобучение" не совсем переобучение, это переподгонка.

Совершенно верно.  Подгонка или переподгонка - хрен редьки не слаще
 
Youri Tarshecki:
Совершенно верно.  Подгонка или переподгонка - хрен редьки не слаще
Если подгонка или переподгонка проводится на всем объеме исторических данных, то, это только улучшает качество ТС.
 
Youri Tarshecki:
Эти картинки вообще о чем? Что по осям? Количество оптимизаций?
Они не относятся конкретно к торговле. Показывают простейшие примеры, как модель(линии 1 и 2 на первом рисунке, и красная линия на втором) может "ошибаться" на данных(маленькие квадраты и, ниже, точки).

Пускай по горизонтали будет значение индикатора, а по вертикали, для точек - как ТС должна прогнозировать некоторое свойство цены, используя это значение индикатора, чтобы быть в плюсе. Для линий - как ТС прогнозирует. На основании этого прогноза, ТС может торговать. Это такой условный пример. Прогнозируемым свойством может быть наличие тренда или флэта, волатильность и др.
 
Aliaksandr Hryshyn:
Они не относятся конкретно к торговле. Показывают простейшие примеры, как модель(линии 1 и 2 на первом рисунке, и красная линия на втором) может "ошибаться" на данных(маленькие квадраты и, ниже, точки).

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

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

 

Как можно регулировать количество проходов?

1. Просто меняя количество самих сеансов тренировки или меняя расстояние (шаг) значений параметров индикатора.

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

3.  Меняя алгоритм генетической оптимизации, если мы ее используем. Например, меняя количество поколений, рэндомность и тд.

 Вот, пожалуй, и все доступные инструменты для борьбы с ПЕРЕ и НЕДО. 

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