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

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

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

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

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1439
  • 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

Розробка 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 тис. гривень за годину простою).

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