Вы когда-нибудь задумывались, когда точность 95+% может абсолютно ничего не значить? Добро пожаловать в мир несбалансированных классов.

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

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

  1. Недостаточная выборка
  2. Передискретизация
  3. Вес класса
  4. Изменение метрики оптимизации

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

Ванильная классификация без SMOTE

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

  1. Загрузка набора данных
  2. ЭДА
  3. Подготовка данных
  4. Построение модели

Загрузка и подготовка набора данных

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

Вот как загрузить его с помощью Python:

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

Соотношение мошеннических транзакций к немошенническим транзакциям составляет около 0,17% от общего числа транзакций. Это пример высокоточных моделей с низким уровнем отзыва. где предпочтительнее более высокий отзыв.

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

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

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

Модель точна на 99%, так в чем проблема?

Приведенная выше матрица путаницы показывает, что модель не работает должным образом, поскольку полнота в этом сценарии составляет 0,76. Это означает, что 24 транзакции были ложно предсказаны как не мошеннические, что не является хорошим признаком. и даже оценка f1 0,85.

Нам еще предстоит выполнить случайную недостаточную выборку, а также избыточную выборку.

Машинное обучение без SMOTE:

давайте выполним недовыборку простым методом. мы знаем, что соотношение мошеннических и немошеннических транзакций составляет 0,17%. поэтому давайте случайным образом выберем 0,17% немошеннических транзакций и объединим их.

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

Теперь давайте создадим классификатор случайного леса, пока эти данные не будут выбраны.

Мы выступили лучше?

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

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

Изменение показателей:

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

  • Отзывать
  • Точность
  • Оценка F1

Напомнить:

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

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

Отзыв = (TP) / (TP+FN)

Пример:

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

Точность:

Точность — это не что иное, как доля положительных идентификаций, которые были на самом деле правильными?

Точность = (TP) / (TP+FP)

Пример:

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

Оценка F1:

Это идеальный баланс между точностью и отзывом.

Мы хотим иметь модель с хорошей точностью и полнотой.