Introducción a la Exploración Minera con Teledetección
La exploración minera ha entrado en una nueva era con la integración de tecnologías de teledetección y machine learning. En este blog, te llevaré a través de un curso completo de 5 clases donde aprenderás a detectar zonas con potencial aurífero utilizando Google Earth Engine y algoritmos de aprendizaje automático.
Este enfoque revolucionario permite analizar vastas áreas de manera eficiente, reduciendo costos y tiempo en la exploración mineral.
Sobre el Expositor
M.Sc. Edwin Calle Condori es especialista en teledetección aplicada a la exploración RRNN con más de 8 años de experiencia en la industria. Cuenta con una Maestría en Ciencias Geomáticas, y ha liderado proyectos de exploración mineral en Bolivia utilizando técnicas avanzadas de machine learning y análisis de datos satelitales.
1 Fundamentos y Configuración del Entorno
En esta primera clase, configuramos el entorno de trabajo y aprendimos los fundamentos de la exploración minera con teledetección.
# Instalación de librerías
!pip install earthengine-api geemap rasterio numpy pandas scikit-learn xgboost matplotlib localtileserver -q
# Importación de bibliotecas
import ee
import geemap
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score, confusion_matrix, ConfusionMatrixDisplay
from xgboost import XGBClassifier
import os
import time
import rasterio
import shutil
from google.colab import drive
import warnings
import math
# Autenticación con Earth Engine
ee.Authenticate()
ee.Initialize(project='tu_proyecto')
Conceptos Clave
Teledetección, SIG, Python para análisis geoespacial, Google Earth Engine.
2 Adquisición de Datos Satelitales
En la segunda clase, aprendimos a adquirir y preprocesar datos satelitales de múltiples fuentes.
# Función para obtener composito de Sentinel-2
def get_s2_composite(aoi, start_date='2023-01-01', end_date='2023-12-31', cloud_thresh=20):
s2 = (ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(aoi)
.filterDate(start_date, end_date)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', cloud_thresh)))
# Máscara de nubes
def mask_clouds(img):
qa = img.select('QA60')
cloud_mask = qa.bitwiseAnd(1 << 10).Or(qa.bitwiseAnd(1 << 11))
return img.updateMask(cloud_mask.Not())
s2_masked = s2.map(mask_clouds)
return s2_masked.median().clip(aoi)
Conceptos Clave
Espectro electromagnético, corrección atmosférica, composiciones temporales, sensores ópticos y SAR.
3 Generación de Características e Índices
La tercera clase se centró en la creación de índices espectrales para detectar alteraciones hidrotermales.
# Función para calcular índices de alteración hidrotermal
def calculate_hydrothermal_indices(img):
# Índices de alteración hidrotermal
iron_ox = img.expression(
'float(B6 / B2)',
{'B6': img.select('B6'), 'B2': img.select('B2')}
).rename('Iron_Ox')
clay = img.expression(
'float(B11 / B12)',
{'B11': img.select('B11'), 'B12': img.select('B12')}
).rename('Clay_Ratio')
ndvi = img.normalizedDifference(['B8', 'B4']).rename('NDVI')
# Índice de alteración compuesto
alteration_index = img.expression(
'float(Iron_Ox + Clay_Ratio)',
{'Iron_Ox': iron_ox, 'Clay_Ratio': clay}
).rename('Alteration_Idx')
return img.addBands([iron_ox, clay, ndvi, alteration_index])
Conceptos Clave
Firmas espectrales, alteración hidrotermal, mineralogía espectral, índices de vegetación.
4 Modelado Predictivo con Machine Learning
En la cuarta clase, implementamos algoritmos de machine learning para predecir potencial aurífero.
# Entrenar Random Forest
rf_model = RandomForestClassifier(n_estimators=100, random_state=42, n_jobs=-1)
rf_model.fit(X_train, y_train)
# Entrenar XGBoost
xgb_model = XGBClassifier(n_estimators=100, learning_rate=0.1, random_state=42)
xgb_model.fit(X_train, y_train)
# Evaluación de modelos
def evaluate_model(model, X_test, y_test, name):
y_pred = model.predict(X_test)
y_prob = model.predict_proba(X_test)[:,1]
auc = roc_auc_score(y_test, y_prob)
print(f"{name} AUC: {auc:.4f}")
return auc
Conceptos Clave
Aprendizaje supervisado, validación cruzada, importancia de variables, Random Forest, XGBoost.
5 Generación de Mapas de Probabilidad
La quinta y última clase se enfocó en la generación de mapas de probabilidad y la interpretación de resultados.
# Función para exportar características y predecir
def predict_and_export(model, feature_image, region, output_name, scale=30):
# Exportar características
# Aplicar modelo a cada pixel
# Guardar resultados
return output_path
# Crear mapa de consenso
consensus_prob = (rf_prob + xgb_prob) / 2
Conceptos Clave
Mapas de probabilidad, interpretación geológica, planificación de exploración, validación de campo.
Leyenda de Potencial Aurífero