Обсуждение статьи "Машинное обучение от Яндекс (CatBoost) без изучения Phyton и R"

 

Опубликована статья Машинное обучение от Яндекс (CatBoost) без изучения Phyton и R:

В статье приведен код и описаны основные этапы процесса машинного обучения на конкретном примере. Для получения моделей не потребуется знание таких языков программирования, как Phyton или R, знание языка MQL5 будут востребованы неглубокие, впрочем, как и в наличии у автора этой статьи, поэтому смею надеяться, что данная статья послужит хорошим руководством для широкого круга заинтересованных лиц, желающих экспериментальным путем оценить возможности машинного обучения и внедрить их в свои разработки.

Результаты не выдающиеся, но можно отметить, что главное правило в трейдинге "не терять деньги" соблюдается. Даже если бы выбор пал не на эту модель, а на другую из файла "CB_Svod.csv", то всё равно эффект был бы положительным, ведь финансовый результат самой неудачной модели, что мы получили, составляет -25 пунктов, а средний показатель финансового результата всех моделей составляет 3889,9 пунктов.


Рис. 9 "Финансовый результат обученных моделей за период с 01.08.2019 по 31.10.2020"

Автор: Aleksey Vyazmikin

 
Спасибо за статью ) какие метрики показались вам наиболее удачными в классификации вр? ROC-AUC, Accuracy, F1 или может что-то еще
 
Maxim Dmitrievsky:
Спасибо за статью ) какие метрики показались вам наиболее удачными в классификации вр? ROC-AUC, Accuracy, F1 или может что-то еще

Пожалуйста :)

В основном я работаю с несбалансированными выборками, где, для бинарной классификации, нулей больше единиц, а ценность единиц гораздо больше, чем нулей. По факту я смотрю только на Recall и Precision.

Recall - показывает, активность модели, обусловленную полученными ей  "знаниями", т.е. как часто модель отзывается на "раздражитель" в виде единицы, чем больше показатель, тем на больший процент единиц отзывается модель.

Precision - показывает точность отзывов, и тут, в зависимости от стратегии, эта точность может быть приемлемой и при небольших процентах, к примеру 45%.

Стандартные метрики, в основном, учитывают равноценность классифицируемых объектов, чего недостаточно для окончательного принятия решения.

Для отбора групп моделей я использую метрику и по "балансу ошибок" - где оцениваю ошибки в динамике.

Вообще же, используется более 30 разных метрик, возможно это отдельная тема для исследования и статьи.

 
Aleksey Vyazmikin:

Пожалуйста :)

В основном я работаю с несбалансированными выборками, где, для бинарной классификации, нулей больше единиц, а ценность единиц гораздо больше, чем нулей. По факту я смотрю только на Recall и Precision.

Recall - показывает, активность модели, обусловленную полученными ей  "знаниями", т.е. как часто модель отзывается на "раздражитель" в виде единицы, чем больше показатель, тем на больший процент единиц отзывается модель.

Precision - показывает точность отзывов, и тут, в зависимости от стратегии, эта точность может быть приемлемой и при небольших процентах, к примеру 45%.

Стандартные метрики, в основном, учитывают равноценность классифицируемых объектов, чего недостаточно для окончательного принятия решения.

Для отбора групп моделей я использую метрику и по "балансу ошибок" - где оцениваю ошибки в динамике.

Вообще же, используется более 30 разных метрик, возможно это отдельная тема для исследования и статьи.

То есть, для каждой, условно говоря, стратегии, используется отдельная модель с небольшой частотой сигналов и потом они объединяются? Я просто из статьи не очень понял. Интересна сама философия подхода. Вы раньше в теме МО говорили про отбор листьев и проч. Или это отдельная тема?
 
Maxim Dmitrievsky:
То есть, для каждой, условно говоря, стратегии, используется отдельная модель с небольшой частотой сигналов и потом они объединяются?

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

 
Maxim Dmitrievsky:
Я просто из статьи не очень понял. Интересна сама философия подхода. Вы раньше в теме МО говорили про отбор листьев и проч. Или это отдельная тема?

Листья - отдельная тема. С бустинга, по сути, листья не очень выходили по своих характеристикам (брал просто с первого дерева). На днях узнал, что у XGBoost есть возможность сохранять листья, но там явно нужен Phyton, может там качество листьев лучше.

 

Алексей, с почином!

Имхо, для первой статьи очень достойно. Качество гораздо выше, чем у некоторых писателей, которые накидали больше десятка статей. Спасибо, буду разбираться в нюансах.

P.S. Посмотрел видеоролик. Приятно, что есть такая увлечённая молодёжь...

 
Denis Kirichenko:

Алексей, с почином!

Имхо, для первой статьи очень достойно. Качество гораздо выше, чем у некоторых писателей, которые накидали больше десятка статей. Спасибо, буду разбираться в нюансах.

