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

Вступление:-

Согласно последнему отчету Nilson, в 2016 году убытки по кредитным картам во всем мире превысили 24,71 миллиарда долларов. Barclays сообщает, что 47% всех случаев мошенничества с кредитными картами происходит в США. Важно, чтобы компании, выпускающие кредитные карты, могли распознавать мошеннические транзакции по кредитным картам, чтобы с клиентов не взималась плата за товары, которые они не покупали. Этого можно достичь с помощью моделей машинного обучения, в частности, фреймворков глубокого обучения.

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

а) Автоэнкодер

б) Самоорганизующиеся карты (SOM)

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

Наборы данных содержат транзакции, совершенные европейскими держателями кредитных карт в сентябре 2013 года. В этом наборе данных представлены транзакции, которые произошли за два дня, из которых у нас 492 мошенничества из 284 807 транзакций. Набор данных сильно несбалансирован, на положительный класс (мошенничество) приходится 0,172% всех транзакций.

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

а) Предсказание мошенничества с помощью автокодировщика

Импорт необходимых зависимостей

Чтение набора данных и присвоение его Fraud_detection_df. (вы можете скачать набор данных здесь)

Изучение набора данных

>

> (284807, 31)
>  Time        V1        V2        V3        V4        V5        V6        V7  \
0   0.0 -1.359807 -0.072781  2.536347  1.378155 -0.338321  0.462388  0.239599   

         V8        V9  ...         V21       V22       V23       V24  \
0  0.098698  0.363787  ...   -0.018307  0.277838 -0.110474  0.066928   

        V25       V26       V27       V28  Amount  Class  
0  0.128539 -0.189115  0.133558 -0.021053  149.62      0  

>  False

Набор данных состоит из 284807 строк и 31 столбца. Столбцы с V1 по V28 - это основные компоненты, полученные с помощью PCA, основная причина их получения - обеспечение конфиденциальности данных. Единственные функции, которые не были преобразованы с помощью PCA, - это «Время» и «Сумма». В настоящее время нет нулевых значений.

Сколько нет. класса 1 и класса 0 присутствуют в графе класса?

>

0    284315
1       492
Name: Class, dtype: int64

Согласно приведенному выше результату, у нас есть 284315 номеров класса «0», то есть нормальных транзакций, и 492 номера. класса «1», т.е. мошеннические операции. Отсюда следует вывод, что набор данных сильно несбалансирован.

Для большей наглядности нанесем эти результаты на график.

>

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

>

(492, 31)
(284315, 31)

Прежде чем применять Autoencoder, позвольте нам сначала получить общий обзор того, что это такое?

Автоэнкодеры

Проще говоря, он производит или предсказывает результат при одном и том же вводе. В идеале работа автоэнкодера состоит в том, чтобы производить выходные данные, которые почти аналогичны (если не точны) заданным входным данным. Другими словами, «Автокодирование» - это алгоритм сжатия данных, в котором происходит сжатие и распаковка данных.

Автоэнкодер можно разбить на следующие части

  • Кодировщик: эта часть сети сжимает или понижает дискретизацию входных данных до меньшего количества бит. Пространство, представленное этим меньшим количеством битов, часто называют скрытым пространством или узким местом. Узкое место также называют «максимальной точкой сжатия», поскольку в этой точке входной сигнал сжимается до максимума. Эти сжатые биты, представляющие исходный ввод, вместе называются «кодированием» ввода.
  • Декодер: эта часть сети пытается восстановить вход, используя только кодировку входа. Когда декодер может восстанавливать входные данные точно так, как они были поданы на кодировщик, вы можете сказать, что кодировщик способен создавать лучшие кодировки для входа, с которыми декодер может хорошо реконструировать!

Ниже представлено визуальное представление автоэнкодера.

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

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

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

Нормализация данных

Используя StandardScaler, мы нормализуем набор данных, чтобы не было предвзятости. Применяя StandardScaler, мы просто преобразуем данные так, чтобы их распределение имело среднее значение 0 и стандартное отклонение 1.

Разделение данных на обучающую и тестовую

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

>

(227441, 30)

Построение модели автоэнкодера

Модели в Keras определяются как последовательность слоев.

1. Определите, что входной слой имеет правильное количество входов, что выполняется путем определения, в input_dim our случае это 30 столбцов.

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

Мы будем использовать функцию активации выпрямителя («relu»). Мы можем визуализировать функцию Relu, как показано ниже: -

Он определяется как y = max (0, x). Диапазон этой функции активации составляет (0, inf), и она не дифференцируется в нуле. Поскольку функция градиента всегда равна 1, это позволяет нам передавать максимальное количество ошибки через сеть во время фазы обратного распространения.

Ниже мы описываем нашу модель автоэнкодера, у которой такой же номер. слоев кодирования и декодирования, описываемых как плотные слои. Наша модель имеет 20, 10, 10 и 30 нейронов соответственно. Мы тренируемся с регулировкой l1.

Составление модели автоэнкодера

Имея дело с моделями DL, мы располагаем большим объемом данных. Не рекомендуется обучать сразу все данные. Вместо этого мы делим их на порции (партии).

Размер пакета - это количество данных в каждой части. После того, как мы закончили со всеми партиями, мы завершаем одну эпоху. Чтобы получить лучшую точность, мы должны обучать данные для большого числа. эпох. Другими словами, эпоха описывает, сколько раз алгоритм видит весь набор данных. Итак, каждый раз, когда алгоритм просматривает все выборки в наборе данных, эпоха завершается.

Мы рассматриваем оптимизатор как «Adadelta» - это алгоритм оптимизации, который можно использовать вместо классической процедуры стохастического градиентного спуска для итеративного обновления сетевых весов на основе данных обучения. В основном в Адаме рассчитываются индивидуальные скорости адаптивного обучения для различных параметров из оценок первого и второго моментов градиентов.

>

Accuracy of model is 77.06350218306234

Точность нашей модели автоэнкодера составляет 77,06% (что неплохо, учитывая, что у нас нет большого набора данных, поскольку это основное требование для моделей DL, чтобы обеспечить лучшую точность.

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

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

График потерь модели

давайте попробуем построить график потерь и точности модели, используя matplot lib

>

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

Точность и отзыв

Точность и отзыв определяются как:

  • Истинно положительные: точки данных, помеченные как положительные, но на самом деле положительные.
  • Ложноположительные результаты: точки данных, помеченные как положительные, но на самом деле отрицательные.
  • Истинно отрицательные: точки данных, помеченные как отрицательные, но на самом деле отрицательные.
  • Ложноотрицательные: точки данных, помеченные как отрицательные, но на самом деле положительные.

Точность определяет актуальность полученных результатов. Напомним, количество возвращаемых релевантных результатов. Оба значения могут принимать значения от 0 до 1. В идеале у нас должна быть модель, в которой оба значения равны 1, то есть High Precision и High Recall.

позволяет нам построить график Recall vs Precision

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

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

Позволяет построить график полноты и точности для различных пороговых значений

>

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

Построение кривой ROC

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

>

Прогнозирование модели

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

>

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

>

Заключение:-

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

б) Предсказание мошенничества с использованием самоорганизующихся карт (SOM)

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

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

Здесь мы видим простую самоорганизующуюся структуру карты. У нас есть n нейронов, которые, по сути, представляют особенности в нашем наборе данных. Наши входные данные могут быть представлены n векторами. Над ними мы видим так называемые нейроны карты. Цель этих нейронов - представить данные, полученные на входных нейронах, в виде двумерных данных. Это означает, что в этом примере самоорганизующаяся карта использует обучение без учителя для кластеризации этих трехмерных данных в двухмерное представление. Каждый нейрон карты связан с каждым входным нейроном, и нейроны карты (в форме шестиугольника) не связаны друг с другом. Это заставляет каждый нейрон карты не обращать внимания на ценности своих соседей.

Шаги включают в SOM: -

1.) Сначала инициализируются веса каждого узла.

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

2.) Модель. Итерируйте по каждому нейрону в скрытом слое, чтобы найти Best Matching Unit (BMU). BMU - это нейрон карты с наилучшим вычисленным результатом.

3) Примените обновление веса к BMU и соседним нейронам.

Веса соседей BMU также изменены, чтобы они были ближе к этому входному вектору. Для обновления мы должны знать радиус соседей, которые будут обновлены. Этот радиус изначально большой, но он уменьшается с каждой итерацией (эпохой). Итак, следующий шаг в обучении самоорганизующихся карт - это вычисление упомянутого значения радиуса. Применяется следующая формула:

4) Каждый вес нейронов в радиусе корректируется, чтобы сделать их более похожими на входной вектор.

λ в формуле определяется следующим образом:

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

5) Повторяйте шаги с 2 по 4 до тех пор, пока не будет достигнут предел итераций или сходимость (среднее расстояние вектора кодовой книги между всеми нейронами и всеми данными меньше некоторого порога)

Давайте запрограммируем, как SOM работает с нашим набором данных.

Импорт необходимых зависимостей

Чтение CSV-файла и его присвоение Fraud_detection_df

Проверка наличия какого-либо пропущенного значения в наборе данных

>

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

Данные обучения и тестирования

Масштабирование обучающих данных

Импорт библиотеки SOM из minisom и обучение ее работе с X

Визуализация результатов

>

График узлов, показывающий выбросы. Узел, обведенный зеленым, - это узел с наибольшим расстоянием (показан белым). Немного менее важные узлы обведены желтым.

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

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