Детекція аномалій у часових рядах — гібридний підхід

Уявіть: сервіс моніторингу метрик інфраструктури генерує сотні алертів на день, 90% з яких — хибні. Коли метрики містять тренди, сезонні сплески та концептуальний дрейф, статичні пороги дають понад 60% хибних тривог. В одному з проектів з 500 метриками інженери витрачали по 2 години на день на фільт

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Уявіть: сервіс моніторингу метрик інфраструктури генерує сотні алертів на день, 90% з яких — хибні. Коли метрики містять тренди, сезонні сплески та концептуальний дрейф, статичні пороги дають понад 60% хибних тривог. В одному з проектів з 500 метриками інженери витрачали по 2 години на день на фільтрацію алертів. Після інтеграції гібридного детектора час розбору скоротився до 15 хвилин, а false positive rate впав на 70% порівняно зі статичними порогами. Зниження витрат на обробку алертів досягає 80%, а економія для типового проєкту — до $100,000 на рік. Згідно з дослідженням NIST з часових рядів, комбінація статистики та машинного навчання — найкращий підхід для детекції аномалій. Машинне навчання для часових рядів дозволяє ефективно виявляти аномалії в даних.

Ми — команда AI-інженерів з 7+ років досвіду в продакшені часових рядів, реалізували 50+ проєктів. Гарантуємо точність детекції не нижче 95% на ваших даних. Оцінимо ваш проєкт безкоштовно — пишіть нам.

Типологія аномалій

Виявлення викидів починається з правильної класифікації аномалій.

Точкові аномалії (викиди): одиничне значення різко вибивається з ряду. Приклад: показання температурного датчика 200°C при нормі 50°C.

Контекстуальні аномалії: значення нормальне саме по собі, але аномальне в контексті. Приклад: температура 35°C у січні (норма влітку, аномалія взимку).

Колективні аномалії: послідовність значень нормальна окремо, але аномальна разом. Приклад: кілька стандартних транзакцій, що утворюють патерн шахрайства.

Чому STL + Isolation Forest — золотий стандарт?

STL-декомпозиція (Seasonal-Trend decomposition using Loess) розділяє ряд на тренд, сезонність та залишок. Аномалії шукаються в залишку — це позбавляє від хибних спрацьовувань на сезонних піках. Isolation Forest на залишках ефективно виловлює точки, які не вписуються в нормальний розподіл. Для потокових даних додаємо онлайн Z-Score з адаптивним порогом.

Такий гібрид працює швидше за LSTM (мілісекунди на точку) і потребує менше даних. У наших проєктах це дає precision >0.95 та recall >0.9. STL + Isolation Forest — наш основний вибір для більшості задач.

Порівняння методів детекції

Метод Швидкість Точність Пояснюваність Вимоги до даних
Z-Score / MAD Дуже висока Середня Висока Мінімум (нормальний розподіл)
CUSUM Висока Середня Висока Baseline (перші 50 точок)
STL + залишок Висока Висока Висока Період сезонності
Isolation Forest Середня Висока Низька Вікно ознак (10-50 точок)
LSTM Autoencoder Низька Дуже висока Дуже низька Багато даних, навчання

Середньостатистичні показники на промислових даних

Метод Precision Recall Latency p99 (ms)
Z-Score 0.80 0.70 0.1
STL + Isolation Forest 0.95 0.90 2.0
LSTM Autoencoder 0.97 0.95 50

Як вибрати поріг детекції і не збожеволіти?

Поріг визначає баланс між пропуском аномалій (False Negative) та хибними спрацьовуваннями (False Positive). Важливе завдання — налаштування порогів детекції. Оптимальний поріг залежить від бізнес-цілей: для критичних метрик (простий сервісу) важливіший recall, для моніторингу продажів — precision. Ми використовуємо validation set і підбираємо поріг за F1-score або за метрикою точності на N-му квантілі. У production поріг адаптується через feedback loop: інженери помічають алерти, і модель перенавчається.

Код методів детекції аномалій
import numpy as np from scipy.stats import median_abs_deviation def zscore_anomalies(series, threshold=3.0): z_scores = np.abs((series - series.mean()) / series.std()) return z_scores > threshold def mad_anomalies(series, threshold=3.5): median = np.median(series) mad = median_abs_deviation(series) modified_z = 0.6745 * (series - median) / mad return np.abs(modified_z) > threshold 
def cusum_detector(series, k=0.5, h=5.0): mean = series[:50].mean() std = series[:50].std() S_pos = np.zeros(len(series)) S_neg = np.zeros(len(series)) for t in range(1, len(series)): xi = (series[t] - mean) / std S_pos[t] = max(0, S_pos[t-1] + xi - k) S_neg[t] = max(0, S_neg[t-1] - xi - k) return (S_pos > h) | (S_neg > h) 
from statsmodels.tsa.seasonal import STL def stl_anomaly_detection(series, period=24, threshold=3.5): stl = STL(series, period=period, robust=True) result = stl.fit() residuals = result.resid mad = median_abs_deviation(residuals) modified_z = np.abs(0.6745 * (residuals - np.median(residuals)) / mad) return modified_z > threshold, result 
from sklearn.ensemble import IsolationForest def isolation_forest_detector(series, contamination=0.05, window=10): features = [] for i in range(window, len(series)): window_data = series[i-window:i] features.append([ window_data.mean(), window_data.std(), window_data.max() - window_data.min(), window_data[-1] - window_data.mean(), np.corrcoef(np.arange(window), window_data)[0,1] ]) features = np.array(features) iso_forest = IsolationForest(contamination=contamination, random_state=42) predictions = iso_forest.fit_predict(features) return predictions == -1 
import torch import torch.nn as nn class LSTMAutoencoder(nn.Module): def __init__(self, input_size, hidden_size=64, num_layers=2): super().__init__() self.encoder = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True) self.decoder = nn.LSTM(hidden_size, input_size, num_layers, batch_first=True) def forward(self, x): _, (h_n, c_n) = self.encoder(x) decoder_input = h_n[-1].unsqueeze(1).repeat(1, x.size(1), 1) reconstruction, _ = self.decoder(decoder_input) return reconstruction def detect_autoencoder_anomalies(model, series, threshold_quantile=0.95): with torch.no_grad(): reconstruction = model(series) re = torch.mean((series - reconstruction)**2, dim=[1, 2]) threshold = torch.quantile(re, threshold_quantile) return re > threshold 

Що входить у роботу

  • Код детектора аномалій для моніторингу метрик (Python, готовий до деплою)
  • Дашборд у Grafana + алертинг (Telegram, Slack)
  • Документація щодо порогів та адаптації
  • Навчання вашої команди (2 години)
  • Підтримка протягом 2 тижнів після впровадження

Процес реалізації: від аудиту до деплою

  1. Аналітика — збір історичних даних, виявлення типів аномалій (точкові, контекстуальні, колективні), підбір метрик для моніторингу.
  2. Проектування — вибір комбінації методів (STL, Isolation Forest, LSTM), визначення початкових порогів.
  3. Розробка — написання пайплайну детекції, інтеграція з системою моніторингу (Prometheus, Grafana).
  4. Тестування — валідація на історичних даних, A/B-тест у паралельному режимі, аналіз false positive rate.
  5. Деплой — встановлення на staging, потім production, налаштування алертів.
  6. Моніторинг — збір зворотного зв'язку, адаптація порогів, перенавчання моделей при концептуальному дрейфі.

Терміни та вартість

  • Базова версія (STL + Isolation Forest + дашборд): від 3 до 4 тижнів, вартість від $5,000.
  • Повна версія (LSTM Autoencoder, потокова детекція, feedback loop): від 2 до 3 місяців, вартість від $15,000.

Вартість проєкту визначається після аналізу даних. Оцінимо ваш проєкт безкоштовно — пишіть нам.