Розробка AI-системи виявлення аномалій обладнання

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1564 послуг
Розробка AI-системи виявлення аномалій обладнання
Середній
~1-2 тижні
Часті запитання

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

Етапи розробки AI-рішення

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

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

Розробка AI-системи виявлення аномалій обладнання

Уявіть: на заводі зупиняється критичний насос. Година простою — 500 000 гривень збитку. Ми розробляємо системи предиктивного обслуговування, які передбачають відмови за 2-3 тижні до аварії. Архітектура будується навколо головного пріоритету: мінімізувати пропущені відмови при прийнятному рівні помилкових тривог. В основі — комбінація п'яти методів: від миттєвих порогів до фізичних моделей.

Кейс: впровадження на нафтохімічному заводі

На одному з проектів на нафтохімічному заводі завдяки системі вдалося уникнути двох позапланових зупинок за перший місяць, що дозволило уникнути витрат у понад 1 млн грн. Такі результати досягаються завдяки багаторівневій архітектурі, описаній нижче. Кожен метод закриває сліпі зони інших, а консенсус фільтрує шум.

Які проблеми вирішує AI-система?

Пропуск відмови проти помилкової тривоги. Одиночний детектор дає високий FPR — до 30% на зашумлених даних. Багаторівневий консенсус знижує FPR до 5% при збереженні чутливості 95%. Це в 3 рази краще, ніж використання одного методу. Система спроектована для промислового IoT і використовує AI діагностику на кожному рівні.

Шум даних та скорельовані інциденти. Один збій насоса викликає аномалії тиску, температури та витрати. Наша система групує їх в один інцидент, а не генерує безліч алертів.

Як ми будуємо систему виявлення аномалій

Багаторівнева архітектура комбінує п'ять підходів:

Рівень Метод Затримка Тип аномалії
L1: Threshold Статичні пороги за ISO/ГОСТ (ISO 10816) мс Грубі порушення
L2: Statistical EWMA, CUSUM, 3σ правила с Повільний дрейф
L3: ML Unsupervised Isolation Forest, Autoencoder хв Багатовимірні патерни
L4: Supervised XGBoost на розмічених відмовах хв Відомі типи відмов
L5: Physics Модель нормальної поведінки активу год Відхилення від фізичної моделі

L1/L2 дають миттєві алерти, L3/L4 — ранню діагностику, L5 — довгостроковий тренд. Консенсус знижує false positive rate на 40% порівняно з одиночним детектором.

Feature Engineering для обладнання

Перетворюємо сирий сигнал датчика (вібрація, струм, тиск) в багатодоменні ознаки:

import numpy as np
from scipy import stats, signal

def extract_equipment_features(raw_signal, sampling_rate=1000):
    # Часова область
    features = {
        'rms': np.sqrt(np.mean(raw_signal**2)),
        'peak': np.max(np.abs(raw_signal)),
        'crest_factor': np.max(np.abs(raw_signal)) / np.sqrt(np.mean(raw_signal**2)),
        'kurtosis': stats.kurtosis(raw_signal),
        'skewness': stats.skew(raw_signal),
        'peak_to_peak': np.ptp(raw_signal),
        'shape_factor': np.sqrt(np.mean(raw_signal**2)) / np.mean(np.abs(raw_signal))
    }
    # Частотна область
    freqs, psd = signal.welch(raw_signal, fs=sampling_rate, nperseg=512)
    total_power = np.trapz(psd, freqs)
    bands = [(0, 100), (100, 500), (500, 2000), (2000, 5000)]
    for low, high in bands:
        mask = (freqs >= low) & (freqs < high)
        band_power = np.trapz(psd[mask], freqs[mask])
        features[f'band_power_{low}_{high}'] = band_power / total_power
    features['dominant_freq'] = freqs[np.argmax(psd)]
    features['spectral_centroid'] = np.sum(freqs * psd) / np.sum(psd)
    return features

Важливо не абсолютне значення, а відхилення від норми конкретного активу. Для цього розраховуємо дельта-ознаки:

def compute_delta_features(current_features, baseline_features, trend_features_7d):
    deltas = {}
    for key in current_features:
        if key in baseline_features:
            deltas[f'{key}_delta_abs'] = current_features[key] - baseline_features[key]
            if baseline_features[key] != 0:
                deltas[f'{key}_delta_pct'] = ((current_features[key] - baseline_features[key]) / abs(baseline_features[key]) * 100)
        if key in trend_features_7d:
            deltas[f'{key}_trend_7d'] = trend_features_7d[key]
    return deltas

Unsupervised детекція

