ИСТОРИИ ДАННЫХ | ОБНАРУЖЕНИЕ МОШЕННИЧЕСТВА | ПЛАТФОРМА KNIME ANALYTICS

Обнаружение мошенничества с помощью нейронного автоэнкодера

Соавторы: Маарит Видманн и Катрин Мельчер

Эта статья заняла 13-е место среди самых читаемых статей 2019 года в журнале Dataversity.

Впервые опубликовано в Dataversity.

Проблема обнаружения мошенничества

Обнаружение мошенничества относится к более общему классу задач - обнаружению аномалий. Аномалия - это общее понятие, не зависящее от предметной области. Он относится к любому исключительному или неожиданному событию в данных, будь то механический отказ устройства, аритмическое сердцебиение или мошенническая транзакция, как в этом исследовании. Действительно, выявить мошенничество - это значит выявить аномалию в области набора законных «обычных» транзакций по кредитным картам. Как и все аномалии, мы никогда не уверены в том, какую форму примет мошенническая транзакция. Нужно быть готовым ко всем возможным «неизвестным» формам.

Есть два основных подхода к обнаружению мошенничества.

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

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

В этом примере мы используем данные кредитной карты, предоставленные Kaggle. Набор данных содержит транзакции по кредитным картам, выполненные в сентябре 2013 года держателями карт из Европы.

Транзакции имеют две метки: 1 для мошеннических и 0 для обычных транзакций. Общее количество транзакций - 284 807. Лишь 492 (0,2 процента) из них являются мошенническими. Каждая транзакция по кредитной карте представлена ​​30 характеристиками: 28 основных компонентов, извлеченных из исходных данных кредитной карты, время между каждой транзакцией и первой транзакцией в наборе данных и сумма, уплаченная за каждую транзакцию.

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

Архитектура автоэнкодера

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

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

На рисунке 1 показана архитектура простого автокодировщика только с одним скрытым слоем, представленная в этом видео Нейронные сети [6.1]: автокодировщик - определение »Хьюго Ларошелля. Более сложные архитектуры автоэнкодера включают дополнительные скрытые слои.

Для этого тематического исследования мы построили автоэнкодер с тремя скрытыми слоями с количеством единиц 30–14–7–7–30 и tanh и reLu в качестве функций активации, как впервые было представлено в сообщении блога Обнаружение мошенничества с кредитными картами с использованием Автоэнкодеры в Керасе - TensorFlow для хакеров (Часть VII) , Венелин Валков.

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

Правило для кандидатов на мошенничество

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

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

Разделите исходный набор данных на несколько подмножеств (рисунок 2). Определять:

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

Нейронные сети принимают только нормализованные входные векторы, попадающие в [0,1]. Нам нужно будет нормализовать все входные характеристики, чтобы они попали в [0,1].

Здесь нам нужно будет разделить данные два раза. Первый раздел изолирует все «нормальные» транзакции для автокодировщика и резервирует все мошеннические транзакции для набора проверки (см. Узел Row Splitter на рисунке 3).

Затем из набора данных только с «нормальными» транзакциями две трети зарезервированы для обучения и тестирования автокодировщика, а оставшаяся одна треть - для добавления к мошенническим транзакциям для набора проверки (см. Первый узел разделения на рисунке 3).

Поскольку нейронные сети принимают только нормализованные входные векторы, обучающие данные для автокодировщика нормализуются для попадания в диапазон [0,1] с использованием узла нормализатора. Такая же нормализация также применяется к данным в наборе тестов с помощью узла Нормализатор (Применить) (рисунок 3).

Второй узел Partitioning выполняет случайное разбиение на 90% и 10% данных. Набор данных с 90 процентами исходных данных становится обучающим набором и идет на обучение автокодировщика, в то время как оставшиеся 10 процентов становятся набором тестов и используются для оценки производительности автокодировщика после каждой эпохи обучения (см. Второй узел разбиения на рис. ).

Расширение Keras Deep Learning

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

Одно из расширений глубокого обучения объединяет функции из библиотек Keras, которые, в свою очередь, интегрируют функции TensorFlow в Python.

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

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

