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

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

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

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

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

Я редко успешно пробовал передискретизацию подхода положительного класса. В последнее время при моделировании для небольшого сегмента пользователей показатель плохих результатов был очень низким (‹1%), и набор данных был очень маленьким (‹ 500K записей). Я не хотел уменьшать число отрицательных примеров, чтобы не потерять какие-либо паттерны отрицательного класса.

Чтобы получить аналогичный эффект, как передискретизация положительного класса, я попробовал параметр scale_pos_weights в алгоритме xgboost в sklearn, чтобы контролировать баланс между положительным и отрицательным классы. Этот параметр предлагается установить в (# отрицательных / # положительных записей).

Преимущества такого подхода:

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

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

Вы можете видеть, что scale_pos_weights = 30 значительно лучше, чем значение по умолчанию.

Заключение:

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

Советы:

  • Не допускайте чрезмерной или недостаточной выборки одного класса в тестовых данных! Данные испытаний должны достоверно отражать население реального мира. Мы все там были :)
  • Используйте кривые точности-отзыва для оценки модели по ROC-AUC в случае сильно несбалансированных классов. Вы заботитесь о правильном прогнозировании истинных положительных результатов, поэтому точность является важным показателем.