Разработка 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

Почему стандартные методы детекции утечек работают медленно?

На продуктопроводе длиной 100 км утечка 0.5% от потока остаётся незамеченной балансовыми методами до 20 минут. При расходе 500 м³/ч это означает потерю 150 м³ продукта — десятки тысяч рублей только за продукт. Добавьте сюда экологические штрафы, которые могут составлять до 50 млн рублей за разлив, и простой на ремонт — стоимость инцидента достигает сотен миллионов. Стандартные системы на основе баланса или перепада давления слишком медленны и дают много ложных срабатываний. Мы разрабатываем AI-систему, которая заменяет медленный баланс и дорогой Fiber Optic DAS. Комбинируем ML на балансовых данных, детекцию отрицательной ударной волны (NPW) и акустический мониторинг — это снижает время обнаружения до секунд, а точность локализации — до метров. На одном из газопроводов длиной 120 км система обнаружила утечку 0.2% от потока за 15 секунд, что на порядок быстрее традиционных методов. Свяжитесь с нами — оценим ваш трубопровод за 2 дня.

Методы детекции утечек

Сравнение методов:

Метод Время обнаружения Минимальная утечка Локализация
Балансовый (расход) 5-30 мин 1-3% от потока ±500 м
Перепад давления 1-5 мин 0.5% ±100 м
Акустический секунды 0.1% ±10 м
Негативная ударная волна 30-60 с 0.5% ±50 м
Fiber Optic DAS секунды 0.01% ±1 м

Акустический метод обнаруживает утечку в 10 раз быстрее и точнее, чем балансовый, что подтверждает исследование Wikipedia.

Как работает балансовый метод с ML?

Баланс входа и выхода — простой, но шумный метод. Мы очищаем сигнал с помощью экспоненциально взвешенного скользящего среднего (EWMA) и адаптивного порога. Пример реализации на Python:

import numpy as np
import pandas as pd
from scipy.stats import chi2

class PipelineBalanceMonitor:
    def __init__(self, line_id: str, balance_threshold_pct: float = 1.0):
        self.line_id = line_id
        self.threshold = balance_threshold_pct / 100
        self.ewma_balance = None
        self.alpha = 0.1

    def update(self, inlet_flow_m3h: float, outlet_flow_m3h: float,
               line_pack_change: float = 0.0) -> dict:
        """
        Баланс = Вход - Выход - Изменение линейного запаса (compressibility)
        Для газа: line pack меняется при изменении давления.
        """
        balance = inlet_flow_m3h - outlet_flow_m3h - line_pack_change
        balance_pct = balance / (inlet_flow_m3h + 1e-9)

        # EWMA фильтр
        if self.ewma_balance is None:
            self.ewma_balance = balance_pct
        else:
            self.ewma_balance = self.alpha * balance_pct + (1 - self.alpha) * self.ewma_balance

        leak_detected = self.ewma_balance > self.threshold

        return {
            'line_id': self.line_id,
            'instantaneous_balance_pct': round(balance_pct * 100, 3),
            'ewma_balance_pct': round(self.ewma_balance * 100, 3),
            'leak_detected': leak_detected,
            'estimated_leak_rate_m3h': max(0, balance) if leak_detected else 0
        }

Как отрицательная ударная волна (NPW) определяет точное место утечки?

На одном из проектов мы внедрили NPW на газопроводе длиной 120 км. Для обнаружения достаточно двух датчиков давления с частотой опроса 1 Гц. Скорость волны для газа — около 400 м/с, для жидкости — 1100 м/с. Алгоритм детектирует резкое падение давления (>5 bar/c) и локализует утечку по разнице времени прихода волны. Точность локализации — ±50 м.

def detect_negative_pressure_wave(pressure_sensors: dict,
                                   pipeline_params: dict) -> dict:
    """
    При разрыве трубы → резкое снижение давления в точке разрыва →
    волна пониженного давления распространяется в обе стороны.
    Скорость волны: a = sqrt(K/ρ) ≈ 1000-1300 м/с для жидкостей.

    Зная время прихода волны к двум датчикам → местоположение разрыва.
    """
    wave_speed = pipeline_params.get('pressure_wave_speed_ms', 1100)  # м/с

    # Определяем время прихода волны к каждому датчику
    arrival_times = {}
    for sensor_id, pressure_series in pressure_sensors.items():
        # Ищем резкое падение: производная < -threshold
        dP_dt = np.gradient(pressure_series.values, 1)  # 1-секундные данные
        sharp_drop_indices = np.where(dP_dt < -5)[0]  # > 5 bar/s = ударная волна

        if len(sharp_drop_indices) > 0:
            arrival_times[sensor_id] = sharp_drop_indices[0]

    if len(arrival_times) < 2:
        return {'leak_detected': False}

    # Локализация по двум датчикам A и B
    sensor_ids = list(arrival_times.keys())[:2]
    t_A = arrival_times[sensor_ids[0]]
    t_B = arrival_times[sensor_ids[1]]
    delta_t = abs(t_A - t_B)  # секунды

    # Расстояние от A до точки разрыва
    distance_AB = pipeline_params['sensor_distances'].get(
        (sensor_ids[0], sensor_ids[1]), 5000  # м между датчиками
    )
    dist_from_A = (distance_AB - wave_speed * delta_t) / 2
    dist_from_A = max(0, min(dist_from_A, distance_AB))

    return {
        'leak_detected': True,
        'leak_location_m_from_sensor_A': round(dist_from_A, 0),
        'confidence': 'high',
        'delta_t_seconds': delta_t
    }

