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

 
Yury Reshetov:
Дык ведь устойчивость достигается за счёт того, что нужно предотвращать потенциальное переобучение. А несбалансированная обучающая выборка является потенциальной причиной переобучения для малопредставительных классов. Ведь обучающий алгоритм пытается действовать, как ему проще, а не как нужно для повышения обобщающей способности. Если выборка несбалансирована, то он будет минимизировать ошибки обучения на наименее представительных классах, т.к. примеров для таких классов мало и вызубрить их наизусть легче всего, вместо того, чтобы заниматься обобщением. После такой зубрёжки нечего удивляться, что вне обучающей выборки наиболее вероятными  будут ошибки алгоритма на малопредставительных классах.
Я ничего не имею против балансировки обучающей выборки. Я против того, чтобы для валидации брать случайную подвыборку без резделения по датам. Будет завышение метрики на валидации.
 
Alexey Burnakov:

 

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

 

Следовательно, беря при валидации смешанную выборку (без разделения по датам), вы завышаете метрику качества на валидации. Вот и все. Потом будут неприятные сюрпризы.

Причём тут мысль? Мысли - это субъективизм. Мыслить можно и правильно и заведомо ошибочно. Потому как воображение проблематично ограничить. Критерием истины всегда является опыт.

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

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

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

 
Yury Reshetov:
Дык ведь устойчивость достигается за счёт того, что нужно предотвратить переобучение. А несбалансированная обучающая выборка является потенциальной причиной переобучения для малопредставительных классов. Ведь обучающий алгоритм пытается действовать, как ему проще, а не как нужно для повышения обобщающей способности. Если выборка несбалансирована, то он будет минимизировать ошибки обучения на наименее представительных классах, т.к. примеров для таких классов мало и вызубрить их наизусть легче всего, вместо того, чтобы заниматься обобщением. После такой зубрёжки нечего удивляться, что вне обучающей выборки ошибки алгоритма на малопредставительных классах будут наиболее вероятными.

1. На несбалансированных классах вообще получается черти что: ошибка между классами может в разы расходиться. И какая правильная?

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

Твой пример с BUY|SELL. При числе наблюдений (баров) свыше 3000 разница не сбалансированности будет 10% максимум 20%.  Вполне можно балансировать.

А здесь выше Dr.Trader  предлагал целевую переменную "разворот/нет разворота" . Вроде брал из ЗЗ. Так в такой целевой переменной не сбалансированность классов будет разнится на порядки.  Если мы дополним до максимального класса, то можно ли будет учить на такой сбалансированной выборке? Мне кажется, что нет. 

Так что с балансировкой не все так просто.

Из собственного опыта:

  • если разбалансированость не большая (не более 20%) то балансировать надо обязательность.
  • если разабалансированность большая (кратная), то балансировать нельзя, и вообще надо отказываться от такой целевой переменной.

Других решений найти не удалось. 

 
Yury Reshetov:
Ща все дела брошу, стану адептом R, чтобы играться в цифири с серьёзной рожей на лице.
Пока не заметил, чтоб ты играл в цифирь, а вот на счет рожи не знаю - не видно.
 
СанСаныч Фоменко:
Пока не заметил, чтоб ты играл в цифирь, а вот на счет рожи не знаю - не видно.
Дык ведь вроде бы на аватарке рожица у меня вполне серьёзная? По крайней мере, я очень старался чтобы она была максимально насупленной. Но видимо, не очень хорошо получилось?
 
Yury Reshetov:

Причём тут мысль? Мысли - это субъективизм. Мыслить можно и правильно и заведомо ошибочно. Потому как воображение проблематично ограничить. Критерием истины всегда является опыт.

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

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

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

Я про одно, вы про другое. Я говорю, надо набор делить строго по датам. А вы про баланс.
 
Alexey Burnakov:
Я про одно, вы про другое. Я говорю, надо набор делить строго по датам. А вы про баланс.

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

