Привет, Хабр! Это моя первая статья здесь, так что начну с краткого знакомства. Я инженер по моделированию процессов добычи и подготовки нефти и газа, а до этого работал непосредственно «в поле» — оператором и технологом на производстве. Моя основная задача — численные расчеты (на основе разных программных пакетов, в основе которых уравнения сохранения массы, энергии и импульса), анализ данных и моделирование технологических процессов для оптимизации производства и реинжиниринга. Не во всех задачах классические методы позволяют достичь целевого результата, поэтому я начал осваивать Machine Learning.
Я не профессионал в Data Science, но хорошо пониманию как работают разные технические штуки в промышленности. Разрабатываемые решения проверяю через призму физики процессов: стараюсь балансировать между «обучить модель» и «не забыть базовые уравнения». Если разработанное решение решает задачу уже на в полуавтомате 3+, то это уже успех (мое видение Закон Парето). Буду рад вашим вопросам, советам и предложениям по доработке решений.
В этой статьей расскажу, как я моделировал работу гидроциклонов (ГЦ) для очистки воды от нефти на реальном промышленном объекте. Объясню, почему выбрал машинное обучение (ML) вместо физико-математических моделей, опишу ключевые этапы работы, ошибки, важные выводы и итоговые результаты.
Технологический процесс очистки воды от нефти
Погружение в доменную область – очень важная часть работы, которая во многом определяет стратегию работы и влияет на конечный результат. Чем хуже разобрался, тем больше вероятность получить «черный ящик», генерирующий ответы. Этот этап дался сравнительно легко благодаря производственному опыту и навыку погружения в технологический процесс.
При добыче нефть выходит из пласта в смеси с водой и газом. Первичное разделение фаз происходит в сепараторе, но даже после него в воде остаётся значительная концентрация нефти — до нескольких тысяч мг/л. Поскольку эта вода не представляет ценности, её закачивают обратно в пласт. Однако высокая концентрация нефти в воде вызывает проблемы в насосах закачки воды в пласт и ухудшается приемистость нагнетательных скважин. Гидроциклон (ГЦ) решает эту проблему, снижая концентрацию нефти до десятков мг/л. Это крайне простое и не прихотливое устройство. Состоит из разборного корпуса, гильз и опор для гильз.

Источник: https://enhydra.co.uk/products/ll15-deoiling-hydrocyclone-2/
Ключевой элемент — геометрия гильзы. Водонефтная смесь входит в гильзу ацентрично, получает центростретительное ускорение и теряет давление. Благодаря разнице плотностей нефть как менее плотная среда выжимается в центр гильзы, а вода – к краям. Потоки выходят с разных сторон гильзы.
Если поток закручивается «слабо», то разделения нефти и воды не происходит. Если «сильно» - то в гильзе возникает эффект схожий с турбулентностью и потоки вновь смешиваются, либо из нефти выделяется значительный объем газа, занимающий центральную часть гильзы, а нефть уходит с водой. Есть оптимальное значение перепада давления между входом и выходом воды для достижения наилучшего качества воды.

На промысле обычно устанавливают блок из нескольких ГЦ, каждый из которых содержит десятки гильз. Количество активных ГЦ (включенных в работу) зависит от объёма поступающей воды. Схематично блок ГЦ представлен ниже.

Расходомер FT измеряет расход воды, выходящий из сепаратора и поступающий в блок ГЦ. Датчик перепада давления PDI1 – измеряет перепад давления между входом и выходом воды в блоке. PDI2 - измеряет перепад давления между входом воды и выходом нефти в блоке. Далее для краткости PDI1 и PDI2 обозначают сами значения перепадов, а не датчики.
LCV это клапан для поддержания уровня в сепараторе. Регулировать PDI1 можно меняя ГЦ, который включен в работу. Как и говорил выше, очень важно включить в работу такой ГЦ, при котором будет оптимальное значение PDI1.
Важно также организовать отвод нефти из гильз ГЦ. Для этого необходим клапан регулятор на линии отвода нефти из блока OV. Если клапан открыть мало, то PDI2 будет небольшим, расход жидкости из центральной части гильзы в линию отвода нефти будет недостаточным, нефть начнем накапливаться в гильзах и постепенно начнет уходить вместе с потоком чистой воды. Если открыть сильно, то PDI2 будет большим и вместе с нефтью будет уходить много воды, что вызовет дополнительную нагрузку на другие узлы промысла. Это сродни процессу вырезания «глазка» из картошки. Если нож втыкаем слишком сильно, то глазок мы вырезаем полностью, но теряем много картошки, если не сильно – потери картошки минимальны, но «глазок» убираем не полностью.
Работа котроллера PDR как раз позволяет найти золотую середину. SP – это целевое значение отношения перепадов давлений PDI2/ PDI1, которое устанавливает технолог. PDR рассчитывает фактическое отношение PDI2/ PDI1 и регулирует степень открытия OV, поддерживая фактическое значение PDI2/ PDI1 равным SP. Чем выше SP, тем выше степень открытия OV, тем выше PDI2, тем больше расход на линии отвода нефти.
Таким образом, эффективность работы ГЦ регулируется:
Количеством активных гильз (переключением между ГЦ).
Заданным значением SP.
К дополнительным факторам, которые могут оказывать влияние на эффективность отделения нефти от воды относятся:
вязкости и плотности воды и нефти, что в большей степени определяется температурой в сепараторе.
размер и распределение капель нефти (определяются во многом дозировкой и качеством промысловой химии).
Содержание нефтепродуктов в воде периодически измеряется путем отбора проб воды на входе и выходе с блока ГЦ.
Бизнес-проблема и образ конечного результата
На этом этапе я допустил серьёзную ошибку, из-за которой несколько недель работы оказались потрачены впустую. Позже, изучив материалы опытных специалистов (например @Katser), понял, что сразу взялся за решение бизнес-проблемы, не проанализировав её достаточно глубоко.
Исходная бизнес-проблема подразумевала создание модели, которая будет рассчитывать остаточное содержание нефти в воде в зависимости от параметров технологического процесса.
Первоначально я пытался решить задачу на основе физико-математических моделей ANSYS и HYSYS. Несмотря на наличие статей по данной теме, после нескольких недель экспериментов я нашел это слабо применимым в реальности отказался из-за:
неопределённостей и отсутствия качественных исходных данных.
множества рычагов для настройки моделей.
невозможности оперативной работы с моделью на промысле.
После общения с технологами выяснилось, что исходная формулировка проблемы не отражала реальных потребностей производства. Главная проблема была не в предсказании содержания нефти, а в оптимальном выборе гидроциклонов (ГЦ) для поддержания целевого перепада давления PDI1. Ключевые инсайты:
оптимальный диапазон PDI1 (400–440 кПа) был уже известен из экспериментов прошлых лет.
параметр SP PDR (управляющий клапаном OV) слабо влиял на результат в рамках нормального режима.
лабораторные замеры содержания нефти (раз в сутки) были слишком редкими для оперативного управления.
Таким образом, целевой переменной процесса стал PDI1 (измеряется датчиком) вместо содержания нефти в воде (измеряется лабораторий несколько раз в сутки).
Исходная бизнес-задача была переформулирована и разбита на несколько задач:
Задача №1 – Разработать «модель для расчета перепада давления», которая позволит оперативно понимать какой ГЦ или группу ГЦ необходимо ввести в работу для поддержания целевого перепада давления PDI1. Желательно иметь рекомендательную систему, которую можно легко интегрировать в систему управления производством. Метрика качества - MAE.
Задача №2 – Разработать подход для оценки степени загрязнения ГЦ и принятия решение о выводе ГЦ на основе факта работы, а не по графику.
Задача № 3 – Определить способ расстановки гильз в ГЦ 1 раз в год так, чтобы с учетом планового роста обводненности добываемой нефти, не вскрывать ГЦ для добавления гильз (вскрытия только для чистки при засорении).
Ожидаемый эффект от работы
Сокращение трудозатрат на ~150 чел./час в год за счёт уменьшения числа вскрытий ГЦ (газоопасные работы).
Увеличение времени работы с целевым перепадом давления PDI1 до 95 процентов в год. Так как система носит рекомендательный характер, пользоваться ее подсказками или нет - зависит от оператора за пультом управления, но на мой взгляд этой величины можно легко достичь.
Структура работы
Из-за множества микрорешений в ML-проектах я использовал Mind Map для планирования и отслеживания прогресса. В статье представлю итоговую версию после проверки всех гипотез.

