ХАКАТОН ОБРАЗОВАТЕЛЬНОГО ФОРУМА ПО МАТЕМАТИКЕ И ИСКУССТВЕННОМУ ИНТЕЛЛЕКТУ 2022

Задача 3
Прогноз дебита нефти
Необходимо построить модель для выполнения среднесрочного прогноза добычи нефти на основе ретроспективных данных по объемам дебита нефти и другим параметрам работы скважин.

Задача представлена Департаментом искусственного интеллекта и анализа данных ООО «Газпромнефть – Цифровые Решения»
Описание задачи
Ваша цель – построить модель для прогнозирования дебита нефти на 90 дней вперед, опираясь на предшествующие значения прогнозируемого показателя и (опционально) других параметров работы скважины.

Дебит нефти – объем ежедневно добываемой из скважины нефти. Является ключевой характеристикой ее работы, определяющей способность скважины генерировать продукт при заданном режиме эксплуатации.


Дебит нефти зависит от многих факторов:
  • От этапа жизненного цикла скважины: наиболее высокая добыча нефти наблюдается на начальном этапе эксплуатации скважины, в дальнейшем, по мере исчерпания запасов, объемы дебита нефти снижаются, в то время как доля воды в поступающем из скважины флюиде растет. Нормативный период эксплуатации скважины составляет 15 лет.
  • От запасов нефти в пласте, из которого производится добыча. При прочих равных условиях скважины разных месторождений будут показывать разный дебит нефти. Даже скважины в пределах одного месторождения в зависимости от местоположения могут отличаться динамикой показателей.
  • От режима работы насосов: изменение режима работы скважины может приводить как к увеличению, так и к уменьшению дебита нефти. Отследить смену режима эксплуатации можно по динамике забойного давления.
  • От технического состояния скважины: при возникновении различных дефектов скважины доля воды в общем объеме флюида резко и значительно возрастает, а доля нефти снижается. После проведения ремонтных работ на скважине дебит нефти восстанавливается. На графике это можно идентифицировать по характерным паттернам показателей дебита нефти и воды и производных от них коэффициентов.
Для диагностики состояния скважин используют показатель обводненности, рассчитываемый по формуле:

Qнефти / (Qнефти + Qводы) * 100%


Также используется водонефтяной фактор или WOR (Water Oil Ratio), рассчитываемый как:

Qводы / Qнефти


Модели, способные с высокой точностью прогнозировать дебит нефти повысят эффективность эксплуатации нефтяных скважин и скорость реагирования на негативные изменения ключевых показателей.

Сложность задачи связана с тем, что на работу скважины оказывает влияние большое количество факторов, которые не всегда возможно учесть и проводить их мониторинг на регулярной основе. Данные о внешних факторах, оказывающих влияние на дебит нефти, доступны для прошлых периодов, но не доступны для прогнозного периода.

Показатели работы скважин, получаемые с датчиков или вносимые в информационные системы людьми, могут содержать ошибки и пропуски, поэтому важное значение приобретает обработка данных и фильтрация выбросов (так называемые point outliers). В то же время при возникновении неполадок характер работы скважины значительно и быстро меняется, что осложняет прогнозирование дебита на отдаленные временные периоды.
1. Формат ввода
Вам предоставляются следующие файлы:
  • "train.csv" – файл с данными для обучения моделей.

Целевая переменная: "Дебит нефти"

Характеристики тренировочной выборки:
  • Размер train-таблицы: 67136 строк на 20 столбцов
  • Количество уникальных скважин в train-таблице: 106
Для каждой скважины в train-файле представлены временные ряды длиной не менее 620 элементов. Некоторые скважины содержат большее количество элементов. Дискретность временных рядов - суточная.

Столбец с целевой переменной не содержит пропусков в данных, однако некоторые интервалы могли быть линейно интерполированы, что видно при построении графиков: интерполированные сегменты временных рядов выглядят как нехарактерно ровная линия на графике.

