Неконтролируемое обучение при обнаружении аномалий с использованием Python

Обнаружение аномалий с помощью Z-Score: выберите низковисящие фрукты

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

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

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

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

Контур

  • Гипотеза метода z-score при обнаружении аномалий
  • Быстрый взгляд на набор данных
  • Масштабирование функций со стандартизацией
  • Выбор функций путем визуализации распределения выбросов / отклонений
  • Преобразование PCA и выбор функций II
  • Постройте и обучите модель z-показателя
  • Обозначьте свой прогноз и оцените с помощью нескольких пороговых значений
  • Запустить тестовый набор данных
  • Заключение

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

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

Основная идея настолько проста, что применение метода z-оценки похоже на сбор низко висящих плодов по сравнению с другими подходами, например, LOC, Isolation forest и ICA. Также практично использовать z-показатель в качестве эталона в системе неконтролируемого обучения, которая должна объединять несколько алгоритмов для окончательных оценок аномалий.

Быстрый взгляд на набор данных

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

Форма набора данных - (284807, 31).

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

«Сумма»: сумма транзакции.

«Класс»: 1 означает мошенничество, 0 в противном случае.

«V1» ~ «V28»: результат уменьшения размерности PCA исходных необработанных данных для защиты идентификационных данных пользователей и конфиденциальных функций.

Проверяем комплектность. Отсутствуют пропущенные значения, что экономит нам работу.

Вычислите асимметрию набора данных. Как показано ниже, на каждую 1000 объектов приходится 1,72 мошеннических транзакций.

Визуализируйте распределение переменных «Время» и «Сумма».

Визуализируйте распределение переменных от «V1» до «V28».

Масштабирование функций со стандартизацией

Как показано на рисунках выше, реальные данные редко подчиняются идеальному нормальному распределению. Более того, функции «Время», «Количество» и «V *» находятся на разных уровнях.

В приведенном ниже коде будут стандартизированы функции, кроме «Класса», так что эти функции будут сосредоточены вокруг 0 ​​со стандартным отклонением 1. Я хотел бы подчеркнуть, что стандартизация данных для обеспечения того, чтобы функции находились в одном относительном диапазоне, является важным шагом. а также общее требование для многих алгоритмов машинного обучения.

Выбор функций путем визуализации распределения выбросов / отклонений

Красные столбцы представляют собой мошеннические транзакции, а синие столбцы - обычные транзакции.

Мы видим, что некоторые функции не могут хорошо отделить выбросы от выбросов, например, «Время», «Сумма», «V19» и «V26». Красные полосы (выбросы) перекрываются синими полосами (выбросы). Эти особенности нельзя было ввести в модели z-значений, потому что мы не можем отличить красный от синего.

Основываясь на той же теории, я бы выбрал функции [«V9», «V10», «V11», «V12», «V14», «V16», «V17», «V18»] и проигнорировал бы остальные. Мы можем ожидать, что он сможет выявить значительную часть аномалий, которые зависят от «пересечений» между этими случаями.

Преобразование PCA и выбор функций II

Выполните преобразование PCA, чтобы получить набор данных с уменьшенной размерностью. Обратите внимание, что для n_components установлено значение 8, что означает, что прогноз должен сохранять 100% дисперсию. Дополнительные сведения о PCA см. В статье «Выявление аномалий с помощью обычного PCA: я слежу за вами».

Из графика ниже мы видим, что функции [«V11», «V14», V16] не могут разделить синий и красный, очевидно, что они будут исключены перед загрузкой модели.

Постройте и обучите модель z-показателя

  1. Создайте и запустите модель z-оценки, чтобы получить оценку аномалии для каждой функции.
  2. Затем усредните оценку каждой функции в общую оценку для всех функций, которая сохраняется в столбце «all_cols_zscore».
  3. После этого объедините набор данных оценки с меткой «Класс»: 1 означает мошенничество, 0 в противном случае.
  4. Проверьте Кумулятивное распределение полученных нами оценок.

