В datascience все уже знают о важности данных для успеха любого проекта с машинным обучением. Часто бывает, что сами данные представляют собой гораздо большую ценность, чем модель, которая на них обучилась, поскольку процесс получения этих данных может быть гораздо сложнее, опаснее, дороже, чем обучение модели. Поэтому набирает популярность генерация наборов данных, создаются специальные фреймворки. Сегодня речь пойдет об одном из таких фреймворков, SMOTE, или же Synthetic Minority Oversampling Technique. За два последних десятилетия накопилось довольно много материала по этой технике. Ключевое отличие этой статьи в экспериментах, которые проводились в ходе исследования работоспособности такого типа овэрсэмплинга.

Постановка проблемы

Все, кто хоть раз сталкивался с машинным обучением, знакомы с таким понятием как «отсутствие баланса классов». Мало когда встречаются отбалансированные наборы данных, только если мы сами не сделаем себе нужную выборку с балансом. Также, многие наверно слышали, что дисбаланс классов может негативно отражаться на обучении модели, поэтому всегда возникали вопросы о том, как такую проблему решать.

Выборка с балансом классов и без него
Выборка с балансом классов и без него

Есть несколько способов как дополнять данные, но сегодня остановимся на исправлении дисбаланса с помощью «синтетики», то есть искусственной генерации дополнительных сэмплов, с учетом характера данных. Есть два способа как можно выровнять классы: oversampling и undersampling. Oversampling – мы дополняем плохо присутствующий класс. Undersampling – срезаем доминирующий класс и тем самым выравниванием дисбаланс классов. Конкретно SMOTE является техникой овэрсэмплинга, то есть он дополняет мало представленный класс, чтобы исправить несбалансированность в данных.

Пример работы овэрсэмплинга и андерсэмплинга
Пример работы овэрсэмплинга и андерсэмплинга

Классический SMOTE

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

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

Пример работы классического SMOTE
Пример работы классического SMOTE

Примерно так это будет выглядеть после того, как сгенерируются новые данные:

Результат работы классического SMOTE

Borderline-SMOTE

Borderline-SMOTE направлен на образцы, расположенные на границе между различными классами. Основная мысль заключается в том, что эти образцы часто оказываются самыми сложными для классификации и, следовательно, наиболее важными для обучения модели. Сначала определяются граничные образцы малочисленного класса, то есть те, которые окружены множеством соседей из преобладающего класса. Затем метод Borderline-SMOTE применяется исключительно к этим граничным образцам, увеличивая их количество и таким образом усиливая разделяющую границу вокруг них.

Пример работы Borderline-SMOTE

Математическое описание работы Borderline-SMOTE:

  • Идентификация граничных образцов малочисленного класса:

  • Классификация образцов малочисленного класса:

  • Генерация синтетических образцов:

SVM-SMOTE

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

Пример работы SVM-SMOTE

Математическое описание работы SVM-SMOTE:

  • Инициализация:

  • Алгоритм:

ADASYN – адаптивный синтетический алгоритм

ADASYN не является на самом деле видом SMOTE, но тем не менее очень схож с ним. Он концентрируется на образцах, которые наиболее трудно классифицировать, и создает больше синтетических данных для этих образцов. Объем синтетических данных для каждого образца определяется на основе количества соседей из противоположного класса — чем больше соседей из другого класса, тем больше синтетических данных будет создано.

 Пример работы ADASYN

Математическое описание работы ADASYN:

  • Вычисление степени дисбаланса классов:

  • Проверка, ниже ли дисбаланс порогового значения:

Смотить или не смотить?

В мае 22 года вышла статья To SMOTE or not to SMOTE. В ней авторы решили проверить работоспособность этой техники на разных моделях машинного обучения. Исследование показало, что получали выигрыш от такого оверсэмплинга только так называемые weak learners – то есть простые модели по типу дерева, перцептрона, метода опорных векторов. Наиболее продвинутые модели «по типу» (xgboost, light gbm, cat boost) получали довольно малый, либо нулевой прирост метрик.

Метрики представлены ниже, здесь нас интересуют фиолетовые кружки. По метрикам видно, что прирост показали только слабые модели. В то время как лучшие ML модели почти никак не отреагировали на использование SMOTE. Эти кружки – это средняя метрика по всем датасетам в исследовании, всего было задействовано в оценке 73 датасета.

Метрики на слабых и SOTA моделях
Метрики на слабых и SOTA моделях

Пояснение к рисункам:

  •   SVM – Support Vector Machines

  • DT – Decision Tree

  • LGBM – Light Gradient-Boosting Machine

  • XGBoost – Extreme Gradient-Boosting

  • CatBoost – Categorical Boosting

  • MLP – Multilayer Perceptron

На примере MLP разобрал, что значат подписи на графике:

  • Rank – рейтинг всех используемых комбинаций моделей и SMOTE, где чем меньше – тем лучше.

  • MLP+Default – модель со стартовыми гиперпараметрами без овэрсемплинга

  • MLP – модель с наилучшими гиперпараметрами без оверсэмплинга. Далее идут модели с оверсэмплингом.

  • MLP+Random – модель с наилучшими гиперпараметрами и использованием Random Oversampling (случайное дублирование примеров для мало присутствующего класса).

  • MLP+SMOTE, MLP+SVM-SM, MLP+ADASYN – модели с наилучшими гиперпараметрами с использованием разных видов овэрсэмплинга, которые я описал выше.

  • MLP+Poly – модель с наилучшими гиперпараметрами и использованием Polynomfit SMOTE (генерация синтетики путём подгонки полинома к пространству признаков малочисленного класса).

Постановка собственных экспериментов

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

Условия эксперимента:

  • Классический датасет с винами (определение качества вина от 1 до 10)

  • Убрал одну категориальную колонку (для SMOTE желательно чтобы все признаки были непрерывными, он не умеет корректно работать с категориальными значениями)

  • Undersampling не проводился

  • Убрал вина с оценкой 9 (их было всего 5 штук и SMOTE не смог сгенерировать данных для такого малого количества сэмплов)

  • Было проведено 20 экспериментов (4 модели и 3 типа SMOTE, 4 раза модель прогонялась без SMOTE, еще 4 раза использовался ADASYN)

  • Тестовая выборка состоит только из настоящих сэмплов, чтобы оценить реальную способность классификаторов

  • Не проводилось тюнинга гиперпараметров, все модели обучались с дефолтными настройками

Эксперименты – Gradient Boosting

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

Метрики на градиентном бустинге

Эксперименты – Random Forest

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

Метрики на случайном лесе

Эксперименты – Multilayer Perceptron

Вот здесь уже интереснее. В исследовании 2022 года перцептроны со SMOTE сильно вырвались вперед по метрикам по сравнению с дефолтным перцептроном. Что видно: начали расти метрики на абсолютно нулевых классах. То есть, к примеру 3 и 8, хотя и произошел общий спад метрик на других классах. Лучше всего здесь себя показал SVM-SMOTE. Если посмотрим на f1, это видно, если сравнить с другими типами SMOTE.

Метрики на перцептроне

Эксперименты – Support Vector Machines

SVM тоже довольно интересен. На дефолте удавалось обнаружить всего 2 класса из 6. Такая же ситуация, как и с перцептроном, SVM начал видеть классы, на которых были нулевые метрики. И опять лучшим себя показал SVM-SMOTE, на пару с основным SVM классификатором. Там стало получаться найти 4 класса.

Метрики на методе опорных векторов

Когда используем?

  • применение легких моделей для простой классификации

  • еще в одной статье видел, что ломается калибровка вероятностей модели, поэтому это тоже надо учитывать

Когда не используем?

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

  • много «шума» в данных (При большом количестве шумовых сэмплов также будет генерироваться довольно большое количество аномальных данных.)

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

  • присутствие категориальных признаков (При присутствии категориальных признаков SMOTE может создавать некорректные сэмплы.)


Автор статьи: Николай Чудиновских, младший исследователь исследовательского центра UDV Group


Полезные ссылки:

Комментарии (0)