Методы обнаружения аномалий включают статистический анализ, машинное обучение и методы на основе правил. Статистические методы используют отклонения от нормальных распределений, машинное обучение опирается на кластеризацию или нейронные сети, а методы на основе правил выявляют отклонения от заданных шаблонов. Выбор подхода зависит от сложности данных и целей анализа.
Z-оценка (Z-score): Измеряет количество стандартных отклонений от среднего. Применимо для данных с нормальным распределением.Метод межквартильного размаха (IQR): Использует квартильные размахи для определения выбросов.
Методы без учителя
K-Means: Кластеризует данные, выделяя аномалии на основе удаленности от центроидов. DBSCAN: Определяет аномалии на основе плотности данных. One-Class SVM: Обучается на одном классе данных, выделяя аномалии. Isolation Forest: Быстро изолирует аномальные точки с помощью случайных деревьев.
from sklearn.ensemble import IsolationForest
X_train = ...
clf = IsolationForest(contamination=0.1)
clf.fit(X_train)
y_pred = clf.predict(X_train)
Используются при наличии размеченных данных (логистическая регрессия, решающие деревья и т.д.).
Методы скользящего окна (Moving Average)
Выявляют аномалии путем анализа средних значений за периоды.
Методы автокорреляции
Анализируют повторяющиеся шаблоны во временных рядах.
Нейронные сети, кодирующие данные в низкоразмерное пространство и декодирующие их обратно. Высокие ошибки восстановления указывают на аномалии.
from keras.models import Model, Sequential
from keras.layers import Dense, Input
input_dim = X_train.shape[1]
encoding_dim = 14
input_layer = Input(shape=(input_dim, ))
encoder = Dense(encoding_dim, activation="tanh")(input_layer)
encoder = Dense(int(encoding_dim / 2), activation="relu")(encoder)
decoder = Dense(int(encoding_dim / 2), activation="tanh")(encoder)
decoder = Dense(input_dim, activation="relu")(decoder)
autoencoder = Model(inputs=input_layer, outputs=decoder)
autoencoder.compile(optimizer="adam", loss="mean_squared_error")
autoencoder.fit(X_train, X_train, epochs=100, batch_size=32, shuffle=True, validation_split=0.1)
Ставь 👍 и забирай 📚 Базу знаний