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

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

Рассмотрению несбалансированных данных посвящена эта статья.

Прочитав эту статью, вы узнаете:

  • Что такое дисбаланс классов и почему важно с ним бороться
  • Какие показатели использовать для оценки производительности ваших моделей
  • Методы повторной выборки данных (недостаточная и избыточная выборка)
  • Какие модели классификации лучше всего подходят для дисбаланса классов

Без лишних слов, давайте начнем!

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

Несбалансированные данные относятся к набору данных, в котором распределение целевых классов представляет собой неэквивалентные пропорции. Как правило, это касается задач классификации (бинарной или многоклассовой), когда классы представлены неодинаково.

Почему важно иметь дело с дисбалансом данных?

Вы могли заметить, что после обучения модели классификации на несбалансированных данных точность составляет 90%. Затем вы копаете немного глубже и обнаруживаете, что 90% данных принадлежат одному классу.

Вот для чего эта статья!

Дисбаланс классов не только распространен, но иногда и ожидаем

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

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

Это то, что вы узнаете в следующих шагах.

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

Совет 1: выбор правильных показателей

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

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

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

Это результирующая матрица путаницы из примера набора данных:

  • Точность. Мера точности классификатора и качества положительного прогноза, сделанного моделью.
  • Отзыв: показатель полноты классификатора, поэтому он отвечает на вопрос: какая доля фактических положительных результатов классифицируется правильно.
  • Оценка F1 (или F-оценка): средневзвешенное значение точности и полноты. Таким образом, эта оценка учитывает как ложноположительные, так и ложноотрицательные результаты.

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

# Classification report
from sklearn.metrics import classification_report
print(classification_report(y_test, predictions))

Совет 2. Повторная выборка данных

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

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

  • Избыточная выборка: создание копий классов меньшинства для выравнивания классов.
  • Недостаточная выборка: удаление выборок из большинства классов до тех пор, пока не будет получено эквивалентное распределение классов.

Это пример того, как вы можете применить недостаточную выборку:

# Reducing the number of samples corresponding to a majority class
#number of samples to delete
N= 20000
df = df.drop(df[df['label'].eq("majority-class")].sample(N).index)

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

Совет 3: стратифицированное разделение обучения и тестирования

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

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

Это пример двух методов реализации для стратифицированного разделения поезд-тест:

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

Совет 4. Выбирайте надежные модели для устранения дисбаланса классов

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

Некоторые модели, которые я бы рекомендовал:

  • Алгоритмы на основе дерева часто хорошо работают с несбалансированными наборами данных.
  • Алгоритмы повышения ( например, AdaBoost, XGBoost и т. д.) идеально подходят для несбалансированных наборов данных, поскольку на каждой последующей итерации более высокий вес присваивается классу меньшинства. во время каждого взаимодействия в обучении корректируются веса неправильно классифицированных классов.

Чтобы избежать этих ошибок:

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

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

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

Заключение

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

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