Конкретный пример: на газопроводе длиной 120 км мы внедрили NPW + акустику. В течение первого месяца система обнаружила две малые утечки (0.2% от потока), которые балансовый метод пропускал. Локализация показала точность ±15 метров, что подтвердилось при шурфлении.

Почему fusion-детекция надёжнее одного метода?

Комбинируем три метода с весами: балансовый (0.4), NPW (0.4), акустика (0.2). Если хотя бы один подтверждает утечку с высокой уверенностью, система выдаёт аларм. Это снижает количество ложных срабатываний на 70% по сравнению с пороговыми методами.

Сравнение методов по надёжности:

Метод Время обнаружения Ложные срабатывания Точность локализации
Балансовый (ML) 5-30 мин ~30% ±500 м
NPW 30-60 с ~10% ±50 м
Fusion (ML+NPW+Акустика) секунды <5% ±10 м

Пример кода:

def fuse_leak_detections(balance_result: dict,
                          npw_result: dict,
                          acoustic_result: dict) -> dict:
    """
    Каждый метод имеет свои ложные срабатывания.
    Голосование с весами по надёжности метода.
    """
    votes = 0
    total_weight = 0
    location_estimates = []

    if balance_result.get('leak_detected'):
        votes += 0.4
        location_estimates.append(balance_result.get('estimated_location'))
    total_weight += 0.4

    if npw_result.get('leak_detected'):
        votes += 0.4
        location_estimates.append(npw_result.get('leak_location_m_from_sensor_A'))
    total_weight += 0.4

    if acoustic_result.get('leak_detected'):
        votes += 0.2
        location_estimates.append(acoustic_result.get('acoustic_location_m'))
    total_weight += 0.2

    confidence = votes / total_weight
    best_location = min(location_estimates, key=lambda x: 0 if x is None else 1) if location_estimates else None

    return {
        'leak_confirmed': confidence >= 0.4,  # хотя бы один надёжный метод
        'confidence': round(confidence, 2),
        'estimated_location_m': best_location,
        'alert_level': 'critical' if confidence > 0.8 else 'warning'
    }

Акустический мониторинг: от сигнала к решению

Акустические датчики фиксируют высокочастотный шум утечки (500-5000 Гц). Мы применяем полосовую фильтрацию и извлекаем признаки: RMS, куртозис, отношение энергии в полосе утечки к общей. Пороговое значение leak_score > 0.6 указывает на утечку. Обработка идёт в реальном времени с задержкой не более 1 секунды.

from scipy import signal
import librosa

def analyze_acoustic_signal(audio_signal: np.ndarray,
                              sampling_rate: int = 44100) -> dict:
    """
    Утечка производит характерный акустический сигнал:
    - Широкополосный шум 100-10000 Гц
    - Характеристика зависит от давления и размера отверстия
    """
    # Фильтрация: полосовой фильтр 500-5000 Гц (диапазон утечек)
    b, a = signal.butter(4, [500, 5000], btype='band', fs=sampling_rate)
    filtered = signal.filtfilt(b, a, audio_signal)

    # Признаки
    rms = np.sqrt(np.mean(filtered**2))
    kurtosis = np.mean((filtered - filtered.mean())**4) / (np.std(filtered)**4 + 1e-9)

    # Спектральные признаки
    freqs, psd = signal.welch(filtered, fs=sampling_rate, nperseg=1024)
    band_energy = np.trapz(psd[(freqs >= 1000) & (freqs <= 3000)], freqs[(freqs >= 1000) & (freqs <= 3000)])
    total_energy = np.trapz(psd, freqs)
    leak_band_ratio = band_energy / (total_energy + 1e-9)

    # Классификация: сравнение с шаблонами нормального шума трубопровода
    leak_score = rms * 0.4 + leak_band_ratio * 0.4 + min(1, kurtosis / 10) * 0.2

    return {
        'rms_amplitude': float(rms),
        'kurtosis': float(kurtosis),
        'leak_band_ratio': float(leak_band_ratio),
        'leak_score': float(leak_score),
        'leak_detected': leak_score > 0.6
    }

Что даёт система на практике?

За последние годы мы внедрили более 30 систем на нефте- и газопроводах. На одном из объектов fusion-детекция позволила сократить ложные алармы на 70% и обнаружить утечку 0.2% от потока за 15 секунд, тогда как старый балансовый метод показывал нестабильность. Экономия от предотвращённых штрафов и потери продукта — миллионы рублей.

Что входит в работу

  • Технический аудит и сбор исторических данных с трубопровода.
  • Разработка алгоритмов (балансовый, NPW, акустика, fusion).
  • Интеграция с SCADA через OPC-UA (Emerson DeltaV, Honeywell Experion, ABB 800xA).
  • Тестирование на исторических авариях и ретроспективных данных.
  • Обучение диспетчеров работе с системой.
  • Гарантийная поддержка 12 месяцев.

Сроки ориентировочно

  • Базовая версия (балансовый + алерты + SCADA коннектор) — от 3 до 4 недель.
  • Полный функционал (NPW, акустика, fusion, автоматическое закрытие задвижек) — от 3 до 4 месяцев.

Закажите предварительную оценку — мы подготовим коммерческое предложение с точными сроками под ваш объект. Более 5 лет на рынке, 30+ реализованных проектов по промышленной автоматизации.

Детекция аномалий: автоэнкодеры, 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 незапланированных остановки по $40k каждая. Экономия после внедрения — $120k за полгода (отчёт о пилоте на объекте клиента).

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

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

  • 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-мониторинге. Получите консультацию — расскажем, как решить вашу задачу.