Скорее всего причина в том, что Вы пытаетесь убедить меня  в том, что якобы пытаюсь "заставить" Вас сбалансировать реальную действительность? Но у меня нет такого намерения. Я знаю, что реальная действительность и к моему же сожалению зачастую  несбалансирована и возможности для её балансировки не всегда доступны. Поэтому в своих постах я пытался объяснить Вам, что не обязательно пытаться сбалансировать реальную действительность вне обучающей выборки, а необходимо и достаточно всего лишь сбалансировать обучающую выборку, чтобы полученная по ней модель не была перекошена в сторону сильно представительных классов. При делении генеральной выборки на части по датам, также зачастую невозможно добиться баланса. Поэтому я балансирую обучающую выборку не по датам, а по равной представительности классов в ней.

Более отвечать на вопросы по балансировке обучающей выборки я не буду. Итак этот холивар уже затянулся.

 
Yury Reshetov:

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

Скорее всего причина в том, что Вы пытаетесь убедить меня  в том, что якобы пытаюсь "заставить" Вас сбалансировать реальную действительность? Но у меня нет такого намерения. Я знаю, что реальная действительность и к моему же сожалению зачастую  несбалансирована и возможности для её балансировки не всегда доступны. Поэтому в своих постах я пытался объяснить Вам, что не обязательно пытаться сбалансировать реальную действительность вне обучающей выборки, а необходимо и достаточно всего лишь сбалансировать обучающую выборку, чтобы полученная по ней модель не была перекошена в сторону сильно представительных классов. При делении генеральной выборки на части по датам, также зачастую невозможно добиться баланса. Поэтому я балансирую обучающую выборку не по датам, а по равной представительности классов в ней.

Более отвечать на вопросы по балансировке обучающей выборки я не буду. Итак этот холивар уже затянулся.

Ок . Я вас не буду убеждать.
 

Хочу встрять для полноты картины и повторить свое мнение, высказанное выше по ветке.

1.  Необходимо иметь два набора данных: второй продолжение первого по времени.

2. Первый набора данных балансируем. Обязательно балансируем.

3. Первый набор данных делим случайным образом на три части: обучения,тестирования и проверки.

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

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

Если ошибка на всех ЧЕТЫРЕХ наборах примерно одинакова, то модель  не переобучена. Если ошибка имеет приличное значение, то можно смело идти дальше, т.е. пропускать через тестер.

Если имеется значительная разница (более 30%), то исходный набор предикторов приводит к переобучению модели и по личному опыту замена типа модели ничего исправить, в смысле преобучения, не может. Нужно избавиться от шумовых предикторов. Запросто может получиться, что среди предикторов ВООБЩЕ нет НЕ шумовых предикторов.  

 
Поддержу ваш разговор господа, поскольку пользуюсь оптимизатором Юрия, уже более года и я с ним абсолютно согласен по поводу выборки с помощью генератора ГСПЧ. Дело в том что задача ставится в выявлении информации во входных данных о информации выхода. То есть оптимизатор говорит Вам насколько входные данные информативны для нашего выхода (который является идеальным). То есть оптимизатор отвечает на этот вопрос. И если данные показывают плохой результат то значит они не несут в себе информацию о выходе вернее несут на тот уровень обобщения который выдаёт предиктор. А теперь представте такой случай, предположим у нас есть 10 входов. Вопрос, сколько нужно иметь записей (строу) чтобы распилить выборку в ноль???? Я вам подскажу. 100 записей при 10 входах должны оптимизироватся в ноль. Потому как при 100 записах будет произведён полный перебор данных. Может я как то не ясно выразился, прошу пращения. Юрий конечно об этом не говорит, но есть один нюанс использования предиктора, который не афишируется, НО который увеличивает обобщающую способность любых данных. Тоесть при 10 входах, подав 100 строк, пусть даже полностью не относящихся к системе данных. Алгоритм построит модель, где обобщающая способность будет высокого уровня. В пределах 90% и выше. Не факт что в будущем эта модель будет работать адекватно, потому как данные взяты с потолка и к системе не относятся никоим образом. Но Предиктор способен распилить многомерное пространство с минимальной ошибкой. Но для этого нужно выполнить одну не хитрую манипуляцию с данными. А так я полностью согласен с Юрием. Задача выявить информативнойсть входов по отношению к выходу и порядок расположения данных в этом случае не играет ни какой роли. ГСПЧ в данном случае вариант....
Причина обращения: