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

Деловая значимость

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

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

Существует несколько методов обработки несбалансированных данных, в том числе:

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

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

Обучение с учетом затрат: этот метод включает корректировку функции стоимости модели с учетом несбалансированного распределения классов.

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

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

Фрагменты кода

# Resampling:
from imblearn.over_sampling import RandomOverSampler
from imblearn.under_sampling import RandomUnderSampler

# Oversampling
ros = RandomOverSampler(random_state=42)
X_resampled, y_resampled = ros.fit_resample(X, y)

# Undersampling
rus = RandomUnderSampler(random_state=42)
X_resampled, y_resampled = rus.fit_resample(X, y)
Synthetic Data Generation:
Copy code
from imblearn.over_sampling import SMOTE

# Generate synthetic samples
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X, y)





# Cost-sensitive learning:
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import make_scorer
from sklearn.model_selection import GridSearchCV

# Define custom cost function
def custom_cost_func(y_true, y_pred):
    # Code to calculate cost based on class imbalance

# Instantiate logistic regression model
clf = LogisticRegression()

# Define parameter grid
param_grid = {'C': [0.001, 0.01, 0.1, 1, 10]}

# Make custom scoring function
cost_scorer = make
scorer(custom_cost_func, greater_is_better=False)

# Instantiate grid search
grid_search = GridSearchCV(clf, param_grid, scoring=cost_scorer)

# Fit grid search
grid_search.fit(X, y)
# Ensemble Methods:

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

# Instantiate decision tree model
base_estimator = DecisionTreeClassifier(random_state=42)

# Instantiate BaggingClassifier
bag_clf = BaggingClassifier(base_estimator=base_estimator, n_estimators=10, max_samples=0.8, random_state=42)

# Fit the model
bag_clf.fit(X, y)
# Advanced techniques:
from imblearn.keras import BalancedBatchGenerator
from imblearn.over_sampling import SMOTE
from keras.losses import binary_crossentropy
from keras.models import Sequential
from keras.layers import Dense

# Define custom loss function
def custom_loss(y_true, y_pred):
    return binary_crossentropy(y_true, y_pred)

# Instantiate sequential model
model = Sequential()

# Add layers
model.add(Dense(32, input_dim=X_train.shape[1], activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# Compile model with custom loss
model.compile(optimizer='adam', loss=custom_loss, metrics=['accuracy'])

# Create balanced batches
train_generator = BalancedBatchGenerator(X_train, y_train, sampler=SMOTE(), batch_size=32)

# Fit the model
model.fit_generator(train_generator.flow(X_train, y_train, batch_size=32), steps_per_epoch=len(train_generator), epochs=10)

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

Важно использовать показатели оценки, подходящие для несбалансированных данных, таких как точность, полнота, оценка F1 и площадь под кривой ROC (AUC-ROC). Эти показатели дают более полное представление о производительности модели, чем одна лишь точность.

Настройка гиперпараметров

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

Комбинирование техник

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

Практические кейсы

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

Заключение и будущая работа

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

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

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

Обо мне

Я, Шубхам Кумар, специалист по данным в Ab-Inbev. У меня около 5 лет опыта решения сложных проблем с данными, и я предлагаю инновационные решения. Я специализируюсь на прогнозном моделировании, разрабатываю и внедряю в производство современную модель машинного обучения.

Следуйте за мной на medium и свяжитесь со мной в LinkedIn, чтобы узнать об удивительных материалах по науке о данных.

Не стесняйтесь делиться своими мыслями в разделе комментариев ниже