Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Predicción de % Sílice en Concentrado de Flotación

Modelo de Machine Learning para estimar en tiempo real el porcentaje de sílice (% Silica Concentrate) en el concentrado de una planta de flotación minera, usando datos de sensores del proceso. El objetivo es anticipar la calidad del concentrado una hora antes de la medición de laboratorio, dando a la sala de control una herramienta de apoyo para la toma de decisiones.

Proyecto desarrollado como prueba técnica para el puesto de Practicante de Analytics.


El problema

En una planta de flotación, la calidad del concentrado (medida por el % de sílice) se conoce una vez por hora a través del laboratorio. Mientras tanto, los sensores del proceso registran datos cada 20 segundos. Este desfase significa que, cuando el operador recibe un resultado de calidad, ya pasó una hora — y si la sílice subió, las pérdidas ya ocurrieron.

La solución: un modelo que, con los datos de los sensores, estima la sílice de la próxima hora antes de que llegue el resultado del laboratorio. Funciona como un sensor virtual de apoyo y alerta temprana.


Resultados

Métrica Valor Significado
0.66 Explica el 66% de la variación de la sílice
RMSE 0.67 Error cuadrático medio (puntos de % de sílice)
MAE 0.46 Error absoluto promedio (~0.46 puntos de sílice)

Evaluado en un conjunto de prueba temporal (datos que el modelo nunca vio). Supera al baseline (repetir el último valor, R²=0.61) y, sobre todo, es un resultado honesto y sin data leakage — a diferencia de otros enfoques que reportan R² > 0.95 incluyendo información del laboratorio no disponible en tiempo real.

Se reporta R²=0.58 en el conjunto de validación como estimación conservadora.


Decisiones técnicas clave

Este proyecto prioriza el rigor metodológico sobre métricas infladas:

1. Sin data leakage. Se excluyó el % Iron Concentrate del instante actual, porque sale del laboratorio con el mismo retraso que la sílice — incluirlo "revela" la respuesta y produce un R² artificialmente alto. Otros enfoques que reportan R² > 0.95 caen en este error.

2. Validación temporal. Los datos se dividieron cronológicamente en 60% entrenamiento / 20% validación / 20% prueba, nunca de forma aleatoria. En series de tiempo, mezclar pasado y futuro al azar produce resultados engañosos. El conjunto de prueba se usó una sola vez, al final.

3. Agregación horaria. Los datos de sensores (cada 20 s) se agregaron a frecuencia horaria (mean, std, min, max) para alinearlos con la frecuencia del laboratorio (1/hora) y evitar pseudo-replicación.

4. Modelo "delta". El modelo predice el cambio de sílice respecto a la hora anterior, no el valor absoluto. Esto lo obliga a aprender la dinámica del proceso en vez de simplemente copiar el último valor.

5. Explicabilidad. Se usó SHAP para entender qué variables influyen en cada predicción, identificando palancas operativas que el operador puede ajustar.


Estructura del proyecto

mining-quality-prediction/
├── data/
│   ├── raw/              # Dataset original (no versionado por tamaño)
│   └── processed/        # Datos agregados por hora y features
├── src/                  # Scripts numerados del pipeline
│   ├── 01_aggregate.py           # Agregación horaria (anti-leakage)
│   ├── 02_features.py            # Ingeniería de features
│   ├── 03_train_baseline.py      # Modelo baseline
│   ├── 04_train_softsensor.py    # Soft sensor (solo sensores)
│   ├── 05_lag_experiment.py      # Experimento de desfase temporal
│   ├── 06_cross_correlation.py   # Correlación cruzada
│   ├── 07_model_comparison.py    # Comparación de algoritmos
│   ├── 08_modelo_final.py        # Modelo final (LightGBM delta)
│   ├── 09_shap_analysis.py       # Análisis de explicabilidad (SHAP)
│   ├── 10_mlflow_tracking.py     # Registro de experimentos (MLflow)
│   ├── 11_whatif_simulation.py   # Simulación de escenarios
│   └── 12_experimento_hierro_lags.py  # Experimento de lags del hierro
├── models/               # Modelo final entrenado (.joblib + metadata)
├── reports/              # Reportes de análisis (.md) y figuras
│   └── figures/          # Gráficos generados (SHAP, comparaciones, etc.)
├── app/
│   └── dashboard.py      # Dashboard interactivo (Streamlit)
├── requirements.txt      # Dependencias
└── README.md

Instalación

Requiere Python 3.13. Se recomienda un entorno virtual (conda o venv).

# Crear y activar entorno (ejemplo con conda)
conda create -n mining python=3.13
conda activate mining

# Instalar dependencias
pip install -r requirements.txt

Uso

Reproducir el pipeline

Los scripts en src/ están numerados según el orden del flujo. Para reproducir desde los datos crudos:

python src/01_aggregate.py      # Agrega los datos por hora
python src/02_features.py       # Genera las features
python src/08_modelo_final.py   # Entrena el modelo final
python src/09_shap_analysis.py  # Genera el análisis SHAP

Dashboard interactivo

Herramienta donde se ajustan las palancas operativas y se observa la predicción de sílice en tiempo real, junto con la explicación SHAP de cada caso:

streamlit run app/dashboard.py

Abre automáticamente en http://localhost:8501.

Seguimiento de experimentos (MLflow)

Todos los experimentos quedaron registrados con sus parámetros y métricas, y el modelo final está versionado:

mlflow ui --backend-store-uri ./mlruns

Abre en http://localhost:5000 → pestaña "Training runs".


Modelo

  • Algoritmo: LightGBM (gradient boosting sobre árboles)
  • Enfoque: predicción del cambio ("delta") respecto a la hora anterior
  • Optimización: búsqueda de hiperparámetros con Optuna
  • Variables: historia reciente de la sílice (lags), variables del proceso (flujos de aire, niveles, reactivos, pH, densidad) y variables derivadas (ratios, promedios móviles)

Hallazgos de explicabilidad (SHAP)

La variable más influyente es la propia sílice de horas anteriores (fuerte inercia del proceso), con un patrón de reversión a la media. Entre las variables controlables, se identificaron palancas operativas que, al ajustarse, reducen la sílice y mejoran la calidad del concentrado.

Limitación conocida: el modelo predice bien la operación normal pero subestima los cambios bruscos. Por eso se plantea como una herramienta de apoyo al operador, no un reemplazo.


Extensiones planificadas

  • API REST (FastAPI): exponer el modelo como servicio web para integrarlo a los sistemas de planta.
  • Agente inteligente (LangGraph): un asistente que combine predicción, explicación (SHAP) y recomendación de ajustes.

Dataset

Basado en el dataset público Quality Prediction in a Mining Process (Kaggle), con registros de marzo a septiembre de 2017 de una planta de flotación.


Autor

Luis Fernando Varas Padilla

About

Predicción de % sílice en concentrado de flotación minera con validación temporal, explicabilidad (SHAP) y MLOps

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages