Применение модели машинного обучения для активного тестирования и классификации транзакций как действительных или нет.
Введение
Идея технологии кредитных карт на самом деле восходит к концу 1800-х годов и исходит из утопического романа Эдварда Беллами Оглядываясь назад (Looking Backward) (Взгляд назад) (Википедия). Впрочем, что-то подобное мы начали видеть только в 20 веке, но ничто по сравнению с тем, что мы имеем сейчас.
Дело в том, что кредитные карты произвели революцию в том, как мы делаем покупки и живем, избавившись от необходимости ходить с кучей наличных денег в карманах. По оценкам, в 2018 году только в США в обращении находилось 1,2 миллиарда карт, при этом 72% взрослых имели хотя бы одну кредитную карту.
К сожалению, эта технология открывает совершенно новые возможности для мошенничества и мошенничества. Эти виды преступлений происходят в основном, когда данные с вашей карты получены незаконным путем из различных источников, но чаще всего в результате утечек баз данных или схем кражи личных данных (ФБР).
Однако существует довольно много мер, которые вы можете предпринять, чтобы предотвратить кражу ваших данных. Просто назвать несколько:
- Убедитесь, что веб-сайт, к которому вы обращаетесь, имеет действующий сертификат безопасности;
- Не сообщайте свою информацию никому, кого вы не знаете;
- Не верьте каждому продукту или инвестиционному предложению, которое вы получаете по электронной почте или на веб-сайте.
Чтобы избежать такого рода мошенничества, банковские компании всегда стараются заблаговременно выявить эти события, чтобы карта могла быть заблокирована, а транзакция сразу же провалилась.
Имея это в виду, мы воспользуемся набором данных, доступным на Kaggle, о двухдневных транзакциях европейского банка в 2013 году и разработаем модель для классификации транзакций как мошеннических или нет.
О нашем наборе данных
Необработанный набор данных состоял из 31 атрибута (столбцов), в которых учитывались данные о времени, сумме и типе транзакции (мошенничество или нет), которые будут нашей целевой переменной. Остальные атрибуты из соображений конфиденциальности были обработаны методом анализа главных компонентов (АГК) для уменьшения размерности, а описание было скрыто. Что касается строк, у нас всего 284407 записей.
Одним из важных аспектов этого набора данных является его естественный дисбаланс. Как и ожидалось, мы должны увидеть намного больше реальных транзакций, чем мошеннических, и это можно увидеть в наших данных. На самом деле только 0,173% (492 записи) классифицируются как мошенничество.
Это на самом деле является проблемой для нашего анализа, но мы займемся этим позже.
Анализ дистрибутивов
Теперь мы рассмотрим два основных (известных) атрибута: «Сумма» и «Время» в отношении типа транзакции и начнем анализировать наши данные.
Глядя на свойство Amount, мы уже можем видеть некоторые характеристики, такие как тот факт, что мошенничество чаще встречается среди меньших значений.
После дальнейшего анализа удалось найти среднюю сумму мошенничества, равную 122,21 евро, но с медианой всего 9,25. EUR, то есть 50% всех транзакций на самом деле меньше или равны последней сумме.
Эта разница между медианой и средним значением на самом деле связана с наличием выбросов, целых чисел, которые не вписываются соответствующим образом в распределение, в результате чего среднее значение становится выше. Сумма самого крупного мошенничества составила 2125,87 евро.
Свойство time, как известно, относится к 48 часам транзакций. Несмотря на то, что у нас нет фактического времени каждой транзакции, глядя на распределение, мы можем сделать несколько выводов. Моменты, когда мы видим более низкие значения, вероятно, перед рассветом, когда мы ожидаем, что люди не будут ходить по магазинам.
Однако для мошеннических транзакций мы не наблюдаем точно такой же закономерности, так как многие транзакции действительно регистрируются в эти периоды суток.
Подготовка набора данных
Несмотря на то, что мы не знаем значения большинства данных, столбцы представлены в различных диапазонах, поэтому первым шагом будет корректировка этих диапазонов. Для этого мы стандартизируем переменные Time и Amount, так как остальные свойства уже обработаны.
Следующим шагом будет разделение нашего набора данных между данными обучения и тестирования, а также в X (независимые переменные) и y (целевые классы). Для этого была выбрана тестовая пропорция 20%, а остальные 80% были отнесены к обучающей выборке, а затем значения были распределены случайным образом.
У нас все еще есть проблема с дисбалансом, но мы займемся ею позже для целей сравнения.
Создание нашего классификатора случайного леса
В качестве модели машинного обучения для этого проекта была выбрана модель Random Forest Classifier из библиотеки Scikit-Learn Python. Случайные леса — это обновление обычных деревьев решений, которые мы интуитивно используем в повседневной жизни, когда пытаемся сделать выбор на основе различных характеристик и ряда истинных или ложных утверждений.
Деревья решений, как правило, создают серию правил и одновременно обрабатывают весь набор данных. Случайные леса, однако, добавляют щепотку (как вы уже догадались) случайности, выбирая разные случайные признаки и записи для каждого из множества построенных деревьев решений, а затем усредняя результаты. Эта изменчивость модели теоретически создает более точные прогнозы, поскольку множество деревьев имеют тенденцию ослаблять индивидуальные ошибки каждого из них.
Однако как нам оценить производительность нашей модели?
Это чрезвычайно важный вопрос, и на него не существует глобальных исчерпывающих ответов. Это всегда зависит от модели и характеристик данных, с которыми мы работаем.
Для нашего конкретного случая, когда у нас есть набор сильно несбалансированных данных и мы ищем бинарную классификацию (действительную или нет), наиболее подходящим методом будет AUC-ROC (область под кривой Рабочие характеристики приемника), мера, которая касается истинной положительной скорости (TPR) и ложной положительной скорости (FPR). Вы можете прочитать больше об этом здесь".
Но, для краткого объяснения, наша оценка AUC-ROC будет иметь значение от 0 до 1, где большие значения означают, что модель лучше правильно определяет нужные классы. Мы также будем использовать параметры prediction и recall для сравнения.
Обучение необработанных данных
В качестве гиперпараметров были выбраны стандартные значения из модели (только установка random_state для воспроизводимости) с общим числом 100 оценок (деревьев решений).
После подгонки модели к обучающим данным мы приступили к прогнозированию классов на наших тестовых данных.
Первая модель с плохо обработанными данными дала окончательную оценку 0,89 в качестве предиктора с практически низким уровнем ложных срабатываний (точность 0,92) и умеренным ложным срабатыванием. отрицательный показатель (отзыв 0,78).
Из-за характера проблемы мой подход заключался в том, чтобы попытаться свести к минимуму количество ложноотрицательных результатов за счет в конечном итоге увеличения количества ложноположительных результатов. Гипотеза состоит в том, что превентивная блокировка (возможная социальная неприятность) предпочтительнее, чем мошенническая транзакция, которая может вызвать такие проблемы, как необходимость возмещения.
Решение проблемы дисбаланса
Как мы видели, наш необработанный набор данных сильно несбалансирован, и у нас есть несколько способов уменьшить эту проблему. Эти методы можно классифицировать как методы избыточной или недостаточной выборки. В этом анализе мы будем использовать оба метода из библиотеки Imbalanced Learn Python.
Как следует из названия, каждый из этих методов либо увеличивает, либо уменьшает количество наблюдений в нашем наборе данных. Мы начинаем с передискретизации с помощью SMOTE (Техника передискретизации синтетического меньшинства) для целевой пропорции 1:10 (всего 10%), что по существу создает новые записи для меньшего класса (мошенничество), генерируя значения свойств, которые соответствуют исходным наблюдениям.
Для недостаточной выборки мы будем использовать метод Random Under Sampler для пропорции 5:10 (двойной класс меньшинства), который случайным образом выбирает некоторые из самых больших (действительных) записей класса и стирает их из набора данных.
Таким образом, теперь у нас есть треть всего набора в виде мошенников. Важно отметить, что этому преобразованию подверглась только обучающая выборка. Мы хотим, чтобы данные тестирования были максимально реальными, чтобы правильно оценить нашу модель.
Ниже мы можем увидеть параллельное сравнение распределения до и после устранения дисбаланса.
Теперь мы приступаем к созданию новой модели, на этот раз с более сбалансированным набором данных.
Обучение новых обработанных данных
Те же гиперпараметры были сохранены для сравнения, и теперь мы смогли получить показатель AUC-ROC 0,94, что на 0,5 балла выше, чем у предыдущей модели. Желаемый результат был достигнут: меньше ложноотрицательных результатов за счет большего количества ложноположительных результатов.
Заключение
В этом проекте удалось определить алгоритм Random Forest как эффективный способ классификации мошеннических транзакций по кредитным картам. На большом и несбалансированном наборе данных мы могли бы проверить точность модели до обработки данных и после нее.
Чтобы устранить дисбаланс, к обучающей выборке были применены 2 метода: SMOTE и Random Under Sampling. С их помощью первоначальный дисбаланс мошеннических транзакций в 0,17% превратился в пропорцию 66/33 между категориями.
Основной показатель, выбранный для оценки производительности модели, AUC-ROC, был значительно улучшен при переходе от исходной модели к обработанной: 0,89 и 0,94. > баллов соответственно.
Обработка дисбаланса эффективно улучшила производительность модели, но также увеличила коэффициент ложных срабатываний. Ввиду характера проблемы такой результат оправдан, так как желательно лучше выявлять мошенничество, а не несколько ложных срабатываний.
Спасибо за поддержку!
Вы можете получить доступ ко всей записной книжке здесь.