Обсуждение статьи "Кросс-валидация и основы причинно-следственного вывода в моделях CatBoost, экспорт в ONNX формат"

 

Опубликована статья Кросс-валидация и основы причинно-следственного вывода в моделях CatBoost, экспорт в ONNX формат:

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

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

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

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

Автор: Maxim Dmitrievsky

 
Если модель в среднем мало ошибается, значит она не переобучена, если же ошибается часто, значит с ней что-то не так.
Однако, с каким же подвохом это предложение! Если модели ранжируются по степени ошибаемости и берутся из них лучшие, то это снова же переобучение.
 
Поэтому необходимо провести кросс-валидацию на тренировочном датасете, сравнить предсказания модели с обучающими метками и усреднить результаты по всем фолдам. Те примеры, которые в среднем были предсказаны неверно, следует удалить из финальной обучающей выборки как ошибочные. Еще следует обучить вторую модель уже на всех данных, которая отличает хорошо предсказуемые случаи от плохо предсказуемых, позволяя наиболее полно охватить все возможные исходы. 
Первая модель торгует, вторая - классифицирует (и прогнозирует) слабые торговые места. Верно?
 
fxsaber #:
Первая модель торгует, вторая - классифицирует (и прогнозирует) слабые торговые места. Верно?
Да
 
fxsaber #:
Однако, с каким же подвохом это предложение! Если модели ранжируются по степени ошибаемости и берутся из них лучшие, то это снова же переобучение.
Ну выбор же всегда должен существовать :)
Главное чтобы все модели +- проходили ООС
Это один из десятков алгоритм, самый простой для понимания. Потому что по отзывам из прошлых статей показалось, что читатели просто не понимают что происходит. Тогда какой смысл писать.
 
Интересна дискуссия именно по стат. методам в МО, если найдутся те, кому есть что сказать/дополнить.
 

1) Хотелось бы увидеть работу модели на третьей выборке которая не была ти трейном ни тестом и никак не участвовала в создании и отборе модели.

2) Выявление шума и перемаркировка лейблов или создание металейблов было описано Владимиром в его статье 2017 года где он использовал для этого пакет NoiseFiltersR

Глубокие нейросети (Часть III). Выбор примеров и уменьшение размерности
Глубокие нейросети (Часть III). Выбор примеров и уменьшение размерности
  • www.mql5.com
Эта статья продолжает серию публикаций о глубоких нейросетях. Рассматривается выбор примеров (удаление шумовых), уменьшение размерности входных данных и разделение набора на train/val/test в процессе подготовки данных для обучения.
 
mytarmailS #:

1) Хотелось бы увидеть работу модели на третьей выборке которая не была ти трейном ни тестом и никак не участвовала в создании и отборе модели.

2) Выявление шума и перемаркировка лейблов или создание металейблов было описано Владимиром в его статье 2017 года где он использовал для этого пакет NoiseFiltersR

Бот приложен к статье

Там описано несколько из десятков или сотен подобных методов, вникать в каждый из которых нет никакого желания, тем более без проверки результатов. Мне больше интересны самоделки и сразу же их тестирование, теперь конвертирование в ONNX позволяет это делать еще быстрее. Ядро подхода легко дописывается/переписывается без изменения остального кода, что тоже очень круто. В этом примере поиска ошибок через cv есть недостаток, который не позволяет говорить о причинно-следственном выводе в полной мере, поэтому это введение. В другой раз попробую объяснить.

Статья полезна даже уже тем, что это готовое решение для экспериментов с МО. Функции оптимизированы и работают быстро.
 
Отлично, обожаю ваши статьи. Я учился по ним. Я тоже сделал материал, сейчас на проверке, по экспорту модели случайного леса в ONNX)Опробую и вашу модель)Надеюсь опубликуют, я новичок=)
 
Yevgeniy Koshtenko #:
Отлично, обожаю ваши статьи. Я учился по ним. Я тоже сделал материал, сейчас на проверке, по экспорту модели случайного леса в ONNX)Опробую и вашу модель)Надеюсь опубликуют, я новичок=)

Больше МО только приветствуется :) Я тоже любитель.

 
Так обратный порядок не получится:
   int k = ArraySize(Periods) - 1;
   for(int i = 0; i < ArraySize(Periods); i++) {
      f[i] = features[i];
      k--;
   }
Должно быть 
f[k] = features[i];
А зачем вообще делать обратный порядок?
Причина обращения: