Hakaton_Gazprom

Разработка алгоритма автоматической кластеризации скважин по форме кривых ГИС в пределах целевого пласта. Кластеризация каротажных кривых по форме записи.


Команда №1 "Mice"

Состав команды:

  • Алина Бондарева
  • Александра Хван
  • Роман Новиков
  • Дарья Павлова

Проблема: Необходимость в создании алгоритма автоматической кластеризации скважин на группы на основе схожести кривых ГИС в пределах целевого пласта и разбивать каротажную кривую на классы по форме записи.

Данные для работы:

  • Las-файлы
  • файл отбивок пластов
  • таблицы с классами скважин для обучения (Facies.xlsx & Log9.xlsx)

В ходе работы была произведена валидация входных данных, а именно:

В файле validation.ipynb:

  1. Вывели информацию о las-файлах включающих в себя 2 категории continuous и discrete путём создания функции read_and_classify_las_files.
  2. Функция read_excel_for_intervals позволяет читать excel-файл (файл “Отбивки пласта АС11-2.xlsx”), организовывая данные о глубинах начала и конца определенных пластов для каждой скважины в структурированной форме и использовать для дальнейшего анализа каротажных кривых.
  3. Визуализировали кривые ГИС-скважин используя функцию plot_las_data1 и выбирая скважины для анализа, проверяя наличие данных, а затем строит графики по интересующим интервалам. Другая функция plot_las_data2 предназначена для визуализации данных из las-файлов для нескольких скважин, позволяя пользователю выбрать, какие скважины анализировать, и выводя соответствующие графики вместе.
  4. Функция save_intervals_to_csv служит для сохранения данных из las-файлов по определённым интервалам отбивок из excel-файла для каждой скважины в формате CSV.
  5. Проверили наличие колонок GGKP и NEU, которые важны для дальнейшей работы. Обнаружили отсутствие колонки NEU в файлах 18.csv, 19.csv, 44.csv, 47.csv, 48.csv.
  6. Создали единый файл combined.csv, в котором объединены все csv-файлы для каждой скважины в целях удобства для дальнейшей работы.

В файле task1.ipynb произвели кластеризацию скважин по набору кривых ГИС в пределах целевого пласта, что позволит автоматизировать разбивку каротажных кривых на литологические группы:

  1. В качестве датасета использовали combined.csv собранный ранее.
  2. Произвели предподготовку данных, включающую в себя проверку пропущенных значений, определили скважины (под номерами 18,19,44,47,48), в которых отсутствовала колонка ‘NEU’.
  3. На основе пожеланий заказчика последующая работа была совершена с использованием колонки GGKP, что также обосновано отсутствие в ряде скважин колонки NEU, что приводит к исключению данных файлов в процессе кластеризации, что может влиять на точность результатов.
  4. Была произведена нормализация признаков с помощью StandardScaler.
  5. Для реализации ансамбля моделей необходимо реализовать выбранные для этой цели алгоритмы с использованием колонок глубины (DEPT) и параметру GGKP.
  6. В начале применили алгоритм кластеризации - стандартный Kmeans. Оптимальное количество кластеров определяли путём методов “локтя” и “силуэта”. Количество кластеров определилось равное 3 или 4. Для n_clusters = 4, средний silhouette_score равен: 0.558347157030926(наиболее близкий к 1).
  7. Визуализировали полученные кластеры.
  8. Далее использовали модели GMM (Gaussin Mixture Model) и Иерархической кластеризации (Agglomerative clustering) с учетом того, что количество ранее предсказанных кластеров равно 4.
  9. В дальнейшем был создан ансамбль из данных моделей по типу стекинга. Голосование по большинству является одним из самых эффективных и популярных алгоритмов ансамблирования. Выбор на трех моделях основан на реализации большей объективности голосования, что способно повысить качество кластеризации.

Результаты работы ансамбля:

WELL GGKP Cluster_kmean_scaled Cluster_gmm Cluster_agg Cluster_result
12 2.420357 2 2 2 2
13 2.432627 1 1 1 1
14 2.393182 2 2 2 2
15 2.418803 2 2 2 2
16 2.387105 2 2 2 2
17 2.342452 4 4 3 4
18 2.399818 2 2 2 2
19 2.403706 2 2 2 2
20 2.413209 2 2 2 2
22 2.392946 2 2 2 2
23 2.477078 3 1 1 1
24 2.416104 2 2 2 2
25 2.393571 2 2 2 2
26 2.409667 2 2 2 2
27 2.478201 3 1 1 1
28 2.446654 1 1 1 1
29 2.461707 1 1 1 1
30 2.441466 1 1 1 1
31 2.489919 3 1 1 1
33 2.464361 1 1 1 1
34 2.466277 1 1 1 1
35 2.436791 1 1 1 1
36 2.555820 3 3 4 3
37 2.458108 1 1 1 1
38 2.421338 2 2 2 2
39 2.405447 2 2 2 2
40 2.420511 2 2 2 2
41 2.398696 2 2 2 2
42 2.409115 2 2 2 2
43 2.352086 4 4 3 4
44 2.404773 2 2 2 2
45 2.357386 4 4 3 4
46 2.410000 2 2 2 2
47 2.449082 1 1 1 1
48 2.363108 4 4 3 4
K-10 2.462288 1 1 1 1
K-101 2.428131 1 2 1 1
K-24042 2.430735 1 2 1 1
K-37 2.407181 2 2 2 2
K-44 2.490833 3 1 1 1
K-66 2.476357 3 1 1 1

Работа с docker

Cобрать образ:

docker build . -t ruugi/gp

Отправить

docker push ruugi/gp

Запустить

docker run -d -p 8501:8501 --name gp_name gp