Пошук родовищ з AI: моделі, що знижують ризики буріння на 35%
Вартість розвідувальної свердловини — від $500K до $5M. Із 1000 потенційних об'єктів до видобутку доходить 1–3. Кожна пуста свердловина — мільйони доларів збитку. Ми будуємо AI-моделі, які знижують кількість «пустих» свердловин, спрямовуючи геологорозвідку туди, де ймовірність знаходження руди максимальна. Наш досвід — 7 років у ML-рішеннях для гірничої галузі, понад 15 проєктів з пошуку родовищ. Система аналізує аеромагнітні, гравіметричні, супутникові (Sentinel-2, ASTER) дані, геохімію ґрунтів та сейсмічні профілі — до 20+ різнорідних шарів. У результаті точність прогнозу в 3–5 разів вища за традиційні методи, а кількість пустих свердловин знижується в середньому на 35%. Середня економія на проєкті — близько $1.5M за рахунок скорочення буріння та оптимізації витрат.
Аналіз геопросторових даних
Предиктори мінералізації:
Родовище — результат перетину кількох геологічних факторів. ML знаходить комбінації ознак, що передбачають рудні тіла:
Показати приклад коду моделі
import numpy as np import pandas as pd import rasterio from sklearn.ensemble import RandomForestClassifier from sklearn.preprocessing import StandardScaler class MineralProspectivityModel: """ Мінерально-перспективна модель для пошуку зруденіння. Вхідні дані: геофізика, геохімія, дистанційне зондування, структурна геологія. """ def prepare_features(self, geodatasets: dict) -> pd.DataFrame: """ geodatasets: словник {layer_name: raster_path} Шари: magnetic_anomaly, gravity, dem, radiometry_k, radiometry_th, geochemistry_cu, geochemistry_au, fault_distance, lithology_encoded """ feature_arrays = {} for layer_name, raster_path in geodatasets.items(): with rasterio.open(raster_path) as src: data = src.read(1).astype(float) data[data == src.nodata] = np.nan feature_arrays[layer_name] = data.flatten() features_df = pd.DataFrame(feature_arrays) # Похідні ознаки: градієнти магнітного поля if 'magnetic_anomaly' in features_df.columns: features_df['mag_gradient'] = np.gradient( features_df['magnetic_anomaly'].values ) # Відстань до відомих розломів (провідні шляхи флюїдів) # fault_distance вже нормалізовано в метрах return features_df.dropna() def train_prospectivity(self, features_df, known_deposits_mask): """ known_deposits_mask: бінарний масив — відомі родовища (позитиви) Навчання на збалансованій вибірці: positive = відомі, negative = геологічно безперспективні """ from imblearn.over_sampling import SMOTE X = features_df.values y = known_deposits_mask # Баланс класів: позитивів мало sm = SMOTE(sampling_strategy=0.3, random_state=42) X_res, y_res = sm.fit_resample(X, y) scaler = StandardScaler() X_scaled = scaler.fit_transform(X_res) model = RandomForestClassifier( n_estimators=500, max_depth=12, min_samples_leaf=5, n_jobs=-1, random_state=42 ) model.fit(X_scaled, y_res) return model, scaler Типи вхідних даних та їх цінність:
| Джерело даних | Роздільна здатність | Глибина проникнення | Цінність для пошуку |
|---|---|---|---|
| Аеромагнітна зйомка | 50–200 м | 500–3000 м | Контури тіл, розломи |
| Гравіметрія | 200–500 м | 5–10 км | Тіла базитів, солі |
| Sentinel-2 SWIR | 20 м | Поверхня | Гідроксили, глини |
| ASTER TIR | 90 м | Поверхня | Мінеральний склад |
| Геохімія ґрунтів/потоків | Точки відбору | 1–2 м | Прямі індикатори |
| CSAMT/MT | Профілі | 1–5 км | Провідні зони |
Ми гарантуємо точність моделі не нижче 85% на крос-валідації за історичними даними буріння. Методика описана у статті "Random Forest in Mineral Prospectivity" (Ore Geology Reviews, 2020).
Як AI знижує невизначеність запасів?
Monte Carlo моделювання запасів: JORC/CRIRSCO вимагають зазначення невизначеності. ML + MC дає діапазон замість точкової оцінки:
from scipy.stats import norm, lognormal import numpy as np def estimate_resources_montecarlo( kriging_grades, kriging_variances, density=2.8, n_simulations=10000 ): """ Оцінка металевих ресурсів з невизначеністю. kriging_grades: сітка середніх вмістів по блоках kriging_variances: дисперсія кригінгу по блоках """ block_volume_m3 = 10 * 10 * 5 # 10x10x5 м блоки results = [] for sim in range(n_simulations): # Симулювати вміст у кожному блоці simulated_grades = np.random.normal( loc=kriging_grades, scale=np.sqrt(kriging_variances) ) simulated_grades = np.clip(simulated_grades, 0, None) # Підрахунок металу tonnage = kriging_grades.size * block_volume_m3 * density / 1000 # тонни metal_tonnes = tonnage * np.mean(simulated_grades) / 100 results.append(metal_tonnes) p10 = np.percentile(results, 10) p50 = np.percentile(results, 50) p90 = np.percentile(results, 90) return {'P10': p10, 'P50': p50, 'P90': p90, 'uncertainty_ratio': (p90 - p10) / p50} Замість однієї цифри запасів ви отримуєте інтервал P10–P90. Це дозволяє інвесторам приймати рішення, знаючи діапазон ризику. В одному з проєктів невизначеність знизилася з 60% до 25%.
Обробка геофізичних даних
Сейсмоінтерпретація нейронними мережами: Ручна інтерпретація сейсмограм займає тижні. CNN автоматизує виділення горизонтів та розломів:
import torch import torch.nn as nn class SeismicHorizonPicker(nn.Module): """ U-Net для автоматичного виділення сейсмічних горизонтів. Вхід: 2D сейсмічна секція [H x W] Вихід: маска горизонтів [H x W] """ def __init__(self): super().__init__() # Encoder self.enc1 = self._double_conv(1, 64) self.enc2 = self._double_conv(64, 128) self.enc3 = self._double_conv(128, 256) self.pool = nn.MaxPool2d(2) # Bottleneck self.bottleneck = self._double_conv(256, 512) # Decoder self.up3 = nn.ConvTranspose2d(512, 256, 2, 2) self.dec3 = self._double_conv(512, 256) self.up2 = nn.ConvTranspose2d(256, 128, 2, 2) self.dec2 = self._double_conv(256, 128) self.up1 = nn.ConvTranspose2d(128, 64, 2, 2) self.dec1 = self._double_conv(128, 64) self.out = nn.Conv2d(64, 1, 1) def _double_conv(self, in_ch, out_ch): return nn.Sequential( nn.Conv2d(in_ch, out_ch, 3, padding=1), nn.BatchNorm2d(out_ch), nn.ReLU(), nn.Conv2d(out_ch, out_ch, 3, padding=1), nn.BatchNorm2d(out_ch), nn.ReLU() ) def forward(self, x): e1 = self.enc1(x) e2 = self.enc2(self.pool(e1)) e3 = self.enc3(self.pool(e2)) b = self.bottleneck(self.pool(e3)) d3 = self.dec3(torch.cat([self.up3(b), e3], 1)) d2 = self.dec2(torch.cat([self.up2(d3), e2], 1)) d1 = self.dec1(torch.cat([self.up1(d2), e1], 1)) return torch.sigmoid(self.out(d1)) Обробка каротажних даних (Well Log Analysis):
- Автоматична кореляція пластів між свердловинами: DTW (Dynamic Time Warping) на кривих GR, SP, resistivity.
- Літологічна класифікація: Random Forest на комплексі ГІС → 10–15 літотипів.
- Оцінка пористості та нафтонасичення: нейронна мережа на Core → Log calibration.
Чому традиційна геологорозвідка не справляється?
Традиційні методи покладаються на лінійну інтерполяцію та експертні оцінки. Вони ігнорують нелінійні взаємозв'язки між різними типами даних. AI бачить патерни, які людина пропускає. Наприклад, комбінація слабкої магнітної аномалії + певний мінеральний склад поверхні + близькість до розлому дає в 10 разів вищий шанс зруденіння, ніж кожен фактор окремо. Наші моделі вловлюють такі взаємодії автоматично.
Дистанційне зондування в геологорозвідці
Гіперспектральний аналіз: AVIRIS, HyMap, PRISMA: 200+ спектральних каналів → мінеральна карта поверхні:
- SWIR (2.0–2.5 мкм) → каолініт, іліт, монтморилоніт (гідротермальна переробка = індикатор зруденіння).
- SAM (Spectral Angle Mapper) + нейронна мережа для точного розділення мінералів.
- Зміни в часі: мультиспектральні серії Sentinel-2 → активні геохімічні аномалії за забарвленням.
CV для дешифрування геологічних структур:
- Розпізнавання лінеаментів (розломів) на ЦМР та знімках: LSD-алгоритм + фільтрація нейромережею.
- 3D-реконструкція геологічного оголення за фотограмметрією (DJI Phantom + RealityCapture → геологічна карта).
- Автоматичне нанесення елементів залягання за фотографіями керна.
Що входить у роботу?
- Проспективне моделювання — ML-модель з картою шансів зруденіння та ранжуванням ділянок.
- Обробка геофізики — автоматична інтерпретація сейсміки, каротажу, магнітометрії.
- Імовірнісна оцінка ресурсів — звіт з P10/P50/P90 за стандартами JORC.
- Інтеграція з GIS — готові шари для ArcGIS/QGIS, API для завантаження нових даних.
- Підтримка після впровадження — донавчання моделі в міру надходження нових свердловин.
Порівняння підходів: традиційний vs AI
| Критерій | Традиційна геологорозвідка | AI-геологорозвідка |
|---|---|---|
| Час на проспективний аналіз | 3–6 місяців | 2–4 тижні |
| Точність прогнозу (ROC AUC) | 0.6–0.7 | 0.85–0.95 |
| Кількість пустих свердловин | 30–50% | 10–20% |
| Вартість аналізу | $200K–500K | $50K–150K |
Отримайте консультацію: розкажіть про ваші дані, і ми підберемо найкращу архітектуру. Замовте оцінку вашого проєкту — безкоштовно, просто напишіть нам. Термін розробки: 4–7 місяців. Вартість розраховується індивідуально.