Исходные данные
Данные о переключениях ГЦ
В системе используется 6 ГЦ с маркировкой A, B, C, D, E, F. Каждый ГЦ содержит разное количество гильз (известно точно). В зависимости от расхода воды операторы комбинируют их в группы, например ABF, CDE или BCDE. Операторы фиксируют время переключений и состав групп ГЦ в журнал, но возможны ошибки в записях.
Данные с датчиков промысла
Собрал данные с максимального количества датчиков, которые могут дать полезные данные о работе ГЦ:
Расход воды на входе в блок гидроциклонов (FT).
Перепад давления между входным потоком и потоком очищенной воды из блока ГЦ (PDI1) – наш целевой параметр.
Перепад давления между входным потоком и потоком нефти из блока ГЦ (PDI2).
Фактическое отношение PDI2/PDI1 – хоть наш эксперимент и показал слабое влияние данного фактора, первоначально я также взял его в оассмотрение.
Степени открытия клапанов OV и LCV.
Давление в сепараторе и уровень жидкости в сепараторе, так как из них складывается давление на входе в блок ГЦ.
Температуру жидкости в сепараторе, так как оказывает влияние на плотность и вязкость.
Плановые показатели роста обводнености продукции (добыча воды) воды на 1 год для Задачи №3.
Задача №1- Модель расчета перепада давления
Для формирования модели расчета перепада давления PDI1 (Задача №1) используем данные сразу после чистки ГЦ (эталонное состояние). По мере загрязнения ГЦ отклонения фактического PDI1 от расчётного позволят оценить степень загрязнения ГЦ (Задача №2).
Предобработка данных
Пропуски: Удалены строки с отсутствующими значениями (объём данных позволял это сделать без потерь).
Замороженные значения: Артефакты из-за сбоев сервера (повтор предыдущих показаний) устранены через сравнение с shift().
Дискретность данных: Данные поступали с шагом 10–35 минут, но анализ временных рядов не потребовался: режим работы ГЦ не зависит от предыдущих состояний.
Выбросы: Удалены физически невозможные значения (например, отрицательный расход воды при запуске сепаратора в работу). Анализ взаимосвязей параметров выявил аномалии зависимости перепада давления PDI1 от расхода, не соответствующие физике процесса.
На рисунке ниже график зависимости перепада давления PDI1 от расхода воды при разном количестве гильз.По графику видно:
Есть прямо пропорциональная зависимость перепада и расхода. Зависимость похожа на квадратичную.
В среднем – если один и тот же расход пропускаю через разное количество гильз, то перепад больше там, где гильз меньше. Но есть и «нарушения»: чисто визуально, часть данных для 69 гильз и 75 гильз в эту логику не вписывается.

Физика процесса и допущения
Откуда взялась такая зависимость перепад давления от расхода? Для несжимаемых жидкостей зависимость потерь напора на трение в трубе от расхода носит квадратичный характер и описывается формулой Дарси-Вейсбаха. Запишу не совсем в привычном виде, но так удобнее для объяснения:

hf — потери напора (м),
λ — коэффициент трения,
L — длина трубы (м),
D — внутренний диаметр трубы (м),
Q — расход жидкости (м3/с),
g — ускорение свободного падения (9.81 м/с2).
Использовать данную формулу для прямого аналитического решения нельзя, так как слишком много неизвестных (не знаем геометрию гильзы, из нефти может выделяться газ, а он сжимаем и т.д.). Но для базового понимания того, как себе ведет ГЦ по факту -очень подходит.
Гильзы в ГЦ абсолютно одинаковые. Трубы в обвязке ГЦ тоже одинаковые. Допустим, что тогда вся вода, поступающая, в блок ГЦ, распределится между ГЦ пропорционально количеству установленных гильз. Другим словами, через каждую гильзу идет одинаковый расход. Тогда мы можем выделить новую фичу – удельный расход воды на 1 гильзу: общий расход знаем и какие ГЦ были в работе в какое время тоже знаем. Из графика видно, что для большей части данных зависимость перепада давления и удельного расхода действительно одна. Есть данные (обведены красным), которые данной зависимости не подчиняются и их надо анализировать дальше.

Автоматическое выявление выбросов
Технических причин для выбросов, связанных к перекалиброкой датчиков, их неправильной работой, проблемами с передачей данных не было. Проблема оказалась во времени переключения между ГЦ. Данные «перекочёвывали» из ручного журнала в электронный и иногда часть данных либо не вносили, либо вносили с ошибкой. Чтобы не делать постоянных перепроверок журналов, был разработан алгоритм для поиска выбросов.
Рассмотрим данные о работе ГЦ BCF и BEF. Для BCF группы точек 1 и 2 — это корректные данные при работе BCF, группа точек 3 – это данные ошибочно отнесенные к периоду работы BCF. Для BEF группа точек 1 – это корректные данные, 2 – некорректные.


