Обнаружение мошенничества с онлайн-платежами с использованием машинного обучения в Python

Опубликовано: 13 Февраля, 2023

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

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

Обнаружение мошенничества с онлайн-платежами с использованием машинного обучения в Python

Здесь мы попробуем решить этот вопрос с помощью машинного обучения в Python.

Набор данных, который мы будем использовать, имеет эти столбцы:

Особенность Описание
шаг говорит о единице времени
тип тип совершаемой сделки
количество общая сумма сделки
названиеОрг счет, с которого начинается транзакция
oldbalanceOrg Баланс счета отправителя до транзакции
newbalanceOrg Баланс счета отправителя после транзакции
имяDest счет, который получает транзакцию
старый балансDest Баланс счета получателя до операции
newbalanceDest Баланс счета получателя после транзакции
этоМошенничество Прогнозируемое значение, т.е. 0 или 1

Импорт библиотек и наборов данных

Используемые библиотеки:

  • Pandas: эта библиотека помогает загружать фрейм данных в формате 2D-массива и имеет несколько функций для выполнения задач анализа за один раз.
  • Seaborn/Matplotlib: для визуализации данных.
  • Numpy: Массивы Numpy очень быстрые и могут выполнять большие вычисления за очень короткое время.

Python3




import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

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

Python3




data = pd.read_csv("new_data.csv")
data.head()

Выход :

Чтобы распечатать информацию о данных, мы можем использовать команду data.info().

Python3




data.info()

Выход :

Давайте посмотрим среднее, count , минимальное и максимальное значения данных.

Python3




data.describe()

Выход :

Визуализация данных

В этом разделе мы постараемся разобраться и сравнить все столбцы.

Давайте посчитаем столбцы с разными типами данных, такими как Category, Integer, Float.

Python3




obj = (data.dtypes == "object")
object_cols = list(obj[obj].index)
print("Categorical variables:", len(object_cols))
 
int_ = (data.dtypes == "int")
num_cols = list(int_[int_].index)
print("Integer variables:", len(num_cols))
 
fl = (data.dtypes == "float")
fl_cols = list(fl[fl].index)
print("Float variables:", len(fl_cols))

Выход :

Categorical variables: 3
Integer variables: 2
Float variables: 5

Давайте посмотрим график подсчета столбца «Тип платежа», используя библиотеку Seaborn.

Python3




sns.countplot(x="type", data=data)

Выход :

Мы также можем использовать гистограмму для одновременного анализа столбца «Тип» и «Количество» .

Python3




sns.barplot(x="type", y="amount", data=data)

Выход :

Как на графике хорошо видно, что в основном тип cash_out и transfer максимальны как по количеству, так и по сумме.

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

Python3




data["isFraud"].value_counts()

Выход :

0    8000
1    8000

Набор данных уже находится в том же количестве. Так что нет необходимости в примерке.

Теперь давайте посмотрим на распределение столбца шага с помощью distplot.

Python3




plt.figure(figsize=(15, 6))
sns.distplot(data["step"], bins=50)

Выход :

На графике показано максимальное распределение между 200 и 400 шагами.

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

Python3




plt.figure(figsize=(12, 6))
sns.heatmap(data.corr(),
            cmap="BrBG",
            fmt=".2f",
            linewidths=2,
            annot=True)

Выход :

Предварительная обработка данных

Этот шаг включает в себя следующее:

  • Кодировка столбца Тип
  • Удаление ненужных столбцов, таких как nameOrig, nameDest
  • Разделение данных

Python3




type_new = pd.get_dummies(data["type"], drop_first=True)
data_new = pd.concat([data, type_new], axis=1)
data_new.head()

Выход:

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

Python3




X = data_new.drop(["isFraud", "type", "nameOrig", "nameDest"], axis=1)
y = data_new["isFraud"]

Давайте проверим форму извлеченных данных.

Python3




X.shape, y.shape

Выход:

((16000, 10), (16000,))

Теперь давайте разделим данные на 2 части: обучение и тестирование.

Python3




from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42)

Обучение модели

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

  • Логистическая регрессия : Он предсказывает, относится ли вероятность данных к определенной категории или нет.
  • XGBClassifier : относится к деревьям решений Gradient Boosted. В этом алгоритме деревья решений создаются в последовательной форме, и всем независимым переменным присваиваются веса, которые затем вводятся в дерево решений, предсказывающее результаты.
  • SVC: SVC используется для поиска гиперплоскости в N-мерном пространстве, которая четко классифицирует точки данных. Затем он выдает результат в соответствии с наиболее близким элементом.
  • RandomForestClassifier : классификатор случайного леса создает набор деревьев решений из случайно выбранного подмножества обучающего набора. Затем он собирает голоса из разных деревьев решений, чтобы сделать окончательный прогноз.

Давайте импортируем модули соответствующих моделей.

Python3




from xgboost import XGBClassifier
from sklearn.metrics import roc_auc_score as ras
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier

Закончив импорт, давайте обучим модель.

Python3




models = [LogisticRegression(), XGBClassifier(),
          SVC(kernel="rbf", probability=True),
          RandomForestClassifier(n_estimators=7,
                                 criterion="entropy",
                                 random_state=7)]
 
for i in range(len(models)):
    models[i].fit(X_train, y_train)
    print(f"{models[i]} : ")
     
    train_preds = models[i].predict_proba(X_train)[:, 1]
    print("Training Accuracy : ", ras(y_train, train_preds))
     
    y_preds = models[i].predict_proba(X_test)[:, 1]
    print("Validation Accuracy : ", ras(y_test, y_preds))
    print()

Выход:

Оценка модели

Лучшей моделью является XGBClassifier. Давайте построим матрицу путаницы для того же самого.

Python3




from sklearn.metrics import plot_confusion_matrix
 
plot_confusion_matrix(models[1], X_test, y_test)
plt.show()

Выход: