Caso aplicado · Enfoque clase

Enfoque clase: Inferencia bayesiana

¿Como cambia el riesgo con nueva evidencia?

Mate MathPlay · Flotación Cu · Material revisado

Flotación CuExcelPython
Ver concepto general MathPlay →
Inteligencia artificial aplicada a minería · Módulo 1

Inferencia Bayesiana en flotación de cobre

Cómo actualizar el riesgo de sobre-espumación cuando aparecen nuevas señales de planta.

Idea Central

Ya sabemos medir estabilidad, relaciones y frecuencia del evento. Ahora damos un paso más:

Si aparece nueva evidencia de planta, ¿cómo cambia mi estimación del riesgo?

Eso es inferencia bayesiana: actualizar una probabilidad inicial cuando aparece nueva información.

1. Matemática Simple

Bayes responde una pregunta muy natural para operación:

Yo tenía una probabilidad inicial. Ahora observé nueva evidencia. ¿Cuál es mi nueva probabilidad?
15 % Riesgo histórico de sobre-espumación antes de mirar variables.
Evidencia Nivel alto, aire alto y espumante alto.
55 % Riesgo actualizado después de observar la evidencia.

Términos importantes

Término Significado simple Ejemplo en planta
Prior Probabilidad inicial Riesgo histórico de sobre-espumación
Evidencia Información nueva observada Nivel alto, aire alto, espumante alto
Likelihood Qué tan común es esa evidencia cuando ocurre el evento Cuando hay evento, qué tan frecuente es ver nivel alto?
Posterior Probabilidad actualizada Riesgo actualizado de sobre-espumación

Fórmula conceptual

P(Evento | Evidencia) = P(Evidencia | Evento) * P(Evento) / P(Evidencia)

2. Aplicación Al Caso De Sobre-Espumación

Problema: en una planta concentradora de cobre ocurre sobre-espumación en celdas de flotación. Esto desestabiliza nivel de pulpa, espuma, arrastre, ley de concentrado y recuperación.

Pregunta operativa: ¿podemos detectar condiciones que anticipan la sobre-espumación y estimar su impacto sobre la recuperación?

Con inferencia bayesiana, la pregunta se vuelve: si observo nivel alto, aire alto y espumante alto, ¿cuánto aumenta la probabilidad de sobre-espumación?

3. Ejemplo Intuitivo

Una sola evidencia

Total de registros: 240 Eventos de sobre-espumación: 48 P(Evento) = 48 / 240 = 20 %

Ahora observamos una evidencia: nivel de celda alto.

Registros con nivel alto: 60 Registros con nivel alto y evento: 36 P(Evento | nivel alto) = 36 / 60 = 60 %
El riesgo base era 20 %. Si el nivel está alto, el riesgo sube a 60 %.

Varias evidencias

Condición de riesgo: nivel alto + aire alto + espumante alto Registros con esa condición: 30 Registros con esa condición y evento: 24 P(Evento | condición de riesgo) = 24 / 30 = 80 %

Esto ya se parece mucho a una alerta temprana.

4. Evidencias En Los Indicadores Del PPT

Evidencia Cómo se define en datos Pregunta bayesiana
Nivel alto nivel_celda > P75 o P90 Si el nivel está alto, sube el riesgo?
Aire alto flujo_aire > P75 Si el aire está alto, sube el riesgo?
Espumante alto dosificacion_espumante > P75 Si el espumante está alto, sube el riesgo?
P80 alto p80 > P75 Si el mineral está más grueso, cambia el riesgo?
pH bajo ph < P25 Si el pH cae, cambia el riesgo?
Recuperación baja recuperacion_cu < P25 Si la recuperación ya cayó, el evento probablemente ocurrió?

5. Excel: Fórmulas Básicas

Archivo de trabajo: Abre o descargue flotacion_cobre.xlsx

flotacion_cobre.xlsx

Hoja: Datos

Calcular umbrales

Percentil 75 de nivel: =PERCENTIL.INC(Datos!J2:J241,0.75) Percentil 75 de aire: =PERCENTIL.INC(Datos!I2:I241,0.75) Percentil 75 de espumante: =PERCENTIL.INC(Datos!L2:L241,0.75)

Crear columnas auxiliares

Nivel alto: =SI(J2>$umbral_nivel,1,0) Aire alto: =SI(I2>$umbral_aire,1,0) Espumante alto: =SI(L2>$umbral_espumante,1,0) Condición combinada: =SI(Y(nivel_alto=1,aire_alto=1,espumante_alto=1),1,0)

Probabilidad base

=PROMEDIO(Datos!N2:N241)

Probabilidad condicionada

Evento cuando nivel es alto: =PROMEDIO.SI(rango_nivel_alto,1,Datos!N2:N241) Evento cuando aire es alto: =PROMEDIO.SI(rango_aire_alto,1,Datos!N2:N241) Evento cuando espumante es alto: =PROMEDIO.SI(rango_espumante_alto,1,Datos!N2:N241) Evento cuando la condición combinada se cumple: =PROMEDIO.SI(rango_condicion_riesgo,1,Datos!N2:N241)

6. Python: Mismo Cálculo, Más Automatizado

Archivo de trabajo: Abre o descargue flotacion_cobre.xlsx

import pandas as pd

df = pd.read_excel(
    "flotacion_cobre.xlsx",
    sheet_name="Datos"
)

Crear evidencias

p75_nivel = df["nivel_celda"].quantile(0.75)
p75_aire = df["flujo_aire"].quantile(0.75)
p75_espumante = df["dosificacion_espumante"].quantile(0.75)

df["nivel_alto"] = (df["nivel_celda"] > p75_nivel).astype(int)
df["aire_alto"] = (df["flujo_aire"] > p75_aire).astype(int)
df["espumante_alto"] = (df["dosificacion_espumante"] > p75_espumante).astype(int)

df["condicion_riesgo"] = (
    (df["nivel_alto"] == 1) &
    (df["aire_alto"] == 1) &
    (df["espumante_alto"] == 1)
).astype(int)

Calcular probabilidades

p_evento = df["evento_sobre_espumacion"].mean()

p_evento_nivel_alto = df.loc[
    df["nivel_alto"] == 1,
    "evento_sobre_espumacion"
].mean()

p_evento_aire_alto = df.loc[
    df["aire_alto"] == 1,
    "evento_sobre_espumacion"
].mean()

p_evento_espumante_alto = df.loc[
    df["espumante_alto"] == 1,
    "evento_sobre_espumacion"
].mean()

p_evento_condicion = df.loc[
    df["condicion_riesgo"] == 1,
    "evento_sobre_espumacion"
].mean()

Tabla resumen

resumen = pd.DataFrame({
    "evidencia": [
        "sin evidencia",
        "nivel alto",
        "aire alto",
        "espumante alto",
        "nivel + aire + espumante altos"
    ],
    "prob_evento": [
        p_evento,
        p_evento_nivel_alto,
        p_evento_aire_alto,
        p_evento_espumante_alto,
        p_evento_condicion
    ]
})

resumen["multiplicador_riesgo"] = resumen["prob_evento"] / p_evento
resumen
Ver funcionando código python

7. Puente Hacia Machine Learning

Archivo de trabajo: Abre o descargue flotacion_cobre.xlsx

Bayes conecta muy bien con machine learning porque introduce una idea clave:

Los modelos de clasificación no solo dicen sí o no; también pueden entregar probabilidades.

Regla simple vs probabilidad

Regla: Si nivel alto + aire alto + espumante alto: riesgo alto Versión probabilística: P(sobre-espumación | nivel alto, aire alto, espumante alto) = 80 %

Puente hacia regresión logística

features_ml = [
    "flujo_aire",
    "nivel_celda",
    "dosificacion_espumante",
    "p80",
    "ph"
] 

X = df[features_ml]
y = df["evento_sobre_espumacion"]
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

modelo = LogisticRegression(max_iter=1000)
modelo.fit(X_train, y_train)

probabilidades = modelo.predict_proba(X_test)[:, 1]
probabilidades[:10]

Umbrales de alerta

Probabilidad > 70 %: alerta roja Probabilidad entre 40 % y 70 %: alerta amarilla Probabilidad < 40 %: operación normal
Ver funcionando código python

8. Cierre Conceptual

La inferencia bayesiana permite pasar de esta pregunta:

¿Qué tan frecuente es la sobre-espumación?

A esta otra:

Si observo nuevas señales de planta, ¿cuánto cambia el riesgo?
Mensaje final: Bayes nos enseña a pensar como un sistema de alerta: partimos de un riesgo histórico y lo actualizamos con evidencia de planta. Si nivel, aire y espumante están altos, no tenemos certeza absoluta, pero sí una probabilidad actualizada que puede justificar una revisión operativa antes de que la recuperación caiga.

Regístrate al boletín MathPlay

Datos, simulación, visualización, IA y tecnología aplicada a problemas reales de industria y minería.

Sin calendario fijo. Sin spam.

Listo. Te escribo cuando haya algo nuevo.

← Volver al caso