Из-за того, что данные подчиняются физической зависимости и могут быть по-разному расположены для разных случаев работы ГЦ мне не удалось подобрать единого алгоритма на основе кластеризации. Расстояние Махалонобиса и его вариации не позволило получить хорошего результата.
А вот метод главных компонент (PCA) показал отличный результат. Вообще, PCA это метод снижения размерности данных, который преобразует исходные признаки в новые ортогональные компоненты (главные компоненты). Я выделял одну главную компоненту и далее оценивал метрики Q и Т2. Повышенное Q свидетельствует о выбросах, а повышенное Т2 о необычных режимах работы ГЦ, но не о выбросах. Для режима работы ГЦ BCF (71 гильза) группа точек 3 явно выделились как выброс. На графике зависимости Q от времени видно, что было 2 периода работы ГЦ BCF. Повышенные Q были в начале второго периода, что говорит о том, что с большой долей вероятности в журнал было внесено некорректное время переключения между ГЦ.

Посторенние модели перепада давления
Сначала построил модель CatBooost на всех фичях с небольшими тонкими настройками. Средний показатель MAE на тестовой выборке составил 8.0 КПа. Очень хороший результат!
Оценка важности фичей показала, что наибольший вес фичей имеет показатель удельного расхода на 1 гильзу, а все остальные показатели были в 7-10 раз ниже. Такой результат как раз хорошо соотносился с физикой процесса.
Далее я отказался от всех фичей кроме удельного расхода и построил модель линейной регрессии. В качестве уравнения я выбрал y=ax^2+c. Свободный член нужен, так как у нас нет данных при работе на малых расходах. Средний показатель MAE на тестовой выборке составил 8.6 КПа.

Разница в показателях оказалось совсем небольшой, но при этом вместо модели «черного ящика», которую проблематично интегрировать в СУП, получили простую зависимость с очень хорошей прогнозной способностью.
Таким образом, для Задачи №1 я остановился на модели линейной регрессии ввиду баланса качества прогнозирования и простоты.
Посторенние рекомендательной системы
У нас есть уравнение, связывающее перепад давления PDI1 с удельным расходом на гильзу. Удельный расход это отношение общего расхода воды, замеряемого расходомером FT, к общему числу гильз, через которые проходит вода.
Проведя простые математические предобразования полученной зависимости, зная фактический расход воды по FT и целевой перепад 400-440 КПА, мы можем рассчитать какое количество гильз должны быть включены в работу. Далее технолог получает рекомендацию о том, какой ГЦ или группу ГЦ нужно ввести в работу, чтобы максимально приблизиться к необходимому количеству гильз.
Задача №2- Подход к оценке степени загрязненности ГЦ
В задаче №1 на основании показателей работы чистых ГЦ была построена зависимость перепада давления PDI1 от удельного расхода на 1 гильзу (базовая модель).
ГЦ загрязняются как во время работы, так и при длительном простое. При длительном простое, температура оставшейся жидкости в ГЦ падает и может опуститься ниже температуры выпадения АСПО (асфальто-смоло-парафиновых отложений) и тогда гильзы залепляет «пластилинообразными» отложениями. Также внутри ГЦ могут осаждаться механические примеси (ка правило кварц). В таком случае мы будем думать, что в ГЦ установлено 60 гильз, а реально работать всего 57.
Получив выгрузку данных с датчиков спустя несколько месяцев работы, показатель MAE нашей базовой модели может заметно ухудшиться. Если провести манипуляции с данными, описанными в Задаче№1, мы можем построить новую модель. Если ее показатель MAE будет сопоставим с подателем MAE базовой модели для чистых гильз, то высока вероятность изменения режим работы расходомера или датчика перепада (перкалибровка или поломка). Если оба показателя MAE высокие, то это признак загрязнения ГЦ.
Вот пример графика зависимости перепада давления PDI1 от удельного расхода, но уже после полугода работы. Голубые крестики – базовая модель, красные -новая модель. Показатель MAE базовой модели 37.2 Кпа, новой модели – 21.3 Кпа.

