Различные способы обработки несбалансированных данных для задачи классификации
В процессе машинного обучения при решении задач классификации вы, вероятно, сталкивались с ситуациями, когда количество наблюдений для одной из меток целевого класса значительно меньше, чем количество наблюдений для других целевых классов. Этот тип данных называется несбалансированными данными, и эта ситуация очень распространена в практических сценариях классификации.
В этой статье мы обсудим, что такое несбалансированные данные и как мы справляемся с ними, используя различные методы. Давайте начнем!
Что такое несбалансированные данные?
Несбалансированный набор данных относится к набору данных, в котором разница между количеством наблюдений для двух разных классов очень велика.
Например, мы работаем с набором данных транзакций по кредитным картам, в котором мы должны предсказать, является ли транзакция мошеннической транзакцией или подлинной транзакцией. Поскольку это проблема типа классификации, этот набор данных имеет две метки целевого класса: «Мошенничество» и «Без мошенничества».
Предположим, что набор данных содержит 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, чтобы получать ресурсы, события и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.