Небольшая наука о данных для обнаружения аномалий

One class SVM: введение

Эксперт или новичок в машинном обучении, вы, вероятно, слышали о Support Vector Machine (SVM) - контролируемом алгоритме машинного обучения, который часто цитируется и используется в задачах классификации. SVM используют гиперплоскости в многомерном пространстве, чтобы отделить один класс наблюдений от другого. Естественно, SVM используется при решении задач мультиклассовой классификации.

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

И последнее, о чем стоит упомянуть: если вы знакомы с sklearn библиотекой, то заметите, что существует алгоритм, специально разработанный для так называемого обнаружения новизны. Он работает аналогично тому, что я только что описал при обнаружении аномалий с использованием одноклассной SVM. На мой взгляд, именно контекст определяет, следует ли называть это обнаружением новизны, обнаружением выбросов или чем-то в этом роде.

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

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

Шаг 1. Импортируйте библиотеки

Для этой демонстрации нам понадобятся три основные библиотеки - для обработки данных python и numpy, для построения модели sklearn и для визуализации matlotlib.

# import libraries
import pandas as pd
from sklearn.svm import OneClassSVM
import matplotlib.pyplot as plt
from numpy import where

Шаг 2. Подготовьте данные

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

# import data
data = pd.read_csv("https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv")
# input data
df = data[["sepal_length", "sepal_width"]]

Шаг 3: моделирование

Вместо настройки гиперпараметров, как в других алгоритмах классификации, SVM одного класса использует nu в качестве гиперпараметра, который используется для определения того, какая часть данных должна быть классифицирована как выбросы. nu = 0,03 означает, что алгоритм определит 3% данных как выбросы.

# model specification
model = OneClassSVM(kernel = 'rbf', gamma = 0.001, nu = 0.03).fit(df)

Шаг 4: Прогноз

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

# prediction
y_pred = model.predict(df)
y_pred

Шаг 5: фильтрация аномалий

# filter outlier index
outlier_index = where(y_pred == -1) 
# filter outlier values
outlier_values = df.iloc[outlier_index]
outlier_values

Шаг 6: Визуализация аномалий

# visualize outputs
plt.scatter(data["sepal_length"], df["sepal_width"])
plt.scatter(outlier_values["sepal_length"], outlier_values["sepal_width"], c = "r")

Резюме

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

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