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

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

Обнаружение поддельной валюты

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

  • Дисперсия изображения, преобразованного в вейвлеты
  • Асимметрия изображения, преобразованного в вейвлеты
  • Эксцесс изображения, преобразованного в вейвлеты
  • Энтропия изображения

Целевое значение равно 0 для настоящих банкнот и 1 для поддельных банкнот. Теперь давайте начнем с этой задачи по обнаружению поддельных валют с помощью машинного обучения. Я начну эту задачу с импорта необходимых пакетов:

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

Исследование данных

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

Таким образом, у нас нет пропущенных значений в данных.

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

Приведенная выше круговая диаграмма показывает, что 56% банкнот являются подлинными, а остальные 44% банкнот — поддельными.

Теперь давайте проверим, сбалансированы ли наши данные с целевыми значениями:

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

Обработка данных

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

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

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

Теперь я стандартизирую данные, используя метод StandardScalar, предоставленный Scikit-learn:

Логистическая регрессия для обнаружения фальшивых валют

Теперь я буду обучать и тестировать нашу модель для обнаружения поддельной валюты с помощью алгоритма логистической регрессии. Давайте сначала подгоним данные модели логистической регрессии для обучения модели:

Теперь давайте проверим точность нашей модели:

Модель логистической регрессии достигла точности 97,67%. И не только это, когда наша модель обнаружения поддельной валюты предсказывала, что банкнота настоящая, она была правильной в 100% случаев.

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

Приведенный выше вывод показывает, что производительность нашей модели составляет 97,67%, что означает, что наша вероятность того, что наша модель машинного обучения правильно предскажет, является ли банк поддельным, составляет 97,67%. Впечатляющий? Нет?

Предсказание по одной банкноте

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

Из приведенного выше вывода мы знаем, что эта банкнота не фальшивая, так как значение атрибута класса равно 0.

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

Приведенный выше вывод показывает, что наша банкнота не фальшивая, что является правильным выводом.

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