Як AI виявляє аномалії споживання?
Вам знайома ситуація: лічильник показує нуль у будинку, де живе сім'я, а втрати в мережі перевищують норматив на 12%? Джерело — несправний прилад або крадіжка. Без ML-шару такі проблеми виявляються тижнями: оператори вручну звіряють журнали, виїжджають на об'єкти. Ми будуємо аналітику поверх AMI (Advanced Metering Infrastructure), яка в реальному часі детектує аномалії, крадіжки та прогнозує навантаження для балансування мережі. Система обробляє телеметричні дані від сотень тисяч лічильників з інтервалом від 15 до 60 хвилин і видає alert за лічені секунди після виявлення відхилення. Наш досвід показує, що впровадження ML-аналітики скорочує час реакції на інцидент з 3–5 днів до 2–3 годин, а комерційні втрати знижуються на 15–25% у перший рік (Дослідження впровадження AI в енергетиці).
Кроки впровадження ML-системи
- Аудит поточної інфраструктури: протоколи, обсяги даних, точки інтеграції.
- Проєктування ML-пайплайну: вибір моделей, ознак, метрик.
- Навчання та валідація моделей на історичних даних.
- Інтеграція з MDMS та білінгом через REST/SOAP.
- Тестування на пілотній ділянці з порівнянням результатів.
- Запуск у промислову експлуатацію з моніторингом.
Як AI покращує автоматичний облік ресурсів?
Традиційні правила на порогах (delta > 0, loss_rate > 5%) дають багато хибних спрацювань. ML-моделі враховують сезонність, історію споживання, погоду та поведінку сусідніх абонентів. Наприклад, Isolation Forest знаходить крадіжки в 3 рази точніше, ніж ручний розрахунок балансу. А LightGBM прогнозує навантаження на добу з MAPE < 5%, що для електромережі середнього міста означає економію до 10% закупівель на оптовому ринку — це на 40% краще за лінійні моделі.
Які проблеми вирішуємо
Нульове споживання. Лічильник замовк — несправність або відключення. Алгоритм порівнює приріст показань за останні 3 періоди: якщо дельта = 0 та історія підтверджує статику — формується заявка на перевірку каналу зв'язку. Від'ємний приріст. Після заміни лічильника показання «зменшуються» — система фіксує delta < 0 і перевіряє, чи була заміна в журналі. Якщо ні — сигнал на польовий обхід. Баланс мережі. На ділянці подача 1000 кВт·год, сума споживачів — 880 кВт·год, технологічні втрати 3%. Отримуємо комерційні втрати 90 кВт·год (9%). Якщо loss_rate > 8% — запускаємо аудит абонентів.
Як ми це робимо: стек та архітектура
Ланцюжок збору: лічильник → концентратор (DCU) → MDMS → ML-аналітика + білінг. Протоколи та інтервали зведені в таблицю.
| Ресурс |
Протокол |
Зв'язок |
Інтервал |
| Електроенергія |
DLMS/COSEM (IEC 62056) |
PLC G3, NB-IoT, GPRS |
30 хвилин |
| Вода |
Modbus RTU / M-Bus |
LoRaWAN, NB-IoT |
60 хвилин |
| Тепло |
M-Bus (EN 13757) |
LoRa, GPRS |
60 хвилин |
| Газ |
Modbus / GSM |
GSM/GPRS, NB-IoT |
60 хвилин |
Валідація показань: детекція трьох типів аномалій
Приклад коду валідації
import pandas as pd
import numpy as np
from scipy import stats
def validate_meter_readings(meter_id: str, current_reading: float, history: pd.DataFrame) -> dict:
issues = []
if len(history) > 0:
prev_reading = history['reading'].iloc[-1]
delta = current_reading - prev_reading
if delta < 0:
issues.append({'type': 'negative_increment', 'delta': delta, 'severity': 'warning', 'action': 'check_meter_replacement'})
elif delta == 0 and history['reading'].diff().tail(3).sum() == 0:
issues.append({'type': 'zero_consumption_extended', 'zero_periods': 3, 'severity': 'major', 'action': 'check_meter_communication'})
if len(history) >= 30:
typical_deltas = history['reading'].diff().dropna()
z_score = stats.zscore([delta])[0]
if abs(z_score) > 4:
issues.append({'type': 'statistical_outlier', 'z_score': round(z_score, 2), 'severity': 'major' if z_score > 4 else 'critical', 'action': 'field_verification'})
return {'meter_id': meter_id, 'current_reading': current_reading, 'issues': issues, 'valid': len(issues) == 0}
Детекція крадіжок: метод балансу втрат та Isolation Forest
Баланс ділянки: подача мінус сума споживачів = комерційні втрати. Якщо loss_rate > 8% — аномалія. Для пошуку підозрілих абонентів використовуємо Isolation Forest з ознаками: monthly_kwh, night_ratio, weather_correlation, year_over_year_change, peer_group_deviation. Контамінація 5%.
Прогноз споживання для балансування
Модель LightGBM на ознаках: година, день тижня, місяць, вихідний/свято, температура, лаги 24h та 168h, ковзне середнє за 7 днів. Навчається на 15-хвилинних телеметричних даних лічильника. Точність — MAPE < 5% на добу вперед.
Інтеграція з білінгом та особистий кабінет
MDMS-платформи: Itron EE, Landis+Gyr Gridstream, OpenWay Riva. Експорт у SAP IS-U, 1С: ЖКГ, Білінг-Центр через REST/SOAP. Наші рішення сертифіковані для роботи з DLMS/COSEM. Особистий кабінет споживача: історія споживання, повідомлення про аномалії, рекомендації з економії.
Процес роботи над проєктом
- Аналітика: аудит поточної інфраструктури, протоколів, обсягів даних. 2. Проєктування: архітектура збору, ML-пайплайн, точки інтеграції. 3. Реалізація: конектор до лічильників, MDMS, алгоритми валідації. 4. Тестування: на історичних даних + пілотна ділянка. 5. Деплой: контейнеризація, моніторинг, документація.
Строки орієнтовно
| Етап |
Строк |
| AMI-конектор + валідація показань + базовий баланс |
3–4 тижні |
| Повний ML-цикл (детекція крадіжок, прогноз навантаження, інтеграція з білінгом, особистий кабінет) |
2–3 місяці |
| Супровід та підтримка після запуску |
3 місяці |
Вартість розраховується індивідуально після аудиту. Типова економія для клієнта сягає 1,5 млн грн на рік за рахунок зниження комерційних втрат.
Що входить в результат
- Документація архітектури та API.
- Код ML-моделей з описом метрик.
- Інтеграційні тести з MDMS.
- Доступ до дашборду аналітики.
- Навчання операторів (2–3 дні).
- Підтримка 3 місяці після запуску.
Наша команда має 8+ років досвіду в енергетичній сфері та впровадила рішення на 15 об'єктах, обробляючи дані з понад 500 000 лічильників. Ми гарантуємо якість інтеграції та надаємо сертифікати відповідності.
Зв'яжіться з нами для попередньої оцінки вашого проєкту — ми підготуємо комерційну пропозицію за 2 робочих дні. Отримайте консультацію інженера з інтеграції ML у вашу облікову систему.
Виявлення аномалій: автоенкодери, 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%. При дрейфі ознак вікно автоматично зсувається.
Процес роботи
-
Інтерв'ю з доменними експертами — розуміємо, що таке «нормальність» і які інциденти вже були.
-
EDA та підготовка даних — очищення, створення ознак, часові вікна.
-
Baseline (Isolation Forest) — швидка валідація на відомих інцидентах.
-
Вибір та кастомізація моделі — Autoencoder / LSTM-AE / ансамбль.
-
Навчання, валідація з синтетичними аномаліями.
-
Розгортання в production — пайплайн на Kafka + Flink / Airflow, алертинг в Telegram/Slack, моніторинг дрифту.
-
Post-deployment супровід — моніторинг метрик моделі, оновлення порогів.
Що входить у роботу
- Аудит поточних даних та процесів
- Розробка та навчання моделей (Isolation Forest / Autoencoder / LSTM-AE / ансамбль)
- Налаштування адаптивних порогів та алертингу
- Панель моніторингу аномалій (Grafana / Streamlit)
- Документація model card та pipeline
- Навчання вашої команди (2–3 сесії)
- Гарантійна підтримка 3 місяці
Терміни: baseline-система з одним методом — 2–4 тижні. Production-система з адаптивними порогами, алертингом та моніторингом — 2–5 місяців. Вартість розраховується індивідуально під ваш кейс.
Наша команда має 8+ років досвіду в промисловій аналітиці та 15+ успішних проектів з виявлення аномалій в телеметрії, фінансах та IT-моніторингу. Отримайте консультацію — розкажемо, як вирішити вашу задачу.