# plot the cumulative histogram
fig2, ax2 = plt.subplots(figsize=(12, 6))    
x = zScore_df['all_cols_zscore']
ax2 = sns.kdeplot(x, shade=True, color="r", cumulative=True)
# tidy up the figure
ax2.grid(True)
ax2.legend(loc='right')
ax2.set_title('Cumulative Distribution of Scores', fontsize = 18)
ax2.set_xlabel('zScore_df[\'all_cols_zscore\']', fontsize = 14)
ax2.set_ylabel('Likelihood of score', fontsize = 14);

Как показано на кумулятивном распределении оценок, около 90% оценок меньше 0,1; почти 100% оценок имеют значение менее 0,2.

Обозначьте свой прогноз

А теперь самое интересное! Как обозначить предсказание полученными выше оценками?

  1. Отсортируйте набор данных по «all_cols_zscore» от самого высокого до самого низкого. Чем выше оценка, тем больше ненормальность.
  2. Пометьте верхние 350 строк меткой «predClass», равной 1, а остальные - 0, что означает, что мы прогнозируем первые 350 объектов как мошеннические транзакции.
  3. Рассчитайте и распечатайте точность и отзыв.

  • Форма обучающего набора данных - 190820 строк с 5 функциями.
  • На каждую 1000 транзакций приходится 1,72 мошеннических транзакций.
  • Точность обозначения 350 случаев как мошенничества составляет 55,14%, что означает, что если мы прогнозируем 100 транзакций как мошенничество, 55,14 случаев из них на самом деле являются мошенничеством.
  • Отзыв, когда мы помечаем 350 случаев как мошенничество, составляет 58,48%, что означает, что при наличии 100 мошеннических транзакций алгоритм может успешно обнаружить 58,48 случаев.

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

Еще один шаг: оценка с несколькими пороговыми значениями

Мы оценили модель, когда мы пометили 350 организаций, набравших наибольшее количество баллов, как мошенников. Что, если мы обозначим самые крупные 400, 450, 500,… случаев как мошенничество? Как будет работать метод z-оценки при разных порогах?

  1. Создайте список пороговых значений, используемый для маркировки.
  2. Рассчитайте и распечатайте точность и отзыв при нескольких пороговых значениях.
  3. Сохраните точность и отзыв в наборе данных о производительности.

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

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

Запустить тестовый набор данных

Как бы наш метод z-оценки работал с данными, которых он никогда не видел? Давайте запустим его на тестовом наборе данных.

Впечатляет, что он лучше работает с тестовым набором данных с запоминанием 67,90% при установке порога на 0,17%. На каждые 100 мошеннических транзакций мы можем выявить 67,90 мошеннических операций, используя построенный нами метод z-score.

Вычислить среднюю точность (AP) на основе оценок прогнозов, хранящихся в «all_cols_zscore».

Постройте кривую ROC.

Заключение

Ага! В этой статье мы рассмотрели несколько интересных моментов. Напомним, мы говорили о:

  • основная идея метода z-оценки в обнаружении аномалий
  • масштабирование функций со стандартизацией
  • выбор функций и преобразование PCA
  • построить и обучить модель на наборах данных для обучения / тестирования
  • оценка с несколькими порогами

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

стандартизация - ›выбор функций I -› PCA - ›выбор функций II -› модель поезда - ›оценка -› запуск на тестовых данных - ›оценка

Вы можете проводить эксперименты, используя другие возможные процедуры, например,

  • процедура I: стандартизация - ›модель поезда
  • процедура II: стандартизация - ›PCA -› модель поезда
  • процедура III: стандартизация - ›выбор характеристик I -› модель поезда

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

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

Подводя итог, если есть только одна вещь, которую вы бы убрали, это должно быть:

процедура обнаружения аномалий в контролируемом обучении с использованием метода z-score

стандартизация - ›выбор функций I -› PCA - ›выбор функций II -› модель поезда - ›оценка -› запуск на тестовых данных - ›оценка

процедура обнаружения аномалий при обучении без учителя с использованием метода z-score

стандартизация - ›модель поезда -› оценка - ›запуск на тестовых данных -› оценка

И последнее, но не менее важное: наслаждайтесь собранными фруктами!

Запишитесь на курс Udemy 🦞:

Рекомендательная система с машинным обучением и статистикой