Преимущество использования интеграции Deep Learning Keras с платформой Analytics заключается в резком сокращении объема кода для написания, особенно для операций предварительной обработки. Просто перетащив несколько узлов, вы можете создать или импортировать желаемую нейронную архитектуру, которую вы впоследствии можете обучить с помощью узла Keras Network Learner и применить с узлом DL Network Executor - всего несколько узлов с простой конфигурацией, а не обращениями к функции в коде Python.

Установка

Чтобы интеграция Deep Learning Keras работала, необходимо установить несколько частей головоломки:

  • Python (включая TensorFlow)
  • Керас
  • Расширение Deep Learning Keras

Более подробную информацию о том, как установить и подключить все эти компоненты, можно найти на странице документации Deep Learning - Keras Integration.

Полезное видео, объясняющее, как устанавливать расширения, можно найти на этом телеканале на YouTube.

Обучение и тестирование автоэнкодера

Нейронная сеть (30–14–7–7–30), показанная на рисунке 1, построена абсолютно без кода с использованием узлов из интеграции Deep Learning (рисунок 5).

  • Один входной слой с таким же количеством измерений (30), что и входные объекты (узел входного слоя Keras)
  • Скрытый слой, который сжимает данные в 14 измерений с помощью функции активации tanh (узел Keras Dense Layer).
  • Скрытый слой, который сжимает данные в 7 измерений с помощью функции активации reLU (узел Keras Dense Layer)
  • Еще один скрытый слой, который преобразует входные 7 измерений в 7 других измерений с помощью функции активации tanh (узел Keras Dense Layer)
  • Один выходной слой, который расширяет данные обратно до тех же измерений, что и во входном векторе (30), используя функцию активации reLU (узел Keras Dense Layer)

Этот автоэнкодер обучается с использованием узла Keras Network Learner, где количество эпох и размер пакета установлены на 50, алгоритм обучения установлен на Адама, а функция потерь установлена ​​как среднеквадратичная ошибка.

После обучения сеть применяется к данным из набора тестов для воспроизведения входных функций с помощью узла DL Network Executor и сохраняется для развертывания в виде файла Keras с помощью узла Keras Network Writer.

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

Последний рабочий процесс для обучения и тестирования нейронного автокодировщика с использованием данных транзакции кредитной карты показан на рисунке 6. Рабочий процесс можно бесплатно загрузить с сервера EXAMPLES по адресу: EXAMPLES / 50_Applications / 39_Fraud_Detection / Keras_Autoencoder_for_Fraud_Detection_Training.

Оптимизация порога K

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

Как видно на рисунке 7, автокодировщик улавливает 84 процента мошеннических транзакций и 86 процентов законных транзакций в наборе для проверки. Учитывая высокий дисбаланс между количеством обычных и мошеннических транзакций в проверочном наборе (96 668 против 492), результаты обнадеживают.

Развертывание детектора мошенничества

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

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

Рабочий процесс развертывания показан на рисунке 8. Его можно бесплатно загрузить с сервера EXAMPLES в разделе EXAMPLES / 50_Applications / 39_Fraud_Detection / Keras_Autoencoder_for_Fraud_Detection_Deployment.

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

В то же время данные о новых транзакциях по кредитным картам считываются из файла с помощью узла File Reader. Этот конкретный файл содержит две новые транзакции с уже нормализованными функциями.

Данные транзакции подаются в сеть автоэнкодера и воспроизводятся на выходном уровне с помощью узла DL Network Executor.

После этого вычисляется среднеквадратичная ошибка между исходными и реконструированными объектами с использованием узла Python Script (2 ⇒ 1) со следующим сценарием:

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

Как видите, система (модель автокодировщика + правило расстояния) определяет первую транзакцию как обычную, а вторую транзакцию как мошенническую.

Выводы

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

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

Что касается аномалий, то восстановление входного вектора автокодировщиком, надеюсь, не удастся. Следовательно, если мы вычислим расстояние (мы использовали среднеквадратичное расстояние) между исходным вектором данных и восстановленным вектором данных, в случае аномалий будет отображаться гораздо большее значение расстояния, чем в случае «нормальных» данных. То есть мы можем распознать кандидатов на мошеннические транзакции по значению расстояния между входным вектором и восстановленным выходным вектором. Если перевести это в правило, если значение расстояния превышает пороговое значение K, то у нас есть кандидат на мошенничество / аномалию.

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

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

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