Вы качаете воду, чтобы размывать грунты и греть асфальт. Если ваш диспетчер узнаёт о падении давления в сети от звонка разгневанной жительницы третьего микрорайона — ваша дорогая АСУ ТП мертва. Она просто работает гигантским обогревателем серверной, методично складывая никому не нужные цифры в базу данных. Это медицинский факт.
Телеметрия собирается годами. Терабайты архивов давления и расхода лежат мёртвым грузом, пока аварийные бригады вскрывают мёрзлую землю исключительно по факту затопления улицы. Неучтённый расход воды (НРВ) в российских сетях сегодня болтается в коридоре 20-40%. Половина этого чудовищного объёма — скрытые утечки, которые месяцами точат трубу до критического порыва. Раньше дыру в аналитике и leak detection затыкали западными системами управления сетью. Они ушли. Теперь у вас есть голые данные OPC UA и железные трубы 1980-х годов укладки, которые рвутся по расписанию, известному только господу богу. Прогноз аварий водопровода машинное обучение превращает из гадания на кофейной гуще в математически точный процесс, но для этого нужно перестать молиться на устаревшие концепции.
Скрытая утечка и прогноз аварий: машинное обучение против статического порога
Большинство водоканалов пытается решить задачу в лоб. Ставят в SCADA статические пороги: упало давление ниже трёх атмосфер — включаем красную лампочку и ревун. Это не работает от слова совсем.
Чистый порог генерирует столько ложных срабатываний, что через неделю диспетчер просто мьютит эту сирену. Потому что сеть дышит. Давление скачет от сезонности, от вечернего разбора воды, когда весь город синхронно включает краны на кухнях, от перепадов температуры и пусков агрегатов на насосных станциях второго подъёма. Гидравлический удар при неаккуратном закрытии задвижки может дать кратковременный пик, который тупая автоматика воспримет как катастрофу. А скрытая утечка воды на ранней стадии, наоборот, не роняет давление так, чтобы это было видно невооружённым глазом. Она прячется в шуме, медленно размывая каверну под асфальтом. Чтобы вытащить этот сигнал из хаоса, нужен анализ данных SCADA водоснабжение с применением нелинейных математических моделей, способных учитывать контекст времени суток и топологию сети.
Вся магия поиска скрытых утечек строится вокруг MNF — ночного минимального расхода. Глухой ночью, с двух до четырёх часов, город спит. Унитазы не смывают, стиральные машины молчат. Расход в изолированной зоне падает до физического минимума. Любое отклонение этого минимума от исторической нормы с поправкой на день недели и сезон — это маркер дыры в трубе.
Разбивка сети на зоны ДМА (District Metered Areas) — это железобетонный фундамент. Без зонирования вы пытаетесь найти иголку в океане. Вы ставите расходомеры на границах кварталов, изолируете перетоки задвижками, и модель начинает мониторить каждую зону отдельно. Как только в третьем микрорайоне MNF плавно пополз вверх при неизменном давлении, нейросеть понимает: появилась трещина. Вода уходит в ливнёвку или под землю. Порыва на поверхность ещё нет. Напор у потребителей в норме. Но деградация началась.
Код ниже — это упрощённый фрагмент логики, как мы в Morana Labs прогоняем сырые ряды расхода через детектор аномалий при построении пайплайнов на объектах. Суть не в конкретном алгоритме, суть в изоляции фичей: мы вырезаем окна MNF и скармливаем их ансамблю деревьев, полностью отсекая дневной потребительский шум.
import pandas as pd
from sklearn.ensemble import IsolationForest
def detect_mnf_leaks(scada_telemetry: pd.DataFrame):
# Ожидается сырой фрейм: timestamp, flow_rate, dma_zone
df = scada_telemetry.copy()
df['hour'] = df['timestamp'].dt.hour
# Выделяем MNF: глухая ночь между 02:00 и 04:00
night_mask = (df['hour'] >= 2) & (df['hour'] <= 4)
mnf_daily = df[night_mask].groupby(
[df['timestamp'].dt.date, 'dma_zone']
)['flow_rate'].min().reset_index()
# Настраиваем лес для поиска скрытых аномалий в базовом расходе
model = IsolationForest(n_estimators=300, contamination=0.03, random_state=42)
anomalies = []
for zone in mnf_daily['dma_zone'].unique():
zone_data = mnf_daily[mnf_daily['dma_zone'] == zone].copy()
zone_data['leak_score'] = model.fit_predict(zone_data[['flow_rate']])
# -1 означает аномальный рост ночного минимума (потенциальная утечка)
leaks = zone_data[zone_data['leak_score'] == -1]
anomalies.append(leaks)
return pd.concat(anomalies)Но найти скрытую утечку ИИ — это только половина дела. Вторая половина — долгосрочный предиктив порывов трубопровода.
У вас на балансе тысячи километров сетей. Бюджет на перекладку покрывает дай бог 2% в год. Какие именно участки менять этим летом? Те, которым 40 лет? Возраст — отвратительный предиктор. Серый чугун 1970 года укладки в сухом песчаном грунте может легко пережить современный полиэтилен, криво брошенный подрядчиком в агрессивную глину пять лет назад. Ранжирование участков под перекладку строится на многомерной матрице. Модель учитывает материал трубы, диаметр, тип грунтовки, коррозионную активность среды. Но самое главное — мы закладываем в веса историю прошлых ремонтов и количество микро-гидроударов, которые труба пережила за последние полгода. Эти микроудары мы парсим из SCADA по миллисекундным пикам давления. Если участок постоянно испытывает гидродинамический стресс из-за криво настроенного частотника на местной ПНС, его ресурс сгорает в три раза быстрее паспортного. Нейросеть агрегирует эти факторы и выдаёт вероятность отказа каждого сегмента на горизонте года. Вы получаете динамическую тепловую карту сети, где красным горят не самые старые трубы, а самые уставшие.
Инференс на ребре: почему КИИ не терпит облаков
Теперь о главном барьере внедрения. Водоканал — это стратегический объект жизнеобеспечения. Это КИИ. Никаких облаков. Никаких модных SaaS-решений, гоняющих телеметрию на чужие сервера через публичный интернет.
Наш подход в Morana Labs радикален, потому что мы работаем с суровой реальностью: данные не покидают периметр. Инференс должен крутиться на железе клиента, в полностью изолированном контуре. Мы привозим edge-сервер с тензорными ускорителями, ставим его в стойку рядом с АСУ ТП и настраиваем однонаправленный диод данных или защищённый шлюз. Интеграция с диспетчерской идёт по железобетонной классике — протоколам OPC UA или Modbus TCP. Мы не лезем в логику работы контроллеров и не ломаем существующую SCADA. Наш софт работает как пассивный слушатель: забирает сырую телеметрию с частотой опроса в 100-500 миллисекунд, прогоняет через ML-модели прямо в оперативной памяти edge-узла и отдаёт обратно в АСУ ТП новые теги с предсказаниями. ФСТЭК счастлив, безопасники спокойны, техдиректор видит реальное снижение НРВ водоканал на своём локальном дашборде.
Отдельная история — экомониторинг сбросов. Это смежный кейс, который идеально ложится на ту же edge-архитектуру. Биологическая очистка — процесс хрупкий. Активный ил в аэротенках гибнет от малейшего скачка токсичности. Очистные сооружения генерируют свой непрерывный поток данных. Резкие изменения pH, падение уровня кислорода, аномалии в электропроводности — это верные предвестники того, что кто-то в промзоне ночью открыл задвижку и слил гальванику в городскую канализацию. Обученная модель ловит эти аномальные паттерны на входных коллекторах за минуты. Диспетчер получает алерт и успевает перенаправить сток в аварийные резервуары-усреднители до того, как токсины убьют биоценоз. Без ML вы узнаете об этом только утром, когда ил всплывёт мёртвой шапкой, а водоканал получит многомиллионный штраф от Росприроднадзора.
Чек-лист: готовы ли ваши данные к предиктиву
Я часто слышу на встречах гордое утверждение о терабайтах накопленных данных. Потом мы открываем архивы и плачем. Поэтому вот суровый чек-лист готовности вашей SCADA к умной аналитике. Первое условие — полнота и частота дискретизации телеметрии. Если ваш расходомер пишет усреднённые данные раз в час — забудьте про предиктив. Нам нужна частота опроса хотя бы раз в минуту, а лучше чаще, чтобы ловить гидроудары и строить честный профиль ночного расхода. Второе условие — физическое зонирование ДМА. Сеть должна быть разделена на контролируемые участки с приборами учёта на входах. Без этого мы будем пытаться найти утечку в масштабах мегаполиса, измеряя среднюю температуру по больнице. Третье и самое больное — электронный журнал аварий с чистой разметкой. Если ваши бригады пишут ориентировочные адреса порывов в замасленную тетрадку, а в ERP-системе есть только бухгалтерские акты списания труб — нейросети не на чем учиться. Нам нужны точные геокоординаты, даты фактических ремонтов и тип повреждения, будь то свищ, продольная трещина или разрыв сварного шва.
Снижение НРВ даже на 5-7% окупает внедрение предиктивной аналитики за один квартал. Это живые деньги, которые сейчас просто утекают в землю вместе с подготовленной хлорированной водой и вашими киловаттами, сожжёнными на насосных станциях. Телеметрия SCADA не должна быть просто дорогим видеорегистратором аварий. Она должна работать радаром.
Дайте нам архив вашей телеметрии за один сезон и журнал дефектов. Мы развернём пилот предиктива порывов на ваших данных и покажем участки, которые гарантированно порвутся этой зимой. А дальше решите сами — копать по факту затопления или менять трубы превентивно.