Сравнение AutoXGB со стандартным XGBoost при обнаружении мошеннических транзакций по кредитным картам

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

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

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

Содержание

(1) Сбор и понимание данных
(2) Обработка дисбаланса классов
(3) Выбор показателя производительности
(4) Базовый уровень — XGBoost с RandomizedSearchCV
(5) Испытание AutoXGB
(6)Окончательный вердикт

Нажмите здесь, чтобы просмотреть репозиторий GitHub для этого проекта.

(1) Сбор и понимание данных

Обзор

В этом проекте используются данные о транзакциях по кредитным картам из исследовательского сотрудничества Worldline и Machine Learning Group (Брюссельский университет) по обнаружению мошенничества (используется в рамках GNU Public License).

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

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

Преобразование данных

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

  • Укажите, произошла ли транзакция (i) днем или ночью; (ii) в рабочий или выходной день. Это сделано потому, что схемы мошенничества различаются в зависимости от времени суток и дня недели
  • Охарактеризовать поведение клиентов в отношении расходов (например, средние расходы, количество транзакций) с помощью показателя RFM (давность, частота, денежная стоимость).
  • Классифицировать риск, связанный с каждым платежным терминалом, рассчитав среднее количество случаев мошенничества за определенный период времени.

Предикторы и целевые функции

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

  • TX_AMOUNT: сумма транзакции в долларах [float]
  • TX_DURING_WEEKEND: проводилась ли транзакция в выходные [boolean]
  • TX_DURING_NIGHT: проводилась ли транзакция ночью [boolean]
  • CUSTOMER_ID_NB_TX_*DAY_WINDOW: количество транзакций для каждого клиента за последние 1, 7 и 30 дней [целое число].
  • CUSTOMER_ID_AVG_AMOUNT_*DAY_WINDOW: средняя сумма (в долларах), потраченная каждым клиентом за последние 1, 7 и 30 дней [плавающая переменная]
  • TERMINAL_ID_NB_TX_*DAY_WINDOW: количество транзакций на терминале за последние 1, 7 и 30 дней [целое число].
  • TERMINAL_ID_RISK_*DAY_WINDOW: среднее количество мошеннических транзакций на терминале за последние 1, 7 и 30 дней [целое число].
  • TX_FRAUD: индикатор того, является ли транзакция законной (0) или мошеннической (1) [boolean]

Из целевой переменной TX_FRAUD,мы видим, что имеем дело с задачей бинарной классификации.

Train-Test Split с периодом задержки

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

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

Разделение между поездами и тестами выглядит следующим образом:

  • Набор поездов: 8 недель (2018 – 01 июля по 2018 году – 27 августа)
  • Период задержки: 1 неделя (2018 – 28 августа по 2018 году – 3 сентября)
  • Тестовый набор: 1 неделя (2018 г. – сен. 04 по 2018 г. – сен. 10)

(2) Обработка дисбаланса классов

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

Судя по количеству значений целевой переменной, было всего 4935 случаев мошенничества (0,9%) из 550 000+ транзакций.

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

Конкретная стратегия выборки выглядит следующим образом:

  1. Перевыборка SMOTE для увеличения класса меньшинства до 5 % от общего набора данных (увеличение на 500 % по сравнению с исходным значением 0,9 %), затем
  2. Случайная недостаточная выборка, чтобы класс большинства вдвое превышал размер класса меньшинства (т. е. класс меньшинства на 50 % превышал размер класса большинства).

Несмотря на то, что авторы SMOTE показали, что различные комбинации дают сопоставимые результаты, я выбрал комбинацию 500 %/50 %, потому что в документе показано, что она дает самую высокую точность на примерах меньшинства в наборе данных Oil.

После этой выборки набор данных стал более сбалансированным: класс меньшинств увеличился с 0,9% до 33,3% всего набора данных.

(3) Выбор показателя эффективности

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

Типичными из них являются пороговые показатели, такие как точность и оценка F1. Хотя они могут оценить степень ошибочной классификации, они зависят от определения конкретного порога принятия решения, например, вероятность0,5 = мошенничество.

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

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

Хотя AUC-ROC более распространен, средняя точность выбрана в качестве основной метрики отчетности в этом проекте по следующим причинам:

  • Средняя точность более информативна, чем AUC ROC для несбалансированных наборов данных. Несмотря на то, что мы применили выборку для балансировки наших данных, я чувствовал, что все еще сохраняется некоторый остаточный дисбаланс (67:33 вместо 50:50).
  • Слишком большое количество ложных срабатываний может перегрузить группу по расследованию мошенничества, поэтому мы хотим оценить отзыв (то есть чувствительность) при низких значениях коэффициента ложных срабатываний (FPR). Преимущество использования кривых PR (и AP) по сравнению с ROC заключается в том, что кривые PR могут эффективно подчеркивать производительность модели при низких значениях FPR.

(4) Базовый уровень — XGBoost с RandomizedSearchCV

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

Вот результаты прогнозирования тестового набора из базовой модели, где ключевой показатель Средняя точность равен 0,776. Время обучения составило 13 минут.

(5) Проверка AutoXGB

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

Настройка гиперпараметров осуществляется автоматически с помощью Оптуна, а развертывание осуществляется с помощью FastAPI.

AutoXGB был разработан Абхишеком Тхакуром, исследователем из HuggingFace, который носит титул первого в мире 4-кратного гроссмейстера Kaggle. По его собственным словам, AutoXGB — это легкая задача для настройки моделей XGBoost.

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

Чтобы установить AutoXGB, выполните следующую команду:

pip install autoxgb

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

Вот результаты набора тестов из AutoXGB, где ключевой показатель Средняя точность составляет 0,782. Время обучения составило 9 минут.

(6) Окончательный вердикт

Сравнение результатов

AutoXGB показал несколько более высокий показатель средней точности 0,782 по сравнению с исходным показателем 0,776.

Время, затрачиваемое на обучение AutoXGB, примерно на 30 % меньше и занимает всего 9 минут по сравнению с базовыми 13 минутами.

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

Следующие факторы, вероятно, способствуют повышению производительности AutoXGB:

  • Использование Байесовской оптимизации с Optuna для настройки гиперпараметров, которая работает быстрее, чем рандомизированный поиск, поскольку использует информацию из предыдущих итераций для поиска лучших гиперпараметров за меньшее количество итераций.
  • Тщательный выбор гиперпараметров XGBoost (тип и диапазон) для настройки на основе обширного опыта автора в области обработки данных.
  • Оптимизация использования памяти со специальным приведением типов для сокращения использования памяти, например, преобразование значений с типом данных int64 в int8 (что потребляет в 8 раз меньше памяти)

Важные предостережения

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

Если вы внимательно следили, вы, возможно, заметили, что мы не ввели последовательный период задержки, который мы применяли для разделения обучения/тестированиядля перекрестной проверки (что мы должны были сделать).

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

Еще одна проблема с отсутствием контроля заключается в том, что мы не можем указать показатель оценки для классификатора XGBoost.

В базовой модели я смог установить eval_metric равным aucpr (AUC под кривой PR), что соответствует нашей основной метрике средней точности. Однако жестко запрограммированная метрика оценки в XGBoost Classifier AutoXGB — logloss для двоичной классификации.

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

Не стесняйтесь проверять коды в репозитории GitHub здесь.

Перед тем, как ты уйдешь

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







Ресурсы