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