Столбцы с другими параметрами скважин могут содержать пропуски. При построении модели вы можете использовать все имеющиеся данные, или только часть параметров, или только предшествующие значения целевой переменной – на ваше усмотрение.
1.2. Формат вывода
Ответ принимается в формате .csv.
Пример формируемого файла - "baseline_forecast.csv".

Ваша модель должна сформировать прогнозы для всех 106 скважин на 90 дней вперед. csv файл должен содержать столбцы "datetime", "forecast" и "Номер скважины". Предсказания модели должны быть сформированы для периода c "1992-04-11" по "1992-07-09" – всего 90 дней. Пример генерации файла с ответом в базовом решении в файле "fedot_based_solution.py".
1.3. Описание обозначений
ТМ – телеметрия
Нд – динамический уровень в скважине
Рпр – давление начала приемистости
ЭЦН – наиболее широко распространенный в России аппарат механизированной добычи нефти (ESP – electric submersible pump – погружной насос)
1.4. Комментарии и оценка решений
Решение задачи должно давать на выходе файл, содержащий прогноз для всех 106 скважин в train-выборке на 90 дней вперед.
Ошибка прогноза будет оцениваться на отложенной выборке, равной одному горизонту прогнозирования (90 дней). Для оценки и ранжирования предлагаемых участниками моделей будет использоваться показатель RMSE (Root Mean Square Error: https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html)
Финальная метрика получается усреднением метрик, полученных по всем скважинам, как показано в функции ниже.


import os
import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error
from tqdm import tqdm
def calculate_final_score(path_to_forecast: str, path_to_test_file: str):
    df_with_metrics = pd.read_csv(path_to_forecast, parse_dates=['datetime'])
    test_df = pd.read_csv(path_to_test_file, parse_dates=['datetime'])
    wells = list(df_with_metrics["Номер скважины"].unique())
    metrics = []
    with tqdm(total=len(wells)) as pbar:
        for well in wells:
            well_forecast_df = df_with_metrics[df_with_metrics["Номер скважины"] == well]
            well_forecast_df = well_forecast_df.sort_values(by='datetime')
            well_actual_df = test_df[test_df["Номер скважины"] == well]
            well_actual_df = well_actual_df.sort_values(by='datetime')
            rmse_metric = mean_squared_error(np.array(well_actual_df['Дебит нефти']),
                                             np.array(well_forecast_df['forecast']),
                                             squared=False)
            metrics.append(rmse_metric)
    metrics = np.array(metrics)
    return np.mean(metrics)
1.5. Идея решения
Базовое AutoML-решение, основанное на использовании фреймворка FEDOT, представлено в файле "fedot_based_solution.py". В этом решении для обучения модели и построения прогноза используются только предшествующие значения целевой переменной.

Для решения задачи возможно использование любых моделей и подходов к прогнозированию временных рядов, в том числе алгоритмов AutoML, классических моделей МО, нейронных сетей. Участники могут использовать различные методы заполнения пропусков в данных либо не учитывать параметры, содержащие пропуски. Допускается построение моделей на основе любых наборов доступных в файле "train.csv" параметров.

Доступные в train-выборке данные не позволяют напрямую определить этап жизненного цикла скважины, однако на основе координат расположения скважин и укрупненных показателей их работы можно объединить схожие скважины в кластеры.

Размер скользящего окна для обучения модели и получения прогнозов может быть выбран участниками самостоятельно и включать от нескольких дней, непосредственно предшествующих прогнозному периоду, до 620 дней (гарантированная протяженность временных рядов, доступная по всем скважинам в выборке).
На практике характерные паттерны изменений ключевых показателей при дефектах скважин проявляются на горизонте в 15-20 дней, в то время как для оценки общего тренда дебита нефти необходимо использовать более длительные интервалы доступных данных.
Контакты с организатором хакатона
Ссылка на Telegram для информации и вопросов:
https://t.me/+CTm-G-HSR5dkMWUy

Здесь будем выкладывать данные, отвечать на вопросы.
Организации-партнеры хакатона
Место проведения
Московский физико-технический институт, Главный корпус, Красный читальный зал