Предсказание отказов оборудования в нефтегазовой отрасли задача, которая напрямую связана с деньгами и безопасностью. Простои установки стоят миллионы, а аварии могут привести к еще большим потерям. В компаниях вроде X и Z тема предиктивного обслуживания обсуждается не ради модернизации ради самой модернизации, а потому что каждый дополнительный час работы без поломки снижает затраты.
В отличие от прогнозирования спроса или продаж, где данных много и повторяются стандартные паттерны, с отказами все иначе. Оборудование способно работать месяцами без проблем, а потом неожиданно ломается. Получается, что у нас есть длинная история "все было нормально" и очень мало записей про то, как и когда все же что-то сломалось.
Сложность редких событий
Возьмем пример буровых установок компании X. Датчики фиксируют температуру, давление промывочной жидкости, вибрации вала. Записывается каждую секунду и в итоге накапливаются терабайты данных. Но при этом отказ бурового насоса происходит раз в полгода, а серьезный сбой электрической системы раз в два года.

Классические методы дают сбой в таких условиях. Логистическая регрессия будет "угадывать" что ничего не сломается и почти никогда не ошибется, но пользы от этого нет. Модели временных рядов типа ARIMA плохо справляются, потому что редкие точки отказов не создают заметной сезонности или циклов.
Ситуация похожа в X, где тысячи километров трубопроводов и десятки компрессорных станций. Там в день может быть сотня сигналов от сенсоров давления и температуры, но реальная авария происходит один раз в несколько месяцев.
Математические основы байесовского подхода
Байесовский метод предлагает смотреть на задачу через вероятности. У нас есть априорные знания о том, как часто оборудование выходит из строя. Для бурового насоса X это может быть "раз в 4500 часов работы". Это априор. Далее каждое измерение температуры или отклонение вибраций обновляет вероятность, что сбой приближается.
Байесовская формула
P(H∣D)=P(D∣H)⋅P(H)P(D)P(H∣D)=P(D)P(D∣H)⋅P(H)
где HH гипотеза, что будет отказ, а DD новые сенсорные данные.
К примеру, если насос работал 3000 часов без сбоев и датчики начали показывать рост вибраций, то вероятность отказа уже не базовая, а выше за счет обновления данных.
Пуассоновское распределение для редких событий
P(N=k)=λk⋅e−λk!P(N=k)=k!λk⋅e−λ
где λλ среднее количество событий за интервал времени.
Экспоненциальное распределение времени до отказа
f(t)=λ⋅e−λtf(t)=λ⋅e−λt
где λλ интенсивность отказов.
Распределение Вейбулла для анализа надежности
f(t)=kλ⋅(tλ)k−1⋅e−(t/λ)kf(t)=λk⋅(λt)k−1⋅e−(t/λ)k
где kk параметр формы, λλ параметр масштаба.
Практические расчеты на реальных данных
X
Общее время наблюдения: 4320 часов
Количество отказов: 1
Наблюдаемая интенсивность отказов: 0.000231 отказов/час
Среднее время до отказа: 4320 часов
Параметр λλ для X: 0.000231
Вероятность отказа в ближайшие 100 часов: 0.023
Вероятность отказа в ближайшие 500 часов: 0.109
Z
Общее время наблюдения: 17520 часов
Количество отказов: 1
Наблюдаемая интенсивность отказов: 0.000057 отказов/час
Среднее время до отказа: 17520 часов
Параметр λλ для Z: 0.000057
Вероятность отказа в ближайшие 30 дней (720 часов): 0.040
Вероятность отказа в ближайший год: 0.393

Байесовское обновление прогноза по сенсорным данным
Для практического применения важно показать, как байесовская модель обновляет прогнозы при появлении аномальных показаний датчиков. Возьмем данные X:
Пороговые значения:
Критическая температура: 61.7°C
Критическая вибрация: 0.88 мм/с
Критическое давление: 139.6 бар
При превышении температурного порога вероятность отказа увеличивается в 2.5 раза, при превышении вибрационного порога в 3 раза, при падении давления ниже критического в 1.8 раза.
Анализ последних измерений показал несколько случаев одновременного превышения температурного и вибрационного порогов, что повышало вероятность отказа до 0.174 (в 7.5 раз выше базовой).
Анализ надежности с распределением Вейбулла

