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

Что такое обнаружение аномалий?

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

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

Однако только в 1980-х годах методы обнаружения аномалий стали использоваться в области компьютерных наук. Система обнаружения вторжений (IDS), впервые изобретенная доктором Дороти Э. Деннинг в 1987 году, стала основой для современных систем обнаружения аномалий. IDS используется в сетевом трафике для обнаружения вредоносных угроз компьютерным сетям. Традиционные IDS были основаны на методах, основанных на правилах, где для выявления угроз использовались заранее определенные правила. Но по мере развития технологий эти методы вскоре стали неэффективными.

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

Что такое аномалия?

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

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

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

Что не так с предыдущими методами?:

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

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

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

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

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

  1. Пространственная кластеризация на основе плотности (DBSCAN):

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

Пространственная кластеризация на основе плотности (DBSCAN) является одним из таких методов, поскольку он точно предполагает, что аномалии не следуют нормальным закономерностям, наблюдаемым в данных.

Реализация на Python:

#Importing necessary libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import StandardScaler

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

Сначала мы загрузим CSV-файл, содержащий данные о клиентах торгового центра, в фрейм данных pandas df. Затем мы выберем столбцы: Годовой доход (тыс. долл. США) и Оценка расходов (1–100) в качестве обучающих данных.

#Loading Mall_Customers Dataset 
df = pd.read_csv('Mall_Customers.csv')

#Storing columns needed for clustering in another Dataframe
X = df.loc[:,['Annual Income (k$)', 'Spending Score (1-100)']].values

Здесь мы построим модель DBSCAN со значением eps: 8 и значением min_samples: 4. Модель после подгонки к данным будет назначать метки, т. е. кластеры внутри данных. Обратите внимание, что мы не указали количество создаваемых кластеров. Модель автоматически вычисляет кластеры, которые мы будем хранить в n_clusters, а все выбросы будем хранить в выбросах. Выбросы отмечены меткой -1.

from sklearn.cluster import DBSCAN
# Initialize DBSCAN model
dbscan = DBSCAN(eps = 8, min_samples= 4)

# Fit the model to the data
dbscan.fit(X)

# Get the labels assigned by the model
labels = dbscan.labels_

# Store the number of clusters and anomalies detected
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
outliers = X[labels==-1]

Чтобы визуализировать кластеры и выбросы, мы построим кластеры, сформированные на диаграмме рассеивания. Сюжет «Годовой доход против. Spending Score» показывает кластеры данных в виде разноцветных точек. Выбросы отмечены красными крестиками.

# Visualize the clusters
colors = np.array([plt.cm.Spectral(each) for each in np.linspace(0, 1, n_clusters)])
sns.set_style('darkgrid')
fig, ax = plt.subplots(figsize=(10,5))
plt.xlabel("Income")
plt.xlabel("Spending Score")
ax.scatter(X[:, 0], X[:, 1], s=10, color=colors[labels])
ax.scatter(outliers[:, 0], outliers[:, 1], s=50, color='red', marker='x')
ax.set_title('DBSCAN for Anomaly Detection')
plt.savefig("dbscan.jpg", dpi = 500)
plt.show()

Плюсы:

  1. DBSCAN может обнаруживать аномалии любой произвольной формы, в отличие от K-средних или других методов кластеризации, которые принимают форму данных.
  2. Как указано выше, нет необходимости указывать количество кластеров, так как DBSCAN вычисляет его автоматически.
  3. Он по-прежнему может идентифицировать кластеры, даже если большая часть данных представляет собой шум.

Минусы:

  1. Алгоритму нужны два гиперпараметра: eps (эпсилон) и minPts (минимум точек/выборок). Оба этих параметра оказывают существенное влияние на работу алгоритма. Следовательно, вам нужно точно настроить их, чтобы получить удовлетворительные результаты.
  2. DBSCAN изо всех сил пытается сгруппировать данные, если данные разбросаны по разным плотностям, поскольку выбор одного значения эпсилон для всех данных становится сложной задачей.
  3. Для больших наборов данных это может стать дорогостоящим с вычислительной точки зрения, поскольку оно включает в себя расчет расстояний между точками данных.

Когда использовать:DBSCAN является эффективным выбором, если распределение данных и аномалии неизвестны.

2. Методы на основе PCA:

Анализ основных компонентов (PCA) — популярный неконтролируемый метод, обычно используемый для извлечения признаков и уменьшения размерности. Тем не менее, это также полезно, когда дело доходит до обнаружения аномалий. Основная идея заключается в том, что PCA идентифицирует новые наборы переменных, которые охватывают наибольшее количество изменений в данных. Эти наборы переменных, называемые «главными компонентами», представляют собой линейную комбинацию исходных переменных в данных.

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

