Caso aplicado · Curso 2 · Módulo 1 · Unidad 18

Enfoque guía: Detección de anomalías

Distancia multivariada + umbrales + clasificador — ¿esta hora es rara en flotación?

Mate MathPlay · Flotación Cu · Material complementario

Flotación CuExcelPythonML supervisado
Ver concepto general MathPlay · Ruta IA matemática (MathPlay) →
Curso 2 — Aprendizaje supervisado · Módulo 1 · Unidad 3 de 4
Caso flotación Cu · Curso 2 · Unidad 18

Detección de anomalías

Integrar norma (unidad 7), σ (unidad 1) y clasificador (unidad 17) en alerta multivariable

Idea central

Anomalía = hora de planta que no se parece al comportamiento normal. No siempre hay etiqueta clara; aquí tenemos sobre_espumacion para validar. Combinamos enfoque geométrico (Curso 1) y supervisado (Curso 2).

Demo: distancia euclídea al punto normal x₀ (mediana histórica): sin evento ≈ 13,8 · con evento ≈ 39,8.

1. Matemática — tres capas de anomalía

d(x) = ‖x − x₀‖ = √Σj (xj − x₀j)²

Capa A Estadística σ rec. alta · percentil espumante > P90 Capa B Geométrica d(x) > umbral (p.ej. percentil 90 de d) Capa C Supervisada P(evento|x) > 0,5 (logística unidad 17) Capa D Integrada alerta fuerte si B + C (o A + B + C)
CapaSeñal demoAcción sugerida
σ rec. 6 h > 3Planta nerviosaVigilar
d > umbral~40 vs ~14Confirmar anomalía multivariable
P(evento) altaClasificadorAlerta turno
Regla integrada (educativa): alerta más confiable cuando distancia alta Y probabilidad alta — no una sola métrica.

2. Anomalía vs clasificación

  • Clasificación: aprende frontera evento/no evento con etiquetas.
  • Anomalía (geométrica): aprende solo qué es "normal" (x₀) y marca lejanos.
  • Isolation Forest (mención): separa puntos raros sin etiqueta — profundizar en Módulo 2 no supervisado.

En flotación, espumante+nivel+aire juntos explican mejor la rareza que un solo sensor.

3. Excel — distancia y alerta

CSV demo · estandarizar cada columna H:M (restar mediana, dividir por DESVEST).

=' Distancia euclídea simplificada (6 vars estandarizadas en fila 2):
=RAIZ(SUMAPRODUCTO((H2-MEDIANA(H$2:H$121))^2/DESVEST(H$2:H$121)^2;
                   (K2-MEDIANA(K$2:K$121))^2/DESVEST(K$2:K$121)^2;
                   ... ))

=' Umbral d (percentil 90):
=PERCENTIL.INC(columna_d; 0,9)

=' Alerta anomalía:
=SI(d2 > umbral_d; "ANOMALIA"; "OK")

4. Python — detector integrado

import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline

features = ["ph","p80_um","flujo_aire","dosif_espumante_ml_min","nivel_celda_pct","ley_cabeza_cu_pct"]
df = pd.read_csv("datos_flotacion_demo.csv")
X = df[features].values
y = df["sobre_espumacion"].values

scaler = StandardScaler()
X_s = scaler.fit_transform(X)
x0 = np.median(X_s, axis=0)
df["distancia"] = np.linalg.norm(X_s - x0, axis=1)

umbral_d = np.quantile(df["distancia"], 0.90)
df["alerta_dist"] = (df["distancia"] > umbral_d).astype(int)

clf = Pipeline([
    ("s", StandardScaler()),
    ("m", LogisticRegression(max_iter=500, class_weight="balanced"))
])
clf.fit(X, y)
df["p_evento"] = clf.predict_proba(X)[:, 1]
df["alerta_integrada"] = (
    (df["distancia"] > umbral_d) & (df["p_evento"] > 0.5)
).astype(int)

print(df.groupby("sobre_espumacion")[["distancia","p_evento","alerta_integrada"]].mean())
print("Filas alerta integrada:", df["alerta_integrada"].sum())

5. Investigación sugerida

Para las 14 horas con evento=1: ¿cuántas activan alerta de distancia, clasificador e integrada? ¿Cuál capa tiene mejor recall?

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.

← Clasificación Siguiente: Series de tiempo → Descargar CSV