В наши дни почти все используют кредитные и дебетовые карты для совершения покупок в обычных и интернет-магазинах. Ежедневно для покупки товаров и услуг переводятся миллиарды евро, долларов США, иен и т. Д.
Таким образом, нет необходимости разъяснять, почему обнаружение мошеннических транзакций имеет первостепенное значение для поставщиков транзакций, клиентов и продавцы.
Обнаружение мошеннической транзакции или мошеннической транзакции определяется как:

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

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

Набор данных

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

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

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

Теперь давайте загрузим CSV-файл с помощью функции read.csv в R

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

Начало работы с Keras в R

Скорее всего (поскольку вы читаете эту статью) вы знаете, что Keras - это высокоуровневый API нейронной сети. Ключевой особенностью Keras является то, что у него очень быстрая кривая обучения и на самом деле он быстро запускается!

Итак, в RStudio просто скопируйте и вставьте следующий код, чтобы установить Keras и его интерфейс с R

Под термином «обнаружение мошеннических транзакций» мы понимаем, что транзакции могут быть мошенническими или нет. Вы слышите какой-нибудь звон колокольчика (образно)? Надеюсь на это, потому что это типичный сценарий двоичной классификации. У вас есть транзакция, и вы хотите классифицировать ее как мошенническую (1) или не мошенническую (0).

Изначально меньше разделите набор данных на две части:
1. Обучение
2. Тест

Первый набор данных будет использоваться для обучения модели прогнозирования, а второй набор данных будет использоваться для проверки результата модели прогнозирования.
Эти наборы данных не пересекаются, т.е. обучающие данные используются только в процессе обучения, а тестовые данные - только для процесса обучения.
Итак, давайте сделаем это в R!
Мы используем пакет каретки и функцию createDataPartition. Используя столбец «Класс» из наших данных, мы создаем индексы для подмножества (для лучшего разделения) исходного набора данных на две части.

Мы создали индекс, который будет использовать 70% данных по обучению, а остальные 30% - для набора тестов.

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

Определите модель Кераса

Для этого мы используем функцию «keras_model_sequential ()» для инициализации модели. Затем мы определяем плотные слои с помощью функции активации relu. Между плотными слоями мы также добавляем выпадающие слои.
Это сделано для того, чтобы избежать переобучения.

Скомпилируйте модель

Теперь мы компилируем модель, используя функцию потерь «binary_crossentropy». Мы используем эту конкретную функцию, поскольку у нас есть проблема с двоичной классификацией. Мы используем оптимизатор Адама для градиентного спуска и точность показателей. Наконец, мы подогнали нашу модель к наборам данных для обучения и тестирования. Мы также определяем, что наша модель будет работать в течение 100 эпох с использованием размера пакета 5 и 30% валидационного разделения.

Теперь давайте посмотрим на все это в R-коде:

А теперь займемся обучением!

Вы заметите, что во время тренировки вы получите график истории, который показывает прогресс тренировки.

val_loss и val_acc - это значение функции стоимости для данных перекрестной проверки и потерь, а acc - значение функции стоимости для данных обучения.

Теперь давайте посмотрим на краткое изложение нашей модели!

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

Из полученной таблицы мы видим, что ошибка классификации не-мошеннической транзакции как мошеннической составляет всего 9/85288 (0,01%), в то время как ошибка классификации мошеннической транзакции как не-мошеннической составляет 36/109 (33%)!

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

Надеюсь, вам понравилась эта статья, и вы дочитали до конца!



А здесь вы можете скачать весь код, который я использовал для этого проекта.



А здесь можно найти и разветвить Блокнот в kaggle