В ГЦ установлено 32,13,23,29,27 и 35 гильз. Предположим, в каждом из ГЦ могли загрязниться от 1 до 6 гильз. Меняя количество гильз и проводя расчет удельного расхода, будем пересчитывать показатель MAE для всех возможных комбинаций.

Видно, что после 6 месяцев работы у нас большие проблемы с D,E и F их нужно выводит в чистку. При этом А,В,С в профилактической чистке не нуждаются.

Задача №3-Оптимальна расстановка гильз в ГЦ
Вскрытие ГЦ – это весьма трудоемкий процесс, связанный с газоопасными работами. Каждый ГЦ обязательно необходимо раз в год выводить из работы и вскрывать для проверки технического состояния. В этот момент обязательно проводятся работы по чистке и замене гильз. Вскрытие для чистки в случае выявления сильного загрязнения – это вынужденная мера, на которую приходится идти. А вот вскрытие ГЦ только ради замены гильз, потому что мы не можем обеспечить целевой перепад давления PDI1 необходимо исключить. Специально для этих целей был разработан алгоритм оптимальной расстановки гильз.
В задаче №1 мы нашли зависимость перепада давления PDI1 от удельного расхода. Чтобы выдерживать середину оптимального перепада PDI1 400-440 КПА удельный расход на 1 гильзу должен составить 2.1 м3/час.
На основе показателей разработки месторождения мы можем оценить прирост расхода пластовой воды. Зная удельный расход, прирост воды за год и текущие расходы воды, можно рассчитать граничные значения необходимого количества гильз в работе. В нашем примере это 75 и 186 гильз. Нам необходимо расставить гильзы в ГЦ так, чтобы включая в работу разные комбинации гильз получить все 112 значений.
Проблема в том, что у нас в блоке всего 6 ГЦ. Мы можем ввести в работу по одному ГЦ, можем ввести в параллельную работу 2, 3 , 4, 5 и сразу все 6 ГЦ. Если в каждый ГЦ поставить разное количество гильз, то мы получим всего 2^6-1=63 возможных варианта по количеству гильз в работе. Наша задача подобрать гильзы в каждый ГЦ так, чтобы:
Как можно больше вариантов из 63 возможных попало в диапазон гильз от 75 до 186.
Попавшие варианты были как можно равномернее распределены по диапазону от 75 до 186 гильз.
Если все 63 варианта попаду в диапазон и будут сгруппированы у левой границы, это означает что примерно половину года мы сможем легко обеспечивать целевой перепад 400-440 Кпа, но вторые полгода не сможем никак и потребуется вскрытие ГЦ для замены гильз. Поэтому идеально, чтобы эти 63 варианта оказались равномерно распределены по диапазону. Поэтому приоритет в принятии конечного решения о расстановке гильзы был отдан критерию 2.
Написал функцию, которая штрафовала за неравномерность. Принцип работы лучше всего пояснить на примере, когда целевой диапазон не очень большой 75-83. Есть 2 варианта расстановки гильз [75,77,80 ,83] и [75,76,81,82,83]. Рассчитаем разницу между значениями и возводим в квадрат, чтобы сильнее наказывать бОльшие промежутки [4,9,9] и[1,25,1,1] и рассчитываем сумму 22 и 28. Это балл штрафа, чем он меньше, тем и лучше.
В каждый ГЦ можно поставить от 1 до 60 гильз. Чтобы иметь как можно больше уникальных комбинаций, гильзы не должны повторяться. Так как у нас 6 ГЦ, то число сочетаний без повторений чуть более 50 млн. Такое большое количество вариантов расстановки гильз потребовало уделить много внимания коду для оптимизации памяти.
В итоге была выбрана комбинация с минимальным значением штрафа по неравномерности. На графике видно сколько из 63 возможных вариантов удалось уместить в диапазон от 75 до 186, значение штрафа, а также можно визуально оценить равномерность.

Заключение
По итогу решения всех трёх задач, удалось:
на основе модели линейной регрессии удалось соблюсти баланс качества и простоты модели. На основе нее удалось сделать простой калькулятор в EXCEL, которым могут пользоваться специалисты на промысле для оперативной работы.
сократить трудозатраты от 150 чел/час за счет исключения бесполезных вскрытий ГЦ для профилактической чистки и сокращений вскрытий ГЦ для замены гильз в условиях газоопасных работ