Реализация на Питоне:

# Select the columns to use for PCA
features = ['Age', 'Annual Income (k$)', 'Spending Score (1-100)']
X = df[features].values

# Standardize the data
scaler = StandardScaler()
X_std = scaler.fit_transform(X)

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

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

from sklearn.decomposition import PCA

#PCA for anomaly detection
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_std)

#Calculate the distances from each point to the mean
distances = np.linalg.norm(X_pca - np.mean(X_pca, axis=0), axis=1)

#Set a threshold to define anomalies
threshold = np.percentile(distances, 95)

#Identify anomalies
anomalies = X[distances > threshold]

Переменная threshold определена для получения аномалий. Любая точка данных, расстояние до которой превышает пороговое значение, будет считаться аномалией.

Затем аномалии будут сохранены в аномалиях.

#Set a threshold to define anomalies
threshold = np.percentile(distances, 95)

#Identify anomalies
anomalies = X[distances > threshold]

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

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

# Visualize the data and anomalies
sns.set_style('darkgrid')
fig, ax = plt.subplots(figsize=(10,5))
ax.scatter(X_pca[:, 0], X_pca[:, 1], s=10, alpha=0.5)
ax.scatter(X_pca[distances > threshold, 0], X_pca[distances > threshold, 1],
           s=50, color='red', marker='x')
ax.set_title('PCA for Anomaly Detection')
plt.show()

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

Плюсы:

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

Минусы:

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

Когда использовать.PCA — это мощный метод, который следует использовать для многомерных данных.

3. Автокодировщики:

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

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

Реализация на Питоне:

# Load the dataset
data = pd.read_csv('Mall_Customers.csv')

# Select the columns to use for anomaly detection
features = ['Age', 'Annual Income (k$)', 'Spending Score (1-100)']
X = data[features].values

# Standardize the data
scaler = StandardScaler()
X_std = scaler.fit_transform(X)

Мы определим архитектуру автоэнкодера с размерностью кодирования, т. е. encoding_dim, равной 2. Затем мы создадим input_layer, encoderlayer, и >декодер отдельно. Затем автоэнкодер будет скомпилирован с использованием функции потерь среднеквадратичной ошибки (MSE) и оптимизатора Adam.

# Define the autoencoder architecture
input_dim = X.shape[1]
encoding_dim = 2
input_layer = Input(shape=(input_dim,))
encoder = Dense(encoding_dim, activation='relu')(input_layer)
decoder = Dense(input_dim, activation='sigmoid')(encoder)
autoencoder = Model(inputs=input_layer, outputs=decoder)

# Compile the autoencoder model
autoencoder.compile(optimizer='adam', loss='mse')

Мы установим значение epochs равным 100 и batch_size равным 16. Модель будет обучаться на указанных значениях, генерировать прогнозы для обучающих данных и сохранять их в X_pred. . Ошибка реконструкции для каждой точки данных будет рассчитана и сохранена в mse.

Мы установим порог для определения аномалий на основе 95-го процентиля ошибки реконструкции, как мы это сделали в PCA. Наконец, мы визуализируем аномалии с помощью графика рассеяния.

# Compile the autoencoder model
autoencoder.compile(optimizer='adam', loss='mse')

# Train the autoencoder model
epochs = 100
batch_size = 16
history = autoencoder.fit(X_std, X_std, epochs=epochs, batch_size=batch_size, shuffle=True, validation_split=0.2)

# Generate predictions for the training data
X_pred = autoencoder.predict(X_std)

# Calculate the reconstruction error for each data point
mse = np.mean(np.power(X_std - X_pred, 2), axis=1)

# Set a threshold to define anomalies
threshold = np.percentile(mse, 95)

# Identify anomalies
anomalies = X[mse > threshold]

# Visualize the data and anomalies
sns.set_style('darkgrid')
fig, ax = plt.subplots(figsize=(10,5))
ax.scatter(X_pred[:, 0], X_pred[:, 1], s=10, alpha=0.5)
ax.scatter(anomalies[:, 0], anomalies[:, 1], s=50, color='red', marker='x')
ax.set_title('Autoencoder for Anomaly Detection')
plt.savefig("autoencode.jpg", dpi = 500)
plt.show()

Плюсы:

  1. Автоэнкодеры способны учиться на сложных нелинейных представлениях данных.
  2. Они также могут эффективно обрабатывать многомерные данные за счет уменьшения размеров.
  3. Автоэнкодеры можно использовать как для неконтролируемых, так и для частично контролируемых задач.
  4. Это мощный инструмент, который можно использовать в широком спектре приложений, таких как обработка изображений и сигналов, кибербезопасность и обнаружение мошенничества.

Минусы:

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

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

Вывод:

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

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

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

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