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

В 2021 году только в Бразилии число случаев мошенничества с кредитными картами увеличилось более чем на 30 %, что составило более 2 миллионов попыток мошенничества за период наблюдения в 6 месяцев.

Согласно опросу, проведенному Kaspersky в 2022 году, 20% населения Бразилии уже пострадали от мошенничества с кредитными картами.

То есть 2 из 10 бразильцев уже сталкивались с какой-либо проблемой, связанной с этой темой.

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

Я приведу несколько важных кодов и визуализаций для понимания контекста. Однако, если вы хотите ознакомиться с полным кодом, пожалуйста, посетите полный исходный код на Colab.

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

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

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

В столбце «класс» все транзакции были разделены на бинарные группы, 0 или 1.

If the transaction was rated 0, it is a normal, genuine transaction.
If the transaction is classified in group 1, it has been identified as a fraudulent transaction for some reason.

Теперь давайте углубимся в наши данные.

Используя метод .describe(), мы можем определить некоторые интересные моменты в нашем фрейме данных.

Time Amount Class
count 242086.000000 242086.000000 242086.000000
mean 94857.597379 88.612429 0.001727
std 47490.660832 247.655020 0.041517
min 0.000000 0.000000 0.000000
25% 54234.000000 5.662500 0.000000
50% 84747.000000 22.000000 0.000000
75% 139362.000000 77.580000 0.000000
max 172792.000000 19656.530000 1.000000

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

Считаем "0" = Normal and "1" = Fraud, видим во всех квартилях, что большая часть значений подходит для обычных транзакций, и лишь небольшая группа — для подозреваемых или действительно мошеннических транзакций.

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

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

Sum of missing values:
 Time      0
V1        0
V2        0
V3        0
V4        0
V5        0
V6        0
V7        0
V8        0
V9        0
V10       0
V11       0
V12       0
V13       0
V14       0
V15       0
V16       0
V17       0
V18       0
V19       0
V20       0
V21       0
V22       0
V23       0
V24       0
V25       0
V26       0
V27       0
V28       0
Amount    0
Class     0
dtype: int64

Всего пропущенных значений: 0

Все наши строки заполнены, и отсутствуют пропущенные значения.

Имея эту информацию, мы можем продолжить анализ без необходимости заполнять пробелы или удалять информацию.

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

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

Почему? Поскольку постоянно осуществляются тысячи банковских транзакций, at every second, minute, hour and day. очевидно, что в банке или в клиентах той или иной карты большинство этих пользователей честны и совершают ежедневные транзакции в законном порядке. и законным путем, поэтому мошеннических транзакций существует лишь малая часть.

Информация в нашей базе данных проясняет эту ситуацию.

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

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

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

В этих других типах вопросов можно разделить наборы данных между 50/50, 70/30, 60/40 или самым различным образом, с более близкой пропорцией.

Процент мошеннических транзакций

fraud_percentage = (df["Class"].value_counts(normalize=True) *100).loc[1]
print(f"The percentage of entries classfied as fraud is {fraud_percentage:.4f}%.")

Процент записей, классифицированных как мошенничество, составляет 0,1727%.

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

Всего 0,17%, при этом 492 транзакции считаются мошенничеством, а более 280 000 – обычными транзакциями.

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

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

При анализе диаграмм с учетом "Amount" мы выявили разницу в отношении этих значений.

Плотность

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

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

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

Но другие, такие как "V4", "V7", "V8", "V14", "V16" и другие, имеют огромную степень различия.

Пока что мы можем сделать некоторые выводы, прежде чем продолжить:

  • The data is highly imbalanced between genuine and normal.
  • No missing data
  • Columns "Time" and "Amount" are not normalized

Подготовка данных

Поскольку это вопрос классификации, мы будем использовать Logistic Regression. Для этого необходимо обработать наши данные и адаптировать их для этой цели.

— -› Мы стандартизируем информацию

— -› Разделите наши данные на обучающие данные и тестовые данные

— -› Сбалансировать данные

— -› Избегайте переобучения

Далее выполняется разделение между training data и validation data.

#Separate X and Y
X = df_clean.drop("Class", axis = 1)
y = df["Class"]

X_train, X_val, y_train, y_val = train_test_split(X, y, stratify=y, shuffle = True)

Балансировка данных

#use under-sampling technique
rus = RandomUnderSampler()
X_rus, y_rus = rus.fit_resample(X_train, y_train)

class_counts_after = pd.Series(y_rus).value_counts()
print(class_counts_after)

data = pd.DataFrame({
     "Class":["0","1"],
     "Count":[class_counts_after[0], class_counts_after[1]]

})

sns.barplot(x="Class", y="Count", data=data);

Записей в «0»: 313
Записей в «1»: 313

Матрица корреляции

С помощью графиков корреляционной матрицы мы можем проверить разницу между балансировкой data before и after.

Гораздо интереснее извлечь некоторую релевантную информацию с правильно сбалансированными данными.

Модель машинного обучения

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

Для следующих шагов нашей модели мы будем использовать классификатор Logistic Regression.

Наша модель была обучена и сделаны прогнозы.

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

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

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

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

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

Он предоставляет подробную информацию о том, как модель correctly и incorrectly классифицирует различные классы в наборе данных.

Матрица путаницы особенно полезна для задач бинарной классификации, где есть два разных класса, таких как "positive" и "negative", "true" и "false" и т. д. Однако ее можно распространить и на задачи многоклассовой классификации.

Давайте разберемся с четырьмя основными элементами матрицы путаницы:

True Positive (TP): указывает количество наблюдений, правильно отнесенных к положительному классу.

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

True Negative (TN): указывает количество наблюдений, правильно отнесенных к отрицательному классу. В этих случаях модель правильно предсказала отрицательный класс.

False Negative (FN): Указывает количество наблюдений, неправильно классифицированных как принадлежащие к отрицательному классу, когда на самом деле они принадлежат к положительному классу. Это ошибка II рода (ложноотрицательный результат).

Давайте проверим матрицу путаницы в нашем случае:

Classification Report:

               precision    recall  f1-score   support

           0     0.9998    0.9669    0.9831     60417
           1     0.0453    0.9048    0.0863       105

    accuracy                         0.9668     60522
   macro avg     0.5226    0.9358    0.5347     60522
weighted avg     0.9982    0.9668    0.9815     60522

Accuracy:0.9668

Мы будем использовать бенчмарк AUC ("Area Under the Roc Curve").

Значение AUC находится в диапазоне от 0 to 1, и чем ближе к 1, тем лучше.

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

Если модель не соответствует 100 % своих прогнозов, это означает, что ее AUC equals 0

Если модель соответствует 100% своих прогнозов, ее AUC is considered 1.

  • › AUC: 0,9358

В текущей модели, над которой мы работаем, был идентифицирован AUC of 93%

Делаем прогнозы на тестовом наборе

Наши данные были разделены на 3 основных набора:

-› Обучение

-› Проверка

-› Тест

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

Однако, поскольку существует разница в расположении данных в столбце "Time" и в столбце "Amount", необходимо предварительно стандартизировать эти столбцы.

Classification Report:

               precision    recall  f1-score   support

           0     0.9999    0.9679    0.9836     42647
           1     0.0479    0.9324    0.0911        74

    accuracy                         0.9678     42721
   macro avg     0.5239    0.9501    0.5374     42721
weighted avg     0.9982    0.9678    0.9821     42721

Accuracy: 0.9678

  • › AUC: 0,9501

Здесь мы определили accuracy of 97% и AUC of 94%, что немного выше, чем в предыдущем наборе.

Выводы

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

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

Модель достигла точности более 96%, при этом 97% accuracy for true negatives (немошеннические транзакции) и 93% accuracy for true positives (мошеннические транзакции).

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

По мере продвижения вперед мы продолжим отслеживать производительность модели, собирать новые данные и изучать передовые методы, чтобы еще больше расширить ее возможности.

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