Введение

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

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

Набор данных

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

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

  1. Дисперсия вейвлет-преобразованного изображения (непрерывное).
  2. Асимметрия вейвлета Преобразованное изображение (непрерывное).
  3. Эксцесс вейвлет-преобразованного изображения (непрерывный).
  4. Энтропия изображения (непрерывная).

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

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

Исследовательский анализ данных

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

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

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

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

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

Мы можем заметить, что у нас нет сильно коррелированных переменных. Можно утверждать, что ~(-0,6) между эксцессом и асимметрией достаточно, но анализ природы этих метрик может сказать нам, что это просто совпадение. Мы должны сохранить все переменные во входном наборе, поскольку каждая из них вносит достаточный вклад в дисперсию целевой переменной.

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

Наивный байесовский классификатор

Для этой задачи мы собираемся использовать довольно простой механизм классификации, называемый наивным байесовским классификатором. Его «мозги» — теорема Байеса апостериорной вероятности:

Давайте поговорим о том, как работает этот алгоритм. По этой причине нам нужно упростить наш набор данных. Предположим, что у нас есть только одна переменная, и пусть это будет Variance Wavelet. Поскольку мы имеем дело с непрерывной переменной, нам нужно будет ввести некоторый диапазон этой переменной, для которой мы будем вычислять вероятность. Выберем диапазон от 50% до 75%. Итак, наша D = дисперсия [50%-75%]. Чтобы наш алгоритм делал прогнозы, нам нужно вычислить P(h|D) для каждой возможной гипотезы. Поскольку гипотеза состоит в том, фальшивая наша банкнота или нет, нам нужно будет вычислить P(h = 0 | D) и P(h = 1 | D).

Мы можем представить следующий расчет как «учитывая, что дисперсия вейвлет-преобразования некоторого изображения банкноты составляет от 0,49 до 2,82, какова вероятность того, что оно является поддельным (или подлинным)». Значения, упомянутые ранее, являются правильными значениями 50-го и 75-го процентиля из EDA выше.

Алгоритм фактически делает прогноз, выбирая большую вероятность между P(h = 0 | D) и P(h = 1 | D). Вот и все. Вся магия машинного обучения для этого алгоритма — просто старая добрая теорема Байеса.

Сама классификация

Для готового классификатора мы будем использовать библиотеку scikit-learn. Код можно увидеть здесь:

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

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

Анализ результатов

Мы видим, что графики ROC абсолютно одинаковы! Это означает, что наш самодельный гауссовский NB верен и работает точно так же, как и библиотечный.

Говоря о результатах, 0,844 — это достойный результат, который показывает, что модель надежна и должна быть в состоянии точно предсказать подделку невидимых банкнот.

Возможные улучшения

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

Заключение

  • Наивный байесовский алгоритм — это простой и быстрый алгоритм, который можно использовать для проверки концепции или быстрого прогнозирования.
  • Требуется исследовательский анализ данных, чтобы увидеть, можем ли мы использовать PCA для уменьшения размерности.
  • Кривая ROC может быть показана для анализа качества нашей модели».

Исходный код

Полный исходный код можно найти здесь.