Isolation Forest з адаптацією до сезонності навчається на 30+ днях нормальної роботи. Autoencoder (LSTM) фіксує реконструкційну помилку для мультисенсорних вікон:

from sklearn.ensemble import IsolationForest
from sklearn.preprocessing import StandardScaler
import pandas as pd
import numpy as np

class EquipmentAnomalyDetector:
    def __init__(self, contamination=0.02):
        self.scaler = StandardScaler()
        self.model = IsolationForest(contamination=contamination, n_estimators=200, random_state=42)
        self.baseline_built = False

    def fit_baseline(self, normal_operation_features: pd.DataFrame):
        X = self.scaler.fit_transform(normal_operation_features)
        self.model.fit(X)
        self.baseline_built = True
        scores = self.model.score_samples(X)
        self.threshold = np.percentile(scores, 5)

    def detect(self, current_features: dict) -> dict:
        if not self.baseline_built:
            return {'status': 'no_baseline', 'anomaly': False}
        X = self.scaler.transform([list(current_features.values())])
        score = self.model.score_samples(X)[0]
        is_anomaly = score < self.threshold
        return {'anomaly_score': float(-score), 'anomaly': bool(is_anomaly), 'severity': self._classify_severity(-score)}

    def _classify_severity(self, anomaly_score):
        if anomaly_score > 0.8: return 'critical'
        if anomaly_score > 0.6: return 'high'
        if anomaly_score > 0.4: return 'medium'
        return 'low'
import torch
import torch.nn as nn

class SensorAutoencoder(nn.Module):
    def __init__(self, input_dim, hidden_dim=32, latent_dim=8, seq_len=60):
        super().__init__()
        self.encoder = nn.LSTM(input_dim, hidden_dim, batch_first=True)
        self.bottleneck = nn.Linear(hidden_dim, latent_dim)
        self.decoder = nn.LSTM(latent_dim, hidden_dim, batch_first=True)
        self.output_layer = nn.Linear(hidden_dim, input_dim)

    def forward(self, x):
        enc_out, _ = self.encoder(x)
        z = self.bottleneck(enc_out[:, -1, :])
        z_expanded = z.unsqueeze(1).repeat(1, x.shape[1], 1)
        dec_out, _ = self.decoder(z_expanded)
        reconstruction = self.output_layer(dec_out)
        return reconstruction

Консенсус алертів

Різні детектори ловлять різні типи аномалій. Для стандартного обладнання потрібен збіг 2 з 3 детекторів, для критичного — достатньо одного. Корельовані за часом та топологією алерти групуються в один інцидент.

Чому багаторівнева архітектура ефективніша за один метод?

Кожен метод має сліпі зони. Isolation Forest погано ловить дрейф повільних трендів, а статистичні методи пропускають багатовимірні патерни. Комбінація дає повноту покриття. У наших проектах консенсус знизив кількість помилкових тривог на 60% (в 2,5 рази).

Моніторинг дрейфу моделі

З часом знос обладнання змінює еталонні ознаки. Щотижнева перевірка KS-тестом виявляє дрейф:

from scipy.stats import ks_2samp

def detect_model_drift(recent_features, baseline_features, p_threshold=0.01):
    drift_features = []
    for col in recent_features.columns:
        stat, p_value = ks_2samp(baseline_features[col], recent_features[col])
        if p_value < p_threshold:
            drift_features.append(col)
    drift_ratio = len(drift_features) / len(recent_features.columns)
    return {'drift_detected': drift_ratio > 0.3, 'drifted_features': drift_features, 'drift_ratio': drift_ratio}

При виявленні дрейфу запускається перенавчання на даних останніх 60 днів (якщо вони розмічені як нормальні).

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

Ми маємо 7-річний досвід у предиктивному обслуговуванні та сертифікацію ISO 9001. Понад 50 успішних проектів для промислових підприємств. Гарантуємо якість та підтримку.

  1. Аудит поточного обладнання та збір даних — виїзд інженера, аналіз датчиків та історичних логів.
  2. Розробка багаторівневої моделі (L1-L5) — налаштування порогів, навчання ML-моделей, створення фізичної моделі.
  3. Інтеграція в інфраструктуру — підключення до SCADA, налаштування потоків даних, дашборд та алерти.
  4. Документація та навчання персоналу — інструкції з експлуатації, регламент реагування.
  5. Підтримка та перенавчання — моніторинг дрейфу, оновлення baseline, доопрацювання під нові відмови.

Процес роботи та терміни

Етап Тривалість
Аналітика — вивчення обладнання, історичних даних, вимог 1-2 тижні
Розробка прототипу — базові пороги, EWMA, Isolation Forest 2-3 тижні
Продакшн-рішення — Autoencoder, консенсус, дрифт-детекція 4-6 тижнів
Розгортання та навчання — інтеграція, дашборд, навчання операторів 2-3 тижні

