Различные способы обработки несбалансированных данных для задачи классификации

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

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

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

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

Например, мы работаем с набором данных транзакций по кредитным картам, в котором мы должны предсказать, является ли транзакция мошеннической транзакцией или подлинной транзакцией. Поскольку это проблема типа классификации, этот набор данных имеет две метки целевого класса: «Мошенничество» и «Без мошенничества».

Предположим, что набор данных содержит 1000 транзакций, из которых 960 транзакций относятся к категории «Без мошенничества», а остальные (40) транзакций относятся к категории «Мошенничество».

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

Проблемы с несбалансированными данными

Чтобы понять проблемы несбалансированных данных, давайте рассмотрим пример диагностики заболеваний. Предположим, мы создаем модель машинного обучения, в которой нам нужно предсказать заболевание на основе существующего набора данных. В наборе данных на каждые 1000 записей заболевание диагностируется только у 40 пациентов. Таким образом, класс большинства составляет 96% без болезней, а класс меньшинства - только 4% с болезнью.

Теперь предположим, что наша классификационная модель предсказывает, что 1000 из 1000 пациентов не болеют. В этом случае точность нашей модели составит 96%.

Здесь мы видим, что наша модель не может идентифицировать класс меньшинства (пациенты с заболеванием), несмотря на точность 96%.

Это основная проблема с несбалансированным набором данных.

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

Здесь у нас есть несколько областей, в которых распределение классов изначально несбалансировано:

  • Обнаружение мошенничества
  • Прогноз оттока
  • Обнаружение анамолии
  • Претензия Прогноз

Методы обработки несбалансированных данных

1. Выбор правильных показателей оценки

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

Например, accuracy является хорошей оценочной метрикой, когда распределение всех классов равно. Подумайте о сценарии, в котором 95 % наблюдений относятся к классу A, а 5 % — к классу B. В этом случае модель может легко достичь 95-процентной точности обучения, предсказывая каждую обучающую выборку в классе A.

Поэтому необходимо выбрать правильную метрику оценки при работе с несбалансированным набором данных. В таких случаях мы можем рассматривать такие показатели, как precision, recall, и F1-score, а не использовать точность для измерения производительности.

Что важно помнить при построении и развертывании модели? Понимание своей конечной цели. Читайте наше интервью с экспертами по машинному обучению из Стэнфорда, Google и HuggingFace, чтобы узнать больше.

2. Повторная выборка

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

Существует два подхода к повторной выборке для преобразования несбалансированного набора данных в сбалансированный набор данных. Эти два подхода — недостаточная выборка и избыточная выборка.

я. Недостаточная выборка

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

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

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

Пример повторной выборки:

В этом примере мы видим дисбаланс в нашем целевом классе, так как value_counts() для целевого класса «0»намного выше, чем у целевого класса1”.

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

from sklearn.utils import resample
#creating two different dataframes for majority and minority class 
df_majority = df_train[(df_train['Is_Lead']==0)] 
df_minority = df_train[(df_train['Is_Lead']==1)] 
#Upsample minority class
df_minority_upsampled = resample(df_minority, replace=True, 
                                 n_samples= 131177, random_state=42)
# Combining majority class with upsampled minority class
df_upsampled = pd.concat([df_minority_upsampled, df_majority])

После апсемплинга данные выглядят так:

Этот метод resample() из пакета sklearn можно использовать как для избыточной выборки данных класса меньшинства, так и для недостаточной выборки данных класса большинства.

Преимущество:

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

Недостаток:

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

3. УДАР

SMOTE расшифровывается как Synthetic Minority Oversampling Technique. Этот метод используется для передискретизации данных класса меньшинства. Этот метод позволяет избежать переобучения, которое происходит в нашей модели, когда к основному набору данных добавляются повторяющиеся наблюдения классов меньшинства (в методе повторной выборки).

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

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

from imblearn.over_sampling import SMOTE
# Resampling the minority class
sm = SMOTE(sampling_strategy='minority', random_state=42)
# Fit the model
oversampled_X, oversampled_Y = sm.fit_sample(df_train.drop('Is_Lead', axis=1), df_train['Is_Lead'])
oversampled_data = pd.concat([pd.DataFrame(oversampled_Y), pd.DataFrame(oversampled_X)], axis=1)

Сбалансированные данные после применения SMOTE:

Преимущество:

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

Недостаток:

  • Этот метод не очень эффективен для данных высокой размерности.

Заключительные слова

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

В зависимости от характеристик несбалансированных данных будут различаться наиболее эффективные методы обработки таких данных.

Я надеюсь, что эта статья даст вам некоторое представление об использовании различных методов для работы с несбалансированными данными.

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

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение наших еженедельных информационных бюллетеней (Еженедельник глубокого обучения и Информационный бюллетень Comet), присоединиться к нам в Slack и следить за Comet в Twitter и LinkedIn, чтобы получать ресурсы, события и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.