---
# System prepended metadata

title: Руководство администратора системы предиктивной аналитики

---

# Руководство администратора системы предиктивной аналитики

## Определения и сокращения
* БД - база данных
* ВСП - внутрисменные простои
* ГТМ - геолого-технологические мероприятия
* МВ - модель выживаемости
* ПО - программное обеспечение
* СПА - система предиктивной аналитики
* СУБД - система управления базами данных
* ЭЦН - электроцентробежный насос
* API - application programming interface (интерфейс прикладного программиста)
* AFT - accelerated failure time model (модель ускоренного времени отказа)


## Назначение и общее описание системы
Система предиктивной аналитики (СПА) предназначена для прогнозирования остановок и отказов скважинного оборудования (в частности, ЭЦН), а также для выявления аномалий в его работе с целью предотвращения остановок и отказов. Прогнозирование осуществляется на основе специализированных математических и статистических методов, применяемых к данным о работе оборудования и других параметров, характеризующих работу скважин за длительный период времени. Разделяют фазы (этапы) обучения моделей и прогнозирования (инференса) на основе обученных моделей. На этапе обучения моделям предъявляется большой объём данных за длительный период времени, содержащий информацию о произошедших искомых событиях (остановках и отказах). На этапе прогнозирования модель принимает на вход новую информацию о работе скважинного оборудования и выдаёт оценку риска наступления искомых событий (остановок и отказов). Как правило, исходные "сырые" данные до использования в процессе обучения моделей требуют предварительной обработки (препроцессинга). Для повышения качества прогнозирования используется технология генерации новых признаков (дополнительных переменных, extra variables) - feature engineering. 
Для повышения качества прогнозирования в данной СПА был обучен комплекс моделей, имеющих различные гипер-параметры (горизонт планирования).   

## Хранение исходного кода модулей СПА
Для хранения исходного кода программных скриптов всех подсистем СПА был создан объединённый репозиторий с помощью системы контроля версий git. Создан закрытый репозиторий в сервисе GitHub, его адрес - https://github.com/Piligrim2121/predictive-analytics-system. Для доступа к репозиторию требуется приглашение от его администратора. 

## Структура системы
СПА построена по модульному принципу и включает 4 подсистемы:
* подсистема предварительной обработки исходных "сырых" данных и генерации дополнительных признаков (переменных). Включает несколько модулей (скриптов) на языке Python. 
* подсистема расчёта прогноза. Включает один скрипт на языке R.
* подсистема интеграции с внешними системами - API для передачи результатов прогнозирования, например, в АРМ технолога. Включает набор скриптов на языке Python. Для реализации REST API используется микро-фреймворк Flask.
* служебная подсистема для настройки, автоматического запуска модулей и системного журналирования. Включает несколько скриптов на языке Python.


### Структура БД системы
В качестве СУБД используется Microsoft SQL Server 2019.
Структура таблиц и взаимосвязей между ними показана на диаграмме:
![](https://i.imgur.com/htvpFn0.png)
Ссылка на исходное изображение - https://drive.google.com/file/d/1-hiHbW98Hb5kyMXep4cQS9Mk-9VMPWWt/view?usp=share_link
Перечень таблиц и описание их назначения приведены в списке ниже:
* Model - справочник моделей, хранит название модели, горизонт прогнозирования (в днях), метрики качества прогнозирования (f1, accuracy), рассчитанные при последнем обучении
* ModelData - данные для моделей по аномалиям
* HistoryBestModel - перечень моделей, показавших наилучшее качество прогнозирования (для различных причин остановок и отказов)
* Prediction - результаты прогнозирования за каждые сутки, полученные различными моделями
* PredictType - тип прогнозируемого события (отказ, остановка, аномалия)
* Reason - справочник причин остановок и отказов (с указанием типа прогнозируемого события)
* Scale - данные по шкалам (пороговые значения зелёной, жёлтой и красной зон) для каждой модели
* ParameterModelCoef - коэффициенты параметров для различных моделей с указанием условий применения
* Parameter - перечень параметров, их описание и теги
* ParameterType - тип параметра (телеметрия, ВСП, доп.переменные, погода)
* ParameterAVGData - предобработанные значения параметров с указанием кода скважины и даты расчёта
* Well - перечень скважин с указанием их кодов в различных системах (АСОДУ, АРМтех и др.) 
* Weather - погодные данные, полученные с сервиса ГисМетео (температура, давление, точка росы)
* SchedulerSettings - настройки планировщика заданий (название, описание, команда для выполнения, время запуска (часы, минуты), флаг активности)
* SystemLog - системный журнал (дата и время, уровень логгирования, тип события, имя скрипта, сообщение)
* VSP - данные о внутрисменных простоях 
* GTM - данные о проведённых геолого-технологических мероприятиях (ГТМ)
* Outliners - граничные значения для удаления выбросов по различным параметрам 
* ENC - данные о замене ЭЦН 
* SKV - данные по датам ввода скважин в эксплуатаию 

### Перечень зависимостей модулей
Для запуска модулей СПА, написанных на яызке Python необходимо установить интерпретатор Python версии 3.10 и следующие пакеты (с указанием версий):
* Flask	2.2.2	
* Flask-Cors	3.0.10	
* Flask-Migrate	3.1.0	
* Flask-RESTful	0.3.9	
* Flask-SQLAlchemy	2.5.1	
* Jinja2	3.1.2	
* Mako	1.2.3	
* MarkupSafe	2.1.1	
* SQLAlchemy	1.4.41	
* Werkzeug	2.2.2	
* alembic	1.8.1	
* aniso8601	9.0.1	
* certifi	2022.9.24	
* charset-normalizer	2.1.1	
* click	8.1.3	
* colorama	0.4.5	
* et-xmlfile	1.1.0	
* greenlet	1.1.3	
* idna	3.4	
* itsdangerous	2.1.2	
* numpy	1.23.3	
* openpyxl	3.0.10	
* pandas	1.5.0	
* pip	22.2.2	
* psycopg	3.1.2	
* psycopg2	2.9.3	
* pyodbc	4.0.34	
* python-dateutil	2.8.2	
* pytz	2022.2.1	
* requests	2.28.1	
* setuptools	63.2.0	
* six	1.16.0	
* tqdm	4.64.1	
* typing-extensions	4.3.0	
* tzdata	2022.4	
* urllib3	1.26.12	

Для запуска скриптов прогнозирования на языке R необходимо установить интерпретатор R версии 4.2.1 и следующий набор пакетов:
* reticulate
* rjson
* lubridate
* tidyverse
* survival
* RODBC
* DBI
* odbc
* reshape2
* zoo


### Подсистема предобработки
Программные модули (скрипты), осуществляющие предобработку исходных данных, расположены в подкаталоге data_preprocessing корневой папки СПА (https://github.com/Piligrim2121/predictive-analytics-system/tree/master/data_preprocessing). "Точкой входа" в подсистему является скрипт main.py

#### Список скриптов
* main.py - стартовый скрипт предобработки, запускает другие скрипты
* get_target_7.py - формирует датафрейм с целевой переменной, который используется для формирования датафреймов для других скриптов
* get_model_target.py - обработка данных ВСП
* get_tm_daily_3.py - обработка данных телеметрии
* get_extra_vars.py - генерация доп.переменных
* DB.py - утилитарные функции для работы с БД

### Подсистема прогнозирования
Скрипт расчёта прогнозов, а также файлы сохранённых обученных моделей расположены в папке prediction (https://github.com/Piligrim2121/predictive-analytics-system/tree/master/prediction)

#### Список скриптов
* Models - папка с файлами сохранённых моделей в формате RDS
* Predictor.R - загрузка моделей, выполнение прогнозирования, сохранение результатов в БД

#### Перечень моделей


| № | Тип модели | Тип события | Причина | Имя файла | Горизонт планирования | Описание | F1 | Accuracy |
| - | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
| 1 | МВ Кокса | Отказ | 7 | failure_main_model_10_days.rds | 10 дней | Прогноз наступления события отказа в течение 10 дней | 0,148 | 0,776 |
| 2 | МВ Кокса | Отказ | 7 | failure_main_model_20_days.rds | 10 дней | Прогноз наступления события отказа в течение 20 дней | 0,361 | 0,845 |
| 3 | МВ Кокса | Отказ | 7 | failure_main_model_30_days.rds | 10 дней | Прогноз наступления события отказа в течение 30 дней | 0,505 | 0,788 |
| 4 | МВ Кокса | Отказ | 7 | failure_main_model_60_days.rds | 10 дней | Прогноз наступления события отказа в течение 60 дней | 0,483 | 0,854 |
| 5 | МВ Кокса | Отказ | 7 | background_model_BakerHughes.rds | 30 дней | В модели используются скважины, у которых установлен ЭЦН - Baker Hughes.<br/> В переменной ecn_manufact отфильтровать по значению 'Baker Hughes' | 0,355 | 0,882 |
| 6 | МВ Кокса | Остановка | 6 | VSP_ZSP_model_10_days.rds | 10 дней | Произойдет остановка по причине 'защита от срыва подачи' в течение наблюдаемого периода | 0,045 | 0,876 |
| 7 | МВ Кокса | Остановка | 6 | VSP_ZSP_model_20_days.rds | 20 дней | Произойдет остановка по причине 'защита от срыва подачи' в течение наблюдаемого периода | 0,081 | 0,821 |
| 8 | МВ Кокса | Остановка | 6 | VSP_ZSP_model_30_days.rds | 30 дней | Произойдет остановка по причине 'защита от срыва подачи' в течение наблюдаемого периода | 0,107 | 0,830 |
| 9 | МВ Кокса | Остановка | 5 | VSP_ZP_model_10_days.rds | 10 дней | Произойдет остановка по причине 'защита от перегруза' в течение наблюдаемого периода | 0,147 | 0,889 |
| 10 | МВ Кокса | Остановка | 5 | VSP_ZP_model_20_days.rds | 20 дней | Произойдет остановка по причине 'защита от перегруза' в течение наблюдаемого периода | 0,154 | 0,828 |
| 11 | МВ Кокса | Остановка | 5 | VSP_ZP_model_30_days.rds | 30 дней | Произойдет остановка по причине 'защита от перегруза' в течение наблюдаемого периода | 0,120 | 0,728 |
| 12 | МВ Кокса | Остановка | 8 | VSP_main_model_10_days.rds | 10 дней | Произойдет остановка по какой-либо целевой причине в течение наблюдаемого периода | 0,126 | 0,581 |
| 13 | МВ Кокса | Остановка | 8 | VSP_main_model_20_days.rds | 20 дней | Произойдет остановка по какой-либо целевой причине в течение наблюдаемого периода | 0,145 | 0,579 |
| 14 | МВ Кокса | Остановка | 8 | VSP_main_model_30_days.rds | 30 дней | Произойдет остановка по какой-либо целевой причине в течение наблюдаемого периода | 0,483 | 0,854 |
| 15 | МВ Кокса | Остановка | 4 | VSP_snizhenie_izolyacii.rds | 30 дней | Произойдет остановка по причине 'снижение изоляции' в течение наблюдаемого периода | 0,380 | 0,800 |
| 16 | МВ AFT Экспоненциальная | Отказ | нет | background_AFT_model_exp_30_days.rds | 30 дней | Произойдет отказ в течение наблюдаемого периода | 0,448 | 0,786 |
| 17 | МВ AFT Вейбулла | Отказ | нет | background_AFT_model_wei_30_day.rds | 30 дней | Произойдет отказ в течение наблюдаемого периода | 0,482 | 0,787 |
| 18 | МВ AFT Логнормальная | Отказ | нет | background_AFT_model_nor_30_days.rds | 30 дней | Произойдет отказ в течение наблюдаемого периода | 0,454 | 0,726 |
| 19 | МВ AFT Логлогистическая | Отказ | нет | background_AFT_model_log_30_days.rds | 30 дней | Произойдет отказ в течение наблюдаемого периода | 0,489 | 0,787 |
| 20 | МВ AFT Экспоненциальная | Отказ | нет | background_AFT_model_exp_60_days.rds | 60 дней | Произойдет отказ в течение наблюдаемого периода | 0,456 | 0,835 |
| 21 | МВ AFT Вейбулла | Отказ | нет | background_AFT_model_wei_60_days.rds | 60 дней | Произойдет отказ в течение наблюдаемого периода | 0,448 | 0,786 |
| 22 | МВ AFT Логнормальная | Отказ | нет | background_AFT_model_nor_60_days.rds | 60 дней | Произойдет отказ в течение наблюдаемого периода | 0,470 | 0,859 |
| 23 | МВ AFT Логлогистическая | Отказ | нет | background_AFT_model_log_60_days.rds | 60 дней | Произойдет отказ в течение наблюдаемого периода | 0,398 | 0,749 |
| 24 | Лог. Регрессия | Отказ | нет | failure_reason_model_r0.rds | нет | Модель определяет причину отказа на скважине (R-0 или неR-0) | 0,398 | 0,749 |



### Подсистема интеграции (API)
Скрипт расчёта прогнозов, а также файлы сохранённых обученных моделей расположены в папке apiflask (https://github.com/Piligrim2121/predictive-analytics-system/tree/master/apiflask)

#### Список скриптов
* api_guide.py - JSON с описанием запросов API и их параметров
* app.py - контроллеры обработки запросов API
* models.py - классы моделей для работы с БД системы
* routing_bd.txt - настройки соединения с БД

### Служебная подсистема
Скрипты, выполняющие служебные функции, расположены в каталоге services проекта СПА (путь в репозитории - https://github.com/Piligrim2121/predictive-analytics-system/tree/master/services).

#### Список скриптов и файлов
* config.json - конфигурационный файл, содержащий настройки подключения к БД, а также путь к исполняемому файлу интерпретатора Python
* StartSystem.py - скрипт для запуска планировщика заданий
* startsystem.bat - пакетный файл ОС Windows для запуска скрипта планировщика

## Интерпретация результатов прогнозирования
В результате прогнозирования остановок и отказов с помощью соответствующих моделей формируется вещественное число, характеризующее степень риска возникновения остановки или отказа. 
Для корректной интерпретации полученного значения необходимо произвести ряд операций:
1. умножить вещественное значение, полученное на выходе модели на коэффициент масштабирования, соответствующий данной модели
2. если полученное значение превышает максимальное для данное модели, то берётся максимальное значение
3. полученное значение сравнивается с границами зон (красной, жёлтой): 
    * если полученное значение лежит в диапазоне от минимального до границы жёлтой зоны, то оно находится в зелёной зоне - риск отказа/остановки минимальный, никаких действий предпринимать не надо.
    * если полученное значение лежит в диапазоне от границы жёлтой зоны до границы красной зоны, то оно находится в жёлтой зоне - существует вероятность отказа оборудования, требуется продолжить наблюдение, дополнительно проверить показатели систем.
    * если полученное значение лежит в диапазоне от границы красной зоны до максммального значений, то оно находится в красной зоне - высокий  риск отказа, необходимо срочно предпринять действия по устранению причин возможного отказа.

### Таблица шкал для различных моделей
| № | № модели | Мин.значение | Макс.значение | Коэф.масштабирования | Граница жёлтой зоны | Граница красной зоны | 
| - | -------- | -------- | -------- | -------- | -------- | -------- |
| 1 | 1 | 	0 | 125 | 0,4 | 	30 | 	40 |
| 2 | 2 | 	0 | 250 | 0,2 | 	30 | 	40 |
| 3 | 3 | 	0 | 250 | 0,2 | 	30 | 	40 |
| 4 | 4 | 	0 | 250 | 0,2 | 	26 | 	30 |
| 5 | 12 | 	0 | 20 | 2,5 | 	20 |	30 | 
| 6 | 13 | 	0 | 20 | 2,5 | 	20 |	30 | 
| 7 | 14 | 	0 | 20 | 	2,5 | 	20 | 	30 |
| 8 | 6 | 	0 | 25 | 	2 | 	NULL | 	30 |
| 9 | 7 | 	0 | 25 | 	2 | 	NULL | 	30 |
| 10 | 8 | 	0 | 25 | 	2 | 	NULL | 	30 |
| 11 | 9 | 	0 | 25 | 	2 | 	NULL | 	30 |
| 12 | 10 | 0 | 25 | 	2 | 	NULL | 	30 |
| 13 | 11 | 0 | 25 | 	2 | 	NULL | 	30 |
| 14 | 15 | 0 | 25 | 	2 | 	NULL | 	40 |

### Пример интерпретации результатов
Например, модель № 1 (Прогноз наступления события отказа в течение 10 дней) выдала значение 2,87. Необходимо умножить его на соответствующий коэффициент масштабирования: 2,87\*0,4 = 1,148. Далее необходимо определить в границах какой зоны находится это значение. В данном случае оно лежит между минимальным значением и границой жёлтой зоны. Таким образом, оно находится в зелёной зоне - риск отказа минимальный, никаких действий предпринимать не надо.

Предположим, что та же модель № 1 для другой скважины выдала значение 81,3. После умножения на коэффициент масштабирования (0,4) получаем значение 32,52 - оно находится в диапазоне от границы жёлтой зоны до границы красной. Таким образом, оно находится в жёлтой зоне - существует вероятность отказа оборудования, требуется продолжить наблюдение, дополнительно проверить показатели систем.