Проект по обнаружению мошенничества с кредитными картами — проект машинного обучения

Опубликовано: 2021-05-24

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

Давай начнем!

Оглавление

Проект по обнаружению мошенничества с кредитными картами с шагами

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

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

В «Класс» значение 1 представляет мошенническую транзакцию, а значение 0 — действительную транзакцию.

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

Шаг 1: Импорт пакетов

Мы начнем наш проект по обнаружению мошенничества с кредитными картами, установив необходимые пакеты. Создайте файл main.py и импортируйте следующие пакеты:

импортировать numpy как np

импортировать панд как pd

импортировать sklearn

из нормы импорта scipy.stats

из scipy.stats импортировать multivariate_normal

из sklearn.preprocessing импортировать MinMaxScaler

импортировать matplotlib.pyplot как plt

импортировать Seaborn как sns

Шаг 2. Ищите ошибки

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

df = pd.read_csv('мошенничество с кредитными картами/creditcard.csv')

# пропущенные значения

print("отсутствующие значения:", df.isnull().values.any())

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

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

Шаг 3: Визуализация

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

# сюжет нормальный и мошенничество

count_classes = pd.value_counts (df ['Класс'], sort = True)

count_classes.plot (вид = 'бар', гниль = 0)

plt.title("Распределенные транзакции")

plt.xticks(диапазон(2), ['Нормальный', 'Мошенничество'])

plt.xlabel("Класс")

plt.ylabel («Частота»)

plt.show()

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

# Тепловая карта

sns.heatmap(df.corr(), vmin=-1)

plt.show()

Теперь мы создадим графики распределения данных, которые помогут нам понять, откуда взялись наши данные:

рис, топор = plt.subplots(6, 5, сжатие=ложь)

для i, топор в enumerate(axs.flatten()):

ax.set_facecolor('xkcd:уголь')

ax.set_title (df.columns [i])

sns.distplot(df.iloc[:, i], ax=ax, fit=норма,

color="#DC143C", fit_kws={"color": "#4e8ef5"})

ax.set_xlabel()

fig.tight_layout(h_pad=-1.5, w_pad=-1.5)

plt.show()

С помощью графиков распределения данных мы обнаружили, что почти все функции получены из распределения по Гауссу, кроме «Время».

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

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

классы = df['Класс']

df.drop(['Время', 'Класс', 'Сумма'], ось = 1, inplace = Истина)

cols = df.columns.difference(['Класс'])

MMcaller = MinMaxScaler()

df = MMscaller.fit_transform(df)

df = pd.DataFrame (данные = df, столбцы = столбцы)

df = pd.concat ([df, классы], ось = 1)

Шаг 4: Разделение набора данных

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

импортировать панд как pd

импортировать numpy как np

деф train_validation_splits (df):

# Мошеннические транзакции

мошенничество = df[df['Класс'] == 1]

# Обычные транзакции

обычный = df[df['Класс'] == 0]

print('нормальный:', normal.shape[0])

print('мошенничество:', мошенничество.shape[0])

normal_test_start = int(normal.shape[0] * .2)

Fraud_test_start = int(fraud.shape[0] * .5)

нормальный_поезд_старт = нормальный_тест_старт * 2

val_normal = нормальный[:normal_test_start]

val_fraud = мошенничество[:fraud_test_start]

validation_set = pd.concat([val_normal, val_fraud], ось=0)

test_normal = нормальный[normal_test_start:normal_train_start]

test_fraud = мошенничество[fraud_test_start:fraud.shape[0]]

test_set = pd.concat([test_normal, test_fraud], ось=0)

Xval = validation_set.iloc[:, :-1]

Yval = validation_set.iloc[:, -1]

Xtest = test_set.iloc[:, :-1]

Yтест = test_set.iloc[:, -1]

train_set = нормальный[normal_train_start:normal.shape[0]]

Xtrain = train_set.iloc[:, :-1]

вернуть Xtrain.to_numpy(), Xtest.to_numpy(), Xval.to_numpy(), Ytest.to_numpy(), Yval.to_numpy()

Шаг 5: вычислить среднее и ковариационную матрицу

Следующая функция поможет нам вычислить среднее значение и ковариационную матрицу:

def оценка_gaussian_params (X):

"""

Вычисляет среднее значение и ковариацию для каждого признака.

Аргументы:

Х: набор данных

"""

мю = np.mean (X, ось = 0)

сигма = np.cov(XT)

возврат мю, сигма

Шаг 6: Добавьте последние штрихи

В нашем файле main.py мы импортируем и вызываем функции, реализованные на предыдущем шаге, для каждого набора:

(Xtrain, Xtest, Xval, Ytest, Yval) = train_validation_splits(df)

(мю, сигма) = оценка_gaussian_params (Xtrain)

# рассчитать гауссовский pdf

p = multivariate_normal.pdf (Xtrain, мю, сигма)

pval = multivariate_normal.pdf(Xval, мю, сигма)

ptest = multivariate_normal.pdf (Xtest, мю, сигма)

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

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

Мы также рассчитываем оценку F1 в соответствии с нашими значениями истинности и прогнозами. Если найденная оценка F1 выше, чем предыдущая, мы переопределяем переменную «лучший порог».

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

Мы реализуем все процессы, которые мы обсуждали выше, в нашем файле functions.py:

метрики def (y, прогнозы):

fp = np.sum(np.all([прогнозы == 1, y == 0], ось = 0))

tp = np.sum(np.all([прогнозы == 1, y == 1], ось = 0))

fn = np.sum(np.all([прогнозы == 0, y == 1], ось = 0))

точность = (tp / (tp + fp)) если (tp + fp) > 0 иначе 0

отзыв = (tp / (tp + fn)) если (tp + fn) > 0 иначе 0

F1 = (2 * точность * полнота) / (точность +

отзыв) если (точность + отзыв) > 0 иначе 0

вернуть точность, отзыв, F1

def selectThreshold (yval, pval):

e_values ​​= pval

лучший F1 = 0

лучшийЭпсилон = 0

для эпсилон в e_values:

прогнозы = pval < эпсилон

(точность, полнота, F1) = метрика (yval, прогнозы)

если F1 > лучшийF1:

лучшийF1 = F1

лучший эпсилон = эпсилон

вернуть лучшийEpsilon, лучшийF1

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

(эпсилон, F1) = selectThreshold(Yval, pval)

print("Лучший найденный эпсилон:", эпсилон)

print("Лучший F1 в наборе перекрестной проверки:", F1)

(test_precision, test_recall, test_F1) = метрики (Ytest, ptest < эпсилон)

print («Обнаружены выбросы:», np.sum (ptest < epsilon))

print("Точность набора тестов:", test_precision)

print("Вызов тестового набора:", test_recall)

print("Оценка тестового набора F1:", test_F1)

Вот результаты всех этих усилий:

Лучший найденный эпсилон: 5e-324

Лучший набор F1 для перекрестной проверки: 0,7852998065764023

Найдено выбросов: 210

Тестовый набор Точность: 0,9095238095238095

Отзыв тестового набора: 0,7764227642276422

Тестовый набор F1 оценка: 0,837719298245614

Заключение

Вот и все — полнофункциональный проект по обнаружению мошенничества с кредитными картами!

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

Со всеми приобретенными навыками вы также можете активно участвовать в других соревновательных платформах, чтобы проверить свои навыки и получить еще больше практических навыков. Если вам интересно узнать больше о курсе, посетите страницу программы Execitive PG Program in Machine Learning & AI и поговорите с нашим консультантом по карьере для получения дополнительной информации.

Какова цель проекта по обнаружению мошенничества с кредитными картами?

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

Как обнаружение мошенничества с кредитными картами помогает обнаруживать и пресекать мошенничество с кредитными картами?

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

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

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