Curso 2 · Módulo 1 · Aprendizaje supervisado

18. Detección de anomalías

¿Cómo detectar condiciones raras antes de que el problema sea evidente?

Mate MathPlay · Flotación Cu · Archivo de trabajo: flotacion_cobre.xlsx

Flotación CuExcelPythonMachine Learning

Detección de anomalías

Combinamos distancia, error y etiquetas históricas para reconocer condiciones operativas que se alejan de lo normal.

1. Pregunta de planta

Una anomalía es una condición que no se parece al comportamiento normal de la planta.

Idea central: en aprendizaje supervisado, usamos etiquetas históricas para aprender qué patrones suelen estar asociados a condiciones anómalas.
Normal = comportamiento esperado Anómalo = condición rara, riesgosa o fuera de patrón

2. Matemática simple

La detección de anomalías puede verse como una combinación de distancia, error y etiqueta.

EnfoqueIdeaEjemplo
DistanciaLejos de lo normal.Norma o distancia respecto a una condición promedio.
ErrorLo real se aleja de lo estimado.Recuperación real muy distinta de recuperación predicha.
EtiquetaAprender eventos conocidos.Usar evento_sobre_espumacion como clase.
Lectura simple: una anomalía no siempre es una falla. Es una condición que merece revisión.

3. Aplicación en flotación

Podemos buscar anomalías en varios niveles:

  • Anomalía de proceso: nivel, aire o espumante fuera de patrón.
  • Anomalía metalúrgica: recuperación real cae más de lo esperado.
  • Anomalía de riesgo: score alto sin evento confirmado, o evento sin score alto.
  • Anomalía de sensor: señal plana, saltos bruscos o valores imposibles.

4. Excel: anomalía por distancia simple

Primero estandarizamos variables para que estén en escala comparable.

Z-score de aire

=(I2-PROMEDIO(I:I))/DESVEST.M(I:I)

Z-score de nivel

=(J2-PROMEDIO(J:J))/DESVEST.M(J:J)

Distancia simple

=RAIZ(z_aire^2 + z_nivel^2 + z_espumante^2 + z_score^2)

Alerta

=SI(distancia>PERCENTIL.INC(rango_distancia,0.90),"Anómalo","Normal")

5. Python: detección supervisada y por distancia

import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

archivo = "flotacion_cobre.xlsx"
df = pd.read_excel(archivo)

features = [
    "flujo_aire", "nivel_celda", "ph", "dosificacion_espumante",
    "p80", "densidad_pulpa", "score_riesgo"
]

X = df[features]
y = df["evento_sobre_espumacion"]

# 1) Anomalía por distancia al comportamiento medio
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
centro = X_scaled.mean(axis=0)
df["distancia_normal"] = np.linalg.norm(X_scaled - centro, axis=1)
df["alerta_distancia"] = (df["distancia_normal"] > df["distancia_normal"].quantile(0.90)).astype(int)

# 2) Modelo supervisado usando etiquetas de evento
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

modelo = RandomForestClassifier(n_estimators=200, random_state=42)
modelo.fit(X_train, y_train)

pred = modelo.predict(X_test)
print(classification_report(y_test, pred))

6. Lectura operativa

La detección de anomalías sirve para priorizar revisión, no para declarar causa automática.

Buen uso: avisar que una condición no se parece a la operación normal.
Mal uso: asumir que toda anomalía es sobre-espumación o que todo evento debe corregirse igual.

Mensaje final: detectar anomalías es aprender a reconocer cuándo la planta se aleja de su zona conocida antes de que el problema sea evidente.

← Lección anteriorDescargar datosSiguiente lección →