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

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

Постановка задачи

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

Набор данных

Набор данных можно найти здесь. Он состоит из 284 807 транзакций, совершенных европейскими держателями карт в сентябре 2013 года, из которых 492 идентифицированы как мошеннические транзакции. Из соображений конфиденциальности PCA выполняется для получения 28 основных компонентов вместе с непреобразованными переменными, включая время и сумму транзакции. Функции Время и Сумма не являются преобразованными данными.

Описание переменной

Признаки V1, V2, … V28 являются основными компонентами, полученными с помощью PCA, единственные признаки, которые не были преобразованы с помощью PCA, — это «Время» и «Количество».

Функция «Время» содержит секунды, прошедшие между каждой транзакцией и первой транзакцией в наборе данных.

Функция «Сумма» — это сумма транзакции, эту функцию можно использовать, например, для зависимого от затрат обучения. Функция «Класс» — это переменная ответа, которая принимает значение 1 в случае мошенничества и 0 в противном случае.

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

  1. Попробуйте изменить показатель производительности
  2. Попробуйте выполнить повторную выборку набора данных
  3. Попробуйте создать синтетические сэмплы
  4. Попробуйте разные алгоритмы

Понимание проблемы

Метрическая ловушка

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

Матрица путаницы

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

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

Изменить показатель производительности

Как мы видели выше, точность — не лучшая метрика для оценки несбалансированных наборов данных, поскольку она может вводить в заблуждение. Метрики, которые могут обеспечить лучшее понимание, включают:

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

Техника повторной выборки

Широко распространенный метод работы с сильно несбалансированными наборами данных называется передискретизацией. Он состоит в удалении выборок из класса большинства (недостаточная выборка) и/или добавлении дополнительных примеров из класса меньшинства (избыточная выборка).

1: Случайный класс меньшинства с избыточной выборкой

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

2: Случайный класс большинства с недостаточной выборкой

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

УДАР

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

Ниже приведен код Python для реализации SMOTE.

Вывод

До сих пор мы пытались использовать различные показатели производительности, такие как матрица путаницы, F1-Score, кривая Precision-Recall для различных методов, таких как избыточная выборка класса меньшинства, недостаточная выборка класса большинства и SMOTE (Техника синтетической избыточной выборки меньшинства). Основываясь на наших оценочных показателях, мы обнаружили, что недостаточная выборка мажоритарного класса приводит к снижению производительности по сравнению с методами избыточной выборки и SMOTE. Здесь по-прежнему трудно выбрать победителя. Алгоритм, который мы использовали во всех сценариях, был XGBoost.

Дальнейшие улучшения. Для дальнейшего улучшения модели можно рассмотреть следующие варианты:

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

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

Пожалуйста, посмотрите.

Счастливого обучения :)