Вы когда-нибудь оказывались в ситуации, когда при обучении модели машинного обучения вы получали точность выше 90%, но затем понимали, что модель предсказывает все в классе с большинством записей?

Там вы действительно почувствуете запах несбалансированных данных, и теперь вы знаете, что ваша модель - пустая трата времени!

Что такое несбалансированные данные?

Дисбаланс означает, что количество точек данных, доступных для разных классов, разное. Например, представьте, что у вас есть знаменитый набор данных «обычных» и «мошеннических» транзакций по кредитным картам, в котором количество записей для «обычных» транзакций составляет 284315, а для «мошеннических» транзакций - только 492.

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

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

Здесь мы обсудим -

  1. Методы передискретизации и передискретизации для обработки несбалансированных данных.
  2. Алгоритмы NearMiss, SMOTETomek и RandomOverSampler для балансировки несбалансированных данных.
  3. Сравните алгоритмы, использованные на шаге 2, и выберите лучший с правильными рассуждениями.

ЛАДНО ! ТАК НАЧАТЬ!

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

Давайте сначала запачкаем руки, подготовив данные к работе! Взгляните на приведенный ниже код и попробуйте сами в предпочитаемом режиме ожидания!

Пока вы выполняете это, вы получите форму ваших независимых (X) и зависимых / целевых (Y) переменных.

Скорее всего, вы получите такой результат -

(284807, 30)
(284807,)

Теперь давайте проведем исследовательский анализ данных, чтобы выяснить природу данных!

Сгенерированная визуализация показана ниже -

Ржу не могу. :)

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

Давайте посчитаем количество мошенничества и обычных транзакций, чтобы получить числовую оценку, а затем мы попробуем различные методы, чтобы сбалансировать наши данные.

Скорее всего, вы получите такой результат:

(492, 31) (284315, 31)

Таким образом, у нас всего 492 мошеннических транзакций и 284315 обычных транзакций.

Давайте теперь познакомимся с различными методами балансировки наших данных!

Недовыборка

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

Здесь мы будем использовать алгоритм Near Miss Undersampling, который работает путем выбора примеров на основе расстояния между примерами классов большинства и примерами классов меньшинств.

Посмотрите код здесь и попробуйте сами!

Результат будет аналогичен показанному ниже:

((984, 30), (984,))

Ура! Наши данные теперь сбалансированы!

Но ждать. Вы только что осознали, что мы потеряли огромное количество данных, а точнее огромное количество ценной информации? !!!

ДА. МЫ СДЕЛАЛИ. И ЭТО ГДЕ СУПЕРСЛЕДПИРАЦИЯ ПОБЕГАЕТ НАД ТЕХНИКАМИ УНИЧТОЖЕНИЯ!

Давайте теперь посмотрим, как работает передискретизация -

Передискретизация

Передискретизация включает в себя дополнение обучающих данных несколькими копиями некоторых классов меньшинств. Передискретизация может выполняться более одного раза (2x, 3x, 5x, 10x и т. Д.). Это один из самых ранних предложенных методов, который также доказал свою надежность и намного лучше, чем недостаточная выборка, поскольку данные здесь не теряются, а новые данные созданы!

И знаете, чем больше данных, тем надежнее ваша модель!

Итак, давайте теперь посмотрим на практическую реализацию передискретизации с использованием алгоритма RandomOverSampler.

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

Посмотрите на код еще раз и попробуйте на собственном холостом ходу.

Результат, вероятно, изменит ваши данные, как показано ниже:

((426472, 30), (426472,))

Вы только что заметили разницу в результатах при использовании передискретизации и передискретизации ?!

Такой огромный объем данных создается, если мы используем передискретизацию! Довольно круто, правда?

Но опять же, у всего есть свои достоинства и недостатки, не так ли?

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

К настоящему времени вы, должно быть, думаете,

Что может быть лучшим и наиболее предпочтительным методом балансировки наших данных?

Хорошо, давайте познакомим вас с гибридным интеллектуальным алгоритмом SMOTETomek, который превосходит почти все подходы к исправлению несбалансированных данных!

Поприветствуем СВЯТОЙ ГРАЛЬ!

SMOTETomek

SMOTETomek (который является методом imblearn. SMOTETomek, представляет собой гибридный метод, который использует метод недостаточной выборки (Tomek) с методом избыточной выборки (SMOTE)) включает удаление ссылок Tomek, которые являются пары примеров, которые находятся в ближайшей близости друг к другу или называются ближайшими соседями, но принадлежат к противоположным классам.

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

ВЕЛИКОЛЕПНО!

Давайте теперь посмотрим на практическую реализацию алгоритма SMOTETomek!

Результат, вероятно, будет пересчитывать ваши данные, как показано ниже:

((424788, 30), (424788,))

Теперь давайте посмотрим на исходные и измененные данные и сравним их -

Выход-

Original dataset shape Counter({0: 284315, 1: 492})
Resampled dataset shape Counter({0: 283473, 1: 141315})

Вы можете ясно визуализировать, что в исходном наборе данных было 284315 записей, принадлежащих к классу 0, и только 492 к классу 1, тогда как SMOTETomek пересчитал его до 283473 записей, принадлежащих к классу 0, и 141315 записей к классу 1.

УДИВИТЕЛЬНО!

Заключение

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

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

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

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

Надеюсь, вам понравился этот блог, и еще раз спасибо за то, что терпеливо добрались до конца!

Удачного машинного обучения! :)

До следующего раза…!