Есть ли закономерность в хаосе? Попробуем поискать! Машинное обучение на примере конкретной выборки. - страница 20
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
И как это понимать - закономерность есть, но вы не найдете её? Или закономерность в случайности?
просто прочитать внимательно о чем написано
между строк там нету, все дословно и предельно понятно
Вы сформировали уже второй раз вопрос, совершенно не соответствующий тому о чем я написал
А как без жадности? Расчитывать для каждого сплита еще один и выбирать сразу пару, но в вашем случае длительность расчетов в 5000+ раз возрастет. Проще сотню моделей усреднить.
Я думаю скорей в сторону качества, т.е. в сторону дополнительных критериев оценки.
Другой подход - веса для предикторов, которые будут обеспечивать последовательность их применения - не четкий каркас дерева. Это типа "определим в начале время", потом "оценим волатильность" и "текущее положение цены".
Для уменьшения влияния рандома это правильно. Иначе надо как в лесе делать усреднение 20-100 моделей.
Там у них хитрость в другом, и я до конца не понимаю процесс - в начале они строят дерево на урезанной выборки (если принудительно не поставить на всей), а потом считают результаты в листьях на всей выборке. Видимо сплиты на подвыборке, а веса в листьях уже по всей выборке.
Т.е. получается, что уточняющие деревья могут быть не лучшими, а рандомно хуже.
Отсюда и разброс в моделях от сливных к прибыльным.
Не, при обучении всегда происходит улучшение результата на каждой итерации и модели на выборке для обучения всегда в плюсе. Пусть и с финансовым разбросом.
Судя по графикам распределения, сливных моделей больше, т.е. если усреднять, то средний результат будет убыточным.
Да, но это скорей частный случай.
Может random-strength = 0 попробовать? Надеюсь изменения Seed после этого перестанут менять модель. Возможно создаст модель с лучшими уточняющими деревьями, а не рандомно нелучшими. Если лучшая модель будет сливной, то искать на этих данных из 10000 рандомных моделей случайно лучшую - путь к сливу на реале.
Попробовал с нулём, но я так понимаю, что оценка деревьев (Score) стала для всех одинакова, а значит выбирали из одинаковых рандомно :) Или всё же ещё гдет используется генератор случайных чисел.
Либо все же усреднять несколько случайно выбранных моделей, как в лесе. Т.к. лучшая может быть переобучена.
Т.е. отобрать модели по трём выборкам, а потом усреднять типа? Может и так - пока не хочется переходить к ансамблям моделей, нужно ещё поковырять возможность улучшения построения самих моделей.
Другой подход - веса для предикторов, которые будут обеспечивать последовательность их применения - не четкий каркас дерева. Это типа "определим в начале время", потом "оценим волатильность" и "текущее положение цены".
Пробовал такое - делил сначала по дню недели и/или часу дня. Модели получались хуже, чем если она сама находит первые сплиты. Вы тоже такое можете - разделите выборку на 5 частей по дням недели и обучите по 1 модели на каждый день. Или час или что еще хотите.
Не, при обучении всегда происходит улучшение результата на каждой итерации и модели на выборке для обучения всегда в плюсе. Пусть и с финансовым разбросом.
Понятно, что улучшение будет, но не самое лучшее, а с рандомизацией score.
Трейн вообще не смотрю, чтобы не отвлекал. Он всегда хорошим будет.
Если Score стала без рандомизации, а результаты все равно разные, значит рандомизация где-то еще используется.
Не отбирать - а брать все подряд случайно нагенерированные. И усреднить. Как в лесе. Там тоже случайные деревья усредняют. Но можно поставить эксперимент и с лучшими из случайных.
Пробовал такое - делил сначала по дню недели и/или часу дня. Модели получались хуже, чем если она сама находит первые сплиты. Вы тоже такое можете - разделите выборку на 5 частей по дням недели и обучите по 1 модели на каждый день. Или час или что еще хотите.
Да есть у меня такая опция :) Мне удалось поймать интересные результаты на одном из предикторов и сделать под это стратегию сигнальную.
Однако, я тут о другом, о приоритете выбора предикторов моделью при обучении.
Если Score стала без рандомизации, а результаты все равно разные, значит рандомизация где-то еще используется.
Очевидно :) Разработчик пока молчат на эту тему.
Не отбирать - а брать все подряд случайно нагенерированные. И усреднить. Как в лесе. Там тоже случайные деревья усредняют. Но можно поставить эксперимент и с лучшими из случайных.
Такие вещи можно делать при большом Recall, или предварительно сгруппировав модели по похожести точек откликов на позитивный класс, иначе всегда будет отрицательная рекомендация.
Уменьшил выборку последнего эксперимента - с теми предикторами, что отобрал ранее - убрал два года 2014-2015 из выборки train.
Если в прошлый раз моделей было с прибылью более 3000 на выборке exam было 208, то теперь их стало 277. Случайность это или выборки стали более похожи?
Кстати, среднее значений баланса прибыли на выборке test моделей на прошлом шаге 982 пункта, а на усеченной выборке 2115, но на exam практически без изменений -1114 против -1214.
Есть идеи, как ещё улучшить результат можно?
Если в прошлый раз моделей было с прибылью более 3000 на выборке exam было 208, то теперь их стало 277. Случайность это или выборки стали более похожи?
У вас крайне высокая зависимость от Seed т.е. ГСЧ на новых данных. В данных где есть закономерности, картина была бы как на трейне: все в + с небольшими отклонениями.
Попробуйте изменить начальный Seed (попробуйте несколько вариантов). Если число успешных моделей будет меняться так же сильно, то случайность, так же как и последовательность ГСЧ при смене seeda.
Кстати, среднее значений баланса прибыли на выборке test моделей на прошлом шаге 982 пункта, а на усеченной выборке 2115, но на exam практически без изменений -1114 против -1214.
Странно, что среднее на тесте получилось > 0. Может трейн имеете в виду? Тест вроде не участвует в обучении или участвует опосредованно, для выбора трейна.
Есть идеи, как ещё улучшить результат можно?
Скорее всего модель переобучена или недообучена. И последний вариант - закономерности отсутствуют.
Если переобучено - то попробуйте уменьшить число деревьев вплоть до 1. Если будет недообучено - можно будет увеличить глубину дерева.
Вариант с большим количеством деревьев вы наверное уже пробовали.
С отсутствием закономерностей сложнее. Если у вас с 5000+ предикторами они не нашлись, то даже не знаю, как их еще искать. Я не знаю, как вы и эти 5000+ придумали. Я в эту сторону пока не копал. Т.к. сильно дольше становятся расчеты, но видимо придется, т.к. тоже около 50/50 на ООС.
Кстати, вы линию баланса с временем по горизонтальной оси строите или просто с ровным шагом между сделками? Судя по графикам - второе.
Вот пример:
На верхнем 3000+ сделок, на нижнем 600+. Если их сделать просто с равным отступом, то получатся красивые тренды. А тут видно что за 5 лет торговля была всего несколько дней и делать робота, который будет спать месяцами/годами - нет смысла. Вы его просто выключите.
Картинка как раз в тему черных и белых лебедей. Как видно МО на них хорошо "клюет" и подстраивается именно под них, если они есть.
Вот и @fxsaber это дело исследовал https://www.mql5.com/ru/blogs/post/749420
Полностью с ним согласен, что надо убирать влияние и белых лебедей и черных.
Если в оптимизаторе можно применить пользовательский критерий и как то выбирать другие варианты, то в МО есть только стандартные варианты выбора сплитов и тут можно только вырезать куски истории. Проблема в том, что до обучения модели неизвестен момент белого лебедя. А если его вырезать - модель станет совсем другой и там может оказаться свой белый лебедь. Надо думать и экспериментировать...
Доброе время суток! Можете выложить файлы из первого сообщения, тоже хочется попробовать одну идею.
Здравствуйте. Да, попробую выложить сегодня.
У вас крайне высокая зависимость от Seed т.е. ГСЧ на новых данных. В данных где есть закономерности, картина была бы как на трейне: все в + с небольшими отклонениями.
Попробуйте изменить начальный Seed (попробуйте несколько вариантов). Если число успешных моделей будет меняться так же сильно, то случайность, так же как и последовательность ГСЧ при смене seeda.
Seed на каждой модели меняется последовательно от 1 до 10000 - в этом и есть смысл генерации разных моделей. Что будет, если Seed не фиксировать и он будет браться из всего пространства (или как он там генерируется - так же вопрос) - не знаю - можно проверить.
На чем строится утверждение, что результат должен быть схож с test? Я то исхожу из того, что выборки не однородны - нет в них сопоставимого числа похожих примеров, и думаю, что и распределения вероятности по квантам отличаются немного.
Да, модель пусть построилась случайно - допустим, но значит ли это, что она не описывает выявленную закономерность?
Странно, что среднее на тесте получилось > 0. Может трейн имеете в виду? Тест вроде не участвует в обучении или участвует опосредованно, для выбора трейна.
Участвует только для контроля остановки обучения, т.е. если на test нет улучшений при обучении на train, то обучение останавливается и деревья удаляются до точки, где было последнее улучшение на модели test.
Тут как раз такое дело, что улучшения может и нет, но и ухудшение не сильное, но больше обобщается примеров на выборке train, а алгоритм обучения велит прекратить сие дело. Если отключить эту фишку, то становится открытым другой вопрос - сколько деревьев нужно в модели использовать. Думаю о другом варианте - обучаем фиксированное число, а потом уже по выборке test делаем усечение модели, но придется рассчитывать баланс на каждом шаге, что конечно затратно.
Вот сейчас думаю, было бы хорошо сделать так, что бы обучение останавливалось не по одной выборке, а по совокупности подвыборок, что дало бы проверку на сохроненении закономерности во времени.
Скорее всего модель переобучена или недообучена. И последний вариант - закономерности отсутствуют.
Если переобучено - то попробуйте уменьшить число деревьев вплоть до 1. Если будет недообучено - можно будет увеличить глубину дерева.
Вариант с большим количеством деревьев вы наверное уже пробовали.
С отсутствием закономерностей сложнее. Если у вас с 5000+ предикторами они не нашлись, то даже не знаю, как их еще искать. Я не знаю, как вы и эти 5000+ придумали. Я в эту сторону пока не копал. Т.к. сильно дольше становятся расчеты, но видимо придется, т.к. тоже около 50/50 на ООС.
Видимо я не четко дал указание на выборку, которую использовал - это шестая (последняя) выборка из эксперимента тут описанного, поэтому там всего 61 предиктор.
Как я выше указал - да модели не до обучаются в том смысле, что не описывают всю выборку train, и это в целом нормально, ведь и рынок меняется и всех комбинаций просто там не может быть и на каждой последующей выборке их будет разное число, и возможно с другим средним исходом по ним. Работаем же не с репрезентативной выборкой, а значит ожидать полного описания нельзя - я ставлю цель - выципить пару устойчивых закономерностей.
Что касается деревьев, то есть настройка темпа обучения ( --learning-rate), которая связано с числом деревьев, т.е. чем больше темп, тем меньше нужно деревьев для описания выборки. Так вот, получается, что если увеличить темп (0,3), то моделей, проходящих условную фильтрацию получается больше, иногда более чем в два раза, последние эксперименты как раз на таких настройках и деревьев получается в среднем 10 штук, при этом их глубина 6 сплитов. Деревья в CB несколько иные - там один сплит по всему уровню симметричного дерева, что делает их применение быстрей классического варианта, но они менее информативны по одному. В последних релизах можно использовать и классические деревья, но для их моделей нет у меня интерпретатора на MQL5, поэтому не использую - что б не расстраиваться.
Вообще я могу и больше предикторов добавить, ведь сейчас только по сути с 3 ТФ они используются, за небольшим исключением - думаю ещё пару тысяч можно и добавить, но вот будут ли все использованы должным образом при обучении - сомнительно, учитывая что 10000 вариантов seed для 61 предиктора дают такой разброс...
Ну и конечно нужен предварительный отсев предикторов, что ускорит обучение.
Кстати, вы линию баланса с временем по горизонтальной оси строите или просто с ровным шагом между сделками? Судя по графикам - второе.
Вот пример:
На верхнем 3000+ сделок, на нижнем 600+. Если их сделать просто с равным отступом, то получатся красивые тренды. А тут видно что за 5 лет торговля была всего несколько дней и делать робота, который будет спать месяцами/годами - нет смысла. Вы его просто выключите.
Баланс строится последовательно без учета хронологии календаря. Да, я понимаю о чём Вы, но в моей концепции это вопрос последующих этапов подготовки к торговле моделей.
Картинка как раз в тему черных и белых лебедей. Как видно МО на них хорошо "клюет" и подстраивается именно под них, если они есть.
Логично, что выбросы являются отклонениями, я как раз думаю, что это и есть неэффективности, на которых и надо обучаться, убрав белый шум. На остальных участках часто работают простые примитивные стратегии, особенно на участках флэта рынка.