В идеале существует два класса данных; класс большинства и меньшинства. Класс большинства состоит из большой части набора данных, класс меньшинства содержит меньшую часть данных.

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

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

Существуют различные способы борьбы с несбалансированными данными. В моем случае я использовал SMOTE.

(Синтетическое меньшинство перед методом выборки):

Некоторые другие методы, которые могут быть использованы:

Повторная выборка с другими коэффициентами

Предыдущую стратегию можно отрегулировать, играя с соотношением между редким и обильным классом. Наилучшее соотношение во многом зависит от данных и используемых моделей. Однако вместо того, чтобы тренировать все модели с одним и тем же соотношением в ансамбле, стоит попробовать собрать альтернативные соотношения. Поэтому, если обучены 10 моделей, может иметь смысл иметь модель с соотношением 1: 1 (редко: много), а другую с 1: 3 или даже 2: 1. В зависимости от используемой модели это может повлиять на вес, который получает один класс.

Объединение различных наборов данных с повторной выборкой

Добавление дополнительных данных — самый простой метод успешного обобщения модели. Проблема в том, что классификаторы, которые поставляются заранее, такие как логистическая регрессия и случайный лес, часто обобщают, опуская необычный класс. Построение n моделей с использованием всех данных из редкого класса и n различных образцов из многочисленного класса является простой передовой практикой. Если вы хотите объединить 10 моделей, вы можете оставить, например, 1000 экземпляров необычного класса, случайно выбрав 10 000 экземпляров распространенного класса. Просто разделите 10 000 примеров на 10 равных частей и обучите 10 отдельных моделей.

K-кратная перекрестная проверка

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

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

Почему я выбрал SMOTE для решения этой проблемы?

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

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

SMOTE увеличивает процент только меньшинства случаев после получения полного набора данных в качестве входных данных. Рассмотрим несбалансированный набор данных, в котором только 1% случаев имеет целевое значение A (класс меньшинства) и 99% случаев имеют значение B. Вы должны ввести 200 для процента SMOTE в параметрах компонента, чтобы удвоить процент случаев меньшинства от того, что это было ранее.

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

Ниже приведены некоторые из кодов, которые могут помочь вам лучше понять концепцию:

from imblearn.over_sampling import SMOTE

Если imblearn не установлен, используйте команду pip install imblearn.

smote = SMOTE()
x_smote, y_smote = smote.fit_resample(X_scaled, Y)
print(x_smote.shape)
print(y_smote.shape)

Теперь мы определяем функцию и даем новой переменной smoteнесколько определений. Определение x_smote, y_smote поможет вызвать их для вывода.

x_smote.head()

Давайте напечатаем значения x.

Значения X и Y были определены при объявлении зависимых и независимых переменных.

Проверьте код ниже.

# Separating dependent and independent variables
X = df.drop(["booking_complete"] , axis=1)
Y = df["booking_complete"]

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

x_train, x_test, y_train, y_test = train_test_split(x_smote,y_smote, test_size=0.25,random_state=101)
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)

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

Спасибо, что нашли время прочитать. Подписывайтесь на Твиттер