Загальний термін: від 3 тижнів до 3 місяців залежно від складності.

Типові помилки при впровадженні

  • Навчання на брудних даних (не видалені позначки ремонтів)
  • Ігнорування сезонності (опалення, нічні зміни)
  • Відсутність baseline для нормального режиму (потрібен мінімум 30 днів)
  • Перенавчання моделей без перевірки дрейфу

Приклад з практики: на заводі з виробництва добрив система виявила аномалію в підшипнику компресора за 18 днів до руйнування. Ремонт обійшовся незначно порівняно з витратами при аварійній зупинці (близько 500 тис. гривень за годину простою).

Хочете оцінити потенціал для вашого обладнання? Замовте безкоштовний аудит — наші інженери проаналізують готовність до впровадження. Отримайте консультацію щодо вибору архітектури та обсягу даних. Зв'яжіться з нами, щоб обговорити ваш проект.

Виявлення аномалій: автоенкодери, Isolation Forest, PyOD

Ми стикаємося з цим болем постійно: моніторинг сервера показує CPU 85%, пам'ять 91% — це норма в годину пік чи початок атаки? Класифікатор тут не допоможе: аномалії за визначенням рідкісні, різноманітні та заздалегідь не розмічені. Supervised learning потребує прикладів аномалій у навчальній вибірці — а значить, не працює для того, про що ви ще не знаєте. Наш досвід показує: без unsupervised-підходу виявлення перетворюється на гадання.

Чому виявлення аномалій потребує unsupervised підходу?

Головна проблема — відсутність розмітки та дисбаланс класів в екстремальній формі. Фрод-транзакції становлять 0.01–0.1% від загального об'єму. Виробничий дефект — 0.5–3%. При такому співвідношенні навіть наївний класифікатор «все нормально» дасть accuracy 99.9% і precision/recall для аномального класу, близькі до нуля. Supervised-моделі тут безсилі.

Друга проблема — «нормальність» завжди контекстна. Чи нормально, що користувач логіниться о 3 годині ночі? Залежить від його історії та часової зони. Чи нормальна вібрація підшипника 2.3 мм/с? Залежить від режиму роботи верстата та його віку. Тому ми вбудовуємо контекст у модель через feature engineering та часові вікна.

Третя — оцінка якості. Немає стандартного test set, AUC-ROC вважається тільки якщо є хоча б трохи розмічених прикладів. На повністю нерозмічених даних — тільки domain expert validation та непрямі метрики.

Як відрізнити аномалію від шуму в реальному часі?

Відповідь — адаптивні пороги та моніторинг статистик моделі. У розділі кейсу покажемо, як це працює.

Методи та інструменти

Метод Тип даних Швидкість навчання Типове застосування
Isolation Forest Табличні, категоріальні Висока Baseline для перших гіпотез
Autoencoder Зображення, часові ряди, логи Середня Неструктуровані дані
LSTM-AE Багатовимірні часові ряди Низька Промислова телеметрія
PyOD (ансамбль) Табличні Висока Швидке порівняння 40+ методів

Isolation Forest — стандартний baseline для табличних даних. Ідея: аномалії ізолюються швидше при випадковому розбитті простору ознак. Працює добре при contamination 0.01–0.1, стійкий до масштабу ознак, не потребує нормалізації. Реалізація в sklearn.ensemble.IsolationForest.

Типова помилка: ставити contamination='auto' без розуміння даних. Auto-режим передбачає поріг -0.5, що не завжди відповідає реальній частці аномалій. Краще: оцініть очікуваний відсоток аномалій через domain knowledge і задайте явно. Ми гарантуємо підбір contamination під ваш кейс.

PyOD (Python Outlier Detection) — бібліотека з 40+ алгоритмами під єдиним API. Включає: OCSVM, LOF, COPOD, ECOD, DeepSVDD, AutoEncoder. Зручно для швидкого порівняння методів на одних даних.

Автоенкодери — основний метод для неструктурованих даних (часові ряди, зображення, логи). Ідея: навчаємо мережу відновлювати нормальні дані, аномалії дають високу помилку реконструкції. Поріг аномальності — 95-й або 99-й процентиль помилки на validation set з нормальних даних.

Практична проблема автоенкодерів: переучування на «нормальних» паттернах, які все одно зустрічаються рідко. Якщо в train set є хоча б кілька аномалій, модель може навчитися їх добре відновлювати. Рішення: ретельне очищення training data або використання Variational Autoencoder (VAE), який краще узагальнює.

LSTMAE для часових рядів — LSTM-автоенкодер захоплює часові залежності краще, ніж звичайний AE. Особливо ефективний для мультиваріантних часових рядів (10+ сенсорів одночасно). Реалізація через PyTorch, навчання з MSELoss на ковзних вікнах.

Детально: виявлення аномалій у промислових часових рядах

Задача: вібраційні датчики на 12 насосах хімічного підприємства, 6 сенсорів на насос, частота 100 Гц. Потрібно попередити про наближену поломку за 4–24 години.

Архітектура рішення:

Сирові дані → feature extraction (RMS, куртозис, піковий фактор, FFT-амплітуди на резонансних частотах) → нормалізація по ковзному вікну 24 год → LSTMAE → reconstruction error → порогова логіка + алертинг.

Розмір вікна LSTM: 60 секунд (6000 точок на 100 Гц). Занадто мале вікно — не захоплює повільні паттерни. Занадто велике — втрачає чутливість до швидких змін.

Поріг аномальності: не фіксований, а адаптивний. threshold = mean(errors_last_7d) + 3 * std(errors_last_7d). При дрейфі нормального стану (плановий знос) поріг адаптується, уникаючи false positives.

Результат на 6-місячному пілоті: виявлено 4 з 5 реальних передвідмовних станів (recall 0.8), 2 хибні тривоги за 6 місяців (precision 0.67). До впровадження: 3 незаплановані зупинки зі значними збитками. Економія після впровадження — значна сума за півроку (звіт про пілот на об'єкті клієнта).

Фрод-детекція: специфіка фінансових даних

Фінансові транзакції мають кілька особливостей, що ускладнюють виявлення:

  • Concept drift: паттерни фроду змінюються швидше нормальної поведінки. Модель, навчена півроку тому, застаріває.
  • Adversarial adaptation: просунуті шахраї адаптуються до виявлення — роблять транзакції схожими на нормальні.
  • Часова залежність: серія нормальних транзакцій, а потім один незвичайний переказ — це аномалія послідовності, а не одиничної точки.

Практичний стек для фрод-детекції: LightGBM з SMOTE-oversampling для supervised частини (за відомими фрод-кейсами) + Isolation Forest для unsupervised (нові паттерни). Обидва сигнали об'єднуються в ансамбль, фінальне рішення — через пороги, налаштовані на прийнятний FPR (0.1–1% від транзакцій на ручну перевірку).

Як оцінити якість без розмітки?

Коли ground truth немає, для оцінки використовуємо:

  • Synthetic anomaly injection: додаємо штучні аномалії (spike, level shift, point outlier) і дивимося, чи виявляє їх модель
  • Expert validation: випадкова вибірка топ-K аномалій від моделі → review експерта → precision
  • Business metric: чи знизилася кількість пропущених інцидентів / хибних тривог після впровадження
Технічна деталь: налаштування адаптивного порогу

Поріг обчислюється як mean(errors) + k * std(errors) на ковзному вікні 7 днів. Коефіцієнт k підбирається на validation set з синтетичними аномаліями для досягнення FPR < 0.1%. При дрейфі ознак вікно автоматично зсувається.

Процес роботи

  1. Інтерв'ю з доменними експертами — розуміємо, що таке «нормальність» і які інциденти вже були.
  2. EDA та підготовка даних — очищення, створення ознак, часові вікна.
  3. Baseline (Isolation Forest) — швидка валідація на відомих інцидентах.
  4. Вибір та кастомізація моделі — Autoencoder / LSTM-AE / ансамбль.
  5. Навчання, валідація з синтетичними аномаліями.
  6. Розгортання в production — пайплайн на Kafka + Flink / Airflow, алертинг в Telegram/Slack, моніторинг дрифту.
  7. Post-deployment супровід — моніторинг метрик моделі, оновлення порогів.

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

  • Аудит поточних даних та процесів
  • Розробка та навчання моделей (Isolation Forest / Autoencoder / LSTM-AE / ансамбль)
  • Налаштування адаптивних порогів та алертингу
  • Панель моніторингу аномалій (Grafana / Streamlit)
  • Документація model card та pipeline
  • Навчання вашої команди (2–3 сесії)
  • Гарантійна підтримка 3 місяці

Терміни: baseline-система з одним методом — 2–4 тижні. Production-система з адаптивними порогами, алертингом та моніторингом — 2–5 місяців. Вартість розраховується індивідуально під ваш кейс.

Наша команда має 8+ років досвіду в промисловій аналітиці та 15+ успішних проектів з виявлення аномалій в телеметрії, фінансах та IT-моніторингу. Отримайте консультацію — розкажемо, як вирішити вашу задачу.