P.S. Посмотрел видеоролик. Приятно, что есть такая увлечённая молодёжь...

Спасибо!

Данная статья писалась, как пособие по применение CatBoost с использованием командной строки и с последующей интеграцией в MT5, хотелось показать хороший класс по работе с таблицами "CSV fast", который существенно облегчил мне работу с большими файлами CSV, им я уже пользуюсь более 2х лет. Под эту потребность решил провести эксперимент со стандартными индикаторами и он оказался успешным.

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

Да, конечно, молодежь разная, просто чем старше становишься, тем больше она удаляется из социального окружения, и менее объективно воспринимается.

 

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

 
Andrey Dibrov:

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

Рад, что статья показалась интересной.

Мой и подход, изложенный в статье, Максима, отличаются во всём, кроме используемого инструмента - CatBoost. У меня в статье выборка готовится по сигналу и между сигналами может пройти более 100 баров, у Максима на каждом баре, период обучения выбран большой для поиска генеральных закономерностей, у Максима обучение скорей на тенденцию, я предлагаю использовать сложные предикторы, в статье Максима показан вариант простого преобразования ценового ряда. Максим показал, в первую очередь, как обучить модель в  питоне и применить её в MT5 уже без питона, что очень удобно - сам же подход нельзя использовать в торговле, поэтому в статье и присутствует словосочетание "наивный подход"! В моей статье так же сделан упор именно на процесс обучения и интеграции модели CatBoost в MT5, но обучение происходит не в питоне, а в отдельной самостоятельной консольной программе, являющейся оберткой библиотеки CatBoost, что позволяет использовать все функции, как и в питоне. Дополнительно в статье была рассмотрена структура советника, что б показать полный цикл сбора и обработки информации от А до Я. Успешность обучения зависит от предикторов, в данной статье использовались в основном предикторы в виде стандартных осцилляторов и для меня оказалось приятным сюрпризом, что модель обучилась на них и показывает интересные результаты. Цели, как и у Максима, не было предоставить готовое решение для заработка денег, но хороший фундамент я дал.

Что касается тестирования - Вы невнимательны - в статье Максима на выборке вне обучения показано поведение советника на 4 месяцах, у меня же советник показывает положительный результат на 15 месяцах. Работа более года без переобучения - это очень хороший результат, если придерживаться парадигме об изменчивости рынка.

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

Да, и обратите внимание, что тестовая выборка (test.csv в статье) участвует только как средство оценки качества получаемой модели, и по ней не происходит обучения, в итоге от всей выборки мы обучались только на 60%, а это с 01.06.2014 по 30.04.2018 - на оставшихся данных модель не строилась, поэтому говорить надо о том, что модель работает на информации о рынке, которая была актуальна ещё 2,5 года назад.

 
Aleksey Vyazmikin:

Рад, что статья показалась интересной.

Мой и подход, изложенный в статье, Максима, отличаются во всём, кроме используемого инструмента - CatBoost. У меня в статье выборка готовится по сигналу и между сигналами может пройти более 100 баров, у Максима на каждом баре, период обучения выбран большой для поиска генеральных закономерностей, у Максима обучение скорей на тенденцию, я предлагаю использовать сложные предикторы, в статье Максима показан вариант простого преобразования ценового ряда. Максим показал, в первую очередь, как обучить модель в  питоне и применить её в MT5 уже без питона, что очень удобно - сам же подход нельзя использовать в торговле, поэтому в статье и присутствует словосочетание "наивный подход"! В моей статье так же сделан упор именно на процесс обучения и интеграции модели CatBoost в MT5, но обучение происходит не в питоне, а в отдельной самостоятельной консольной программе, являющейся оберткой библиотеки CatBoost, что позволяет использовать все функции, как и в питоне. Дополнительно в статье была рассмотрена структура советника, что б показать полный цикл сбора и обработки информации от А до Я. Успешность обучения зависит от предикторов, в данной статье использовались в основном предикторы в виде стандартных осцилляторов и для меня оказалось приятным сюрпризом, что модель обучилась на них и показывает интересные результаты. Цели, как и у Максима, не было предоставить готовое решение для заработка денег, но хороший фундамент я дал.

Что касается тестирования - Вы невнимательны - в статье Максима на выборке вне обучения показано поведение советника на 4 месяцах, у меня же советник показывает положительный результат на 15 месяцах. Работа более года без переобучения - это очень хороший результат, если придерживаться парадигме об изменчивости рынка.

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

Да, и обратите внимание, что тестовая выборка (test.csv в статье) участвует только как средство оценки качества получаемой модели, и по ней не происходит обучения, в итоге от всей выборки мы обучались только на 60%, а это с 01.06.2014 по 30.04.2018 - на оставшихся данных модель не строилась, поэтому говорить надо о том, что модель работает на информации о рынке, которая была актуальна ещё 2,5 года назад.

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

Причина обращения: