Разработка алгоритма автоматической кластеризации скважин по форме кривых ГИС в пределах целевого пласта. Кластеризация каротажных кривых по форме записи.
- Алина Бондарева
- Александра Хван
- Роман Новиков
- Дарья Павлова
Проблема: Необходимость в создании алгоритма автоматической кластеризации скважин на группы на основе схожести кривых ГИС в пределах целевого пласта и разбивать каротажную кривую на классы по форме записи.
- Las-файлы
- файл отбивок пластов
- таблицы с классами скважин для обучения (Facies.xlsx & Log9.xlsx)
В ходе работы была произведена валидация входных данных, а именно:
В файле validation.ipynb:
- Вывели информацию о las-файлах включающих в себя 2 категории continuous и discrete путём создания функции
read_and_classify_las_files
. - Функция
read_excel_for_intervals
позволяет читать excel-файл (файл “Отбивки пласта АС11-2.xlsx”), организовывая данные о глубинах начала и конца определенных пластов для каждой скважины в структурированной форме и использовать для дальнейшего анализа каротажных кривых. - Визуализировали кривые ГИС-скважин используя функцию
plot_las_data1
и выбирая скважины для анализа, проверяя наличие данных, а затем строит графики по интересующим интервалам. Другая функцияplot_las_data2
предназначена для визуализации данных из las-файлов для нескольких скважин, позволяя пользователю выбрать, какие скважины анализировать, и выводя соответствующие графики вместе. - Функция
save_intervals_to_csv
служит для сохранения данных из las-файлов по определённым интервалам отбивок из excel-файла для каждой скважины в формате CSV. - Проверили наличие колонок GGKP и NEU, которые важны для дальнейшей работы. Обнаружили отсутствие колонки NEU в файлах
18.csv
,19.csv
,44.csv
,47.csv
,48.csv
. - Создали единый файл
combined.csv
, в котором объединены все csv-файлы для каждой скважины в целях удобства для дальнейшей работы.
В файле task1.ipynb
произвели кластеризацию скважин по набору кривых ГИС в пределах целевого пласта, что позволит автоматизировать разбивку каротажных кривых на литологические группы:
- В качестве датасета использовали
combined.csv
собранный ранее. - Произвели предподготовку данных, включающую в себя проверку пропущенных значений, определили скважины (под номерами 18,19,44,47,48), в которых отсутствовала колонка ‘NEU’.
- На основе пожеланий заказчика последующая работа была совершена с использованием колонки GGKP, что также обосновано отсутствие в ряде скважин колонки NEU, что приводит к исключению данных файлов в процессе кластеризации, что может влиять на точность результатов.
- Была произведена нормализация признаков с помощью
StandardScaler
. - Для реализации ансамбля моделей необходимо реализовать выбранные для этой цели алгоритмы с использованием колонок глубины (DEPT) и параметру GGKP.
- В начале применили алгоритм кластеризации - стандартный Kmeans. Оптимальное количество кластеров определяли путём методов “локтя” и “силуэта”. Количество кластеров определилось равное 3 или 4. Для n_clusters = 4, средний silhouette_score равен: 0.558347157030926(наиболее близкий к 1).
- Визуализировали полученные кластеры.
- Далее использовали модели GMM (Gaussin Mixture Model) и Иерархической кластеризации (Agglomerative clustering) с учетом того, что количество ранее предсказанных кластеров равно 4.
- В дальнейшем был создан ансамбль из данных моделей по типу стекинга. Голосование по большинству является одним из самых эффективных и популярных алгоритмов ансамблирования. Выбор на трех моделях основан на реализации большей объективности голосования, что способно повысить качество кластеризации.
Результаты работы ансамбля:
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 build . -t ruugi/gp
docker push ruugi/gp
docker run -d -p 8501:8501 --name gp_name gp