Для анализа надежности буровых установок X использовались исторические данные о 20 отказах. Метод максимального правдоподобия дал оценку параметров Вейбулла:
Параметр формы k=1.515k=1.515 (больше 1, что указывает на старение оборудования)
Параметр масштаба λ=4921λ=4921 час
Практические выводы:
Медианное время работы до отказа: 3864 часа (161 день)
Рекомендуемый интервал профилактики: 2705 часов
Критический период эксплуатации: после 5796 часов
При параметре формы больше 1 характерно старение оборудования вероятность отказа растет со временем эксплуатации.
Код на PyMC для байесовского анализа
import pymc as pm
import numpy as np
import pandas as pd
Загружаем данные X
data = pd.read_csv('X_sensor_data.csv')
temperature = data['temperature'].values
vibration = data['vibration'].values
failures = data['failure'].values
Байесовская модель для прогноза отказов
with pm.Model() as failure_model:
# Априорные распределения параметров
beta_temp = pm.Normal('beta_temp', mu=0, sigma=1)
beta_vibr = pm.Normal('beta_vibr', mu=0, sigma=1)
intercept = pm.Normal('intercept', mu=-5, sigma=2)
import pymc as pm
import numpy as np
import pandas as pd
# Загружаем данные X
data = pd.read_csv('X_sensor_data.csv')
temperature = data['temperature'].values
vibration = data['vibration'].values
failures = data['failure'].values
# Байесовская модель для прогноза отказов
with pm.Model() as failure_model:
# Априорные распределения параметров
beta_temp = pm.Normal('beta_temp', mu=0, sigma=1)
beta_vibr = pm.Normal('beta_vibr', mu=0, sigma=1)
intercept = pm.Normal('intercept', mu=-5, sigma=2)
# Логистическая регрессия для вероятности отказа
logit_p = intercept + beta_temp * temperature + beta_vibr * vibration
p = pm.invlogit(logit_p)
# Функция правдоподобия
y_obs = pm.Bernoulli('y_obs', p=p, observed=failures)
# Сэмплирование
trace = pm.sample(2000, tune=1000, return_inferencedata=True)
Пуассоновская модель для интервалов между отказами
# Модель для анализа времен между отказами
with pm.Model() as poisson_model:
# Априор для интенсивности отказов
lambda_param = pm.Exponential('lambda', lam=1/5000) # среднее время 5000 часов
# Наблюдаемые интервалы между отказами
intervals = [4320] # наш фактический интервал
# Экспоненциальное распределение времен
obs_intervals = pm.Exponential('obs_intervals', lam=lambda_param, observed=intervals)
# Сэмплирование апостериорного распределения
trace_poisson = pm.sample(1000, tune=500)
# Прогноз времени до следующего отказа
pm.set_data({'intervals': [0]}) # убираем наблюдения
post_pred = pm.sample_posterior_predictive(trace_poisson)
Динамическая байесовская модель состояния
State-space модель для эволюции состояния оборудования
with pm.Model() as state_space_model:
# Скрытое состояние оборудования (от 0=новое до 1=критическое)
sigma_state = pm.Exponential('sigma_state', 1.0)
sigma_obs = pm.Exponential('sigma_obs', 1.0)
# State-space модель для эволюции состояния оборудования
with pm.Model() as state_space_model:
# Скрытое состояние оборудования (от 0=новое до 1=критическое)
sigma_state = pm.Exponential('sigma_state', 1.0)
sigma_obs = pm.Exponential('sigma_obs', 1.0)
# Начальное состояние
state_init = pm.Beta('state_init', 1, 9) # начинаем с хорошего состояния
# Эволюция состояния во времени (случайное блуждание)
state = pm.GaussianRandomWalk('state', sigma=sigma_state,
init_dist=pm.Normal.dist(state_init, 0.1),
shape=len(temperature))
# Связь наблюдаемых параметров со скрытым состоянием
temp_mean = 45 + 15 * state # температура растет с износом
vibr_mean = 0.5 + 0.4 * state # вибрация растет с износом
# Наблюдения
temp_obs = pm.Normal('temp_obs', mu=temp_mean, sigma=sigma_obs, observed=temperature)
vibr_obs = pm.Normal('vibr_obs', mu=vibr_mean, sigma=sigma_obs/10, observed=vibration)
# Прогноз отказа как функция состояния
failure_prob = pm.invlogit(5 * state - 3) # отказ вероятен при высоком износе
failure_obs = pm.Bernoulli('failure_obs', p=failure_prob, observed=failures)
Анализ деградации для Z
Для компрессорной станции Z анализ показал:
Начальный КПД: 84.78%
Скорость деградации: -0.1570% в день (-57.32% в год)
Прогноз достижения критического КПД (75%): через 62 дня
Функции надежности
Функция выживания (надежности):
R(t)=P(T>t)=1−F(t)R(t)=P(T>t)=1−F(t)
Функция интенсивности отказов:
h(t)=f(t)R(t)=−ddt[ln(R(t))]h(t)=R(t)f(t)=−dtd[ln(R(t))]
Кумулятивная функция опасности:
H(t)=∫0th(u)du=−ln(R(t))H(t)=∫0th(u)du=−ln(R(t))
Практические сценарии применения
1. X - буровой насос
Сенсор вибрации фиксирует появление нового гармонического пика в спектре
Байесовская модель пересчитывает вероятность отказа
После нескольких недель рост интенсивности указанного признака делает прогноз: "Вероятность сбоя в ближайшие 100 часов 0.65"
Инженеры принимают решение о техническом обслуживании без ожидания аварии
2. Z - компрессорная станция
Наблюдается постепенный рост температуры и падение КПД
Априори известно, что поломки таких компрессоров случаются каждые 4 года
Байесовская модель обновляет прогноз после каждой недели наблюдений
Получается уведомление: "Вероятность выхода из строя в течение ближайших 30 дней выросла до 0.7"
3. Z - трубопроводы
Частота малых утечек, выявляемых датчиками давления, растет
Пуассоновская модель показывает, что вероятность крупного прорыва в ближайший месяц выросла в несколько раз
Компания планирует профилактический ремонт вместо того чтобы ждать аварийную ситуацию
Преимущества для инженеров
Для инженеров в X и Z ценность в том, что получаем не абстрактное "сломается" или "работает", а вероятность и объяснение:
Можно встроить экспертное знание. Если работники знают, что насосы живут три года без обслуживания, это сразу задается в априорах
Мало данных не беда. Байесовский вывод справляется даже при редких отказах
Прозрачность. Когда система пишет: "Вероятность 0.7 из-за роста температуры и вибрации", это понятнее и полезнее чем черный ящик нейросети
Ограничения
Есть и минусы. Вычисления могут быть тяжелыми. Методы вроде MCMC требуют ресурсов. Нужно настраивать априоры и проверять, что они соответствуют реальности. И инженерам, которые принимают решения, нужна простая визуализация. Если модель будет в неудобной форме, то доверие упадет.
Будущая перспектива для нефтегаза
Можно представить себе байесовского агента, встроенного в систему мониторинга X или Z. Агент будет:
собирать сигналы из SCADA
обновлять прогнозы в реальном времени
выдавать рекомендации инженерам простыми словами
Сообщение может выглядеть так:
"Вероятность выхода из строя компрессора №12 на станции А выросла до 42%. Основная причина превышение температуры на 12 градусов и рост вибраций. Рекомендуем диагностику в течение 72 часов".
Такой формат интегрируется в текущие процессы и сильно снижает человеческий риск и стоимость аварийных ремонтов.
Заключение
На примере X и Z видно, что байесовский анализ и работа с временными рядами помогают справиться с редкими событиями. Байесовские модели дают возможность учесть слабые признаки отказа, встроить знания инженеров и при этом обновлять прогнозы по мере появления новых данных. С их помощью отказы перестают быть неожиданностью и становятся планируемыми рисками, а компании получают экономию и стабильность работы.
Практическое применение показывает, что даже простые байесовские модели с экспоненциальными и Пуассоновскими распределениями способны давать полезные прогнозы при работе с редкими событиями. Более сложные модели состояния и Вейбулловский анализ надежности добавляют детализацию и позволяют планировать техническое обслуживание оптимально.
alexhu
Метод Байеса даёт не самые лучшие прогнозы по сравнению с другими моделями, хотя тут я не знаю какая конкретно задача решалась, можно и так сигналы обрабатывать.