Демистификация типов аномалий: изучение аномалий, вызванных избыточностью

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

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

Пример кода:

# Detecting point anomalies using Z-score
import numpy as np
def detect_point_anomalies(data):
    mean = np.mean(data)
    std = np.std(data)
    threshold = 3  # Adjust the threshold based on the desired sensitivity
    anomalies = []

    for value in data:
        z_score = (value - mean) / std
        if abs(z_score) > threshold:
            anomalies.append(value)

    return anomalies
data = [10, 12, 15, 9, 11, 100, 13, 14, 16]
anomalies = detect_point_anomalies(data)
print("Point anomalies:", anomalies)
  1. Контекстные аномалии.
    Контекстные аномалии возникают, когда точка данных является аномальной только в определенном контексте. Эти аномалии могут быть не обнаружены при рассмотрении всего набора данных, но становятся очевидными при изучении подмножеств или конкретных условий. Контекстуальные аномалии могут возникнуть из-за изменений окружающей среды, сезонности или других контекстуальных факторов.

Пример кода:

# Detecting contextual anomalies using isolation forest
from sklearn.ensemble import IsolationForest
def detect_contextual_anomalies(data):
    clf = IsolationForest(contamination=0.1)  # Adjust contamination according to the expected anomaly rate
    clf.fit(data)
    anomalies = clf.predict(data)

    return [data[i] for i, anomaly in enumerate(anomalies) if anomaly == -1]
data = [[1, 2], [1, 3], [1, 4], [1, 5], [10, 20], [10, 30], [10, 40], [10, 50]]
anomalies = detect_contextual_anomalies(data)
print("Contextual anomalies:", anomalies)
  1. Коллективные аномалии.
    Коллективные аномалии, также известные как групповые аномалии, возникают, когда группа точек данных коллективно отклоняется от ожидаемого поведения. Эти аномалии вызваны не только избыточностью, но и совместным поведением нескольких точек данных. Коллективные аномалии могут возникать в различных сценариях, например при аномалиях сетевого трафика или обнаружении мошенничества.

Пример кода:

# Detecting collective anomalies using k-means clustering
from sklearn.cluster import KMeans
def detect_collective_anomalies(data):
    kmeans = KMeans(n_clusters=2)  # Specify the desired number of clusters
    kmeans.fit(data)
    labels = kmeans.labels_
    centroids = kmeans.cluster_centers_

    anomalies = []

    for i, label in enumerate(labels):
        distance = np.linalg.norm(data[i] - centroids[label])
        if distance > threshold:
            anomalies.append(data[i])

    return anomalies
data = [[1, 2], [1, 3], [1, 4], [1, 5], [10, 20], [10, 30], [10, 40], [10, 50]]
anomalies = detect_collective_anomalies(data)
print("Collective anomalies:", anomalies)

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