Enfoque guía: Aplicaciones con aprendizaje no supervisado
Monitoreo de modos, mapas PCA y alertas sin etiqueta en operación
Ver concepto general MathPlay · Ruta IA matemática (MathPlay) →Curso 2 — Aplicaciones ML en minería · Módulo 4 · Unidad 2 de 3
Aplicaciones con aprendizaje no supervisado
Clustering, PCA e Isolation Forest cuando aún no hay bitácora completa
Puente Módulo 2 → planta
Unidades 20–22 exploran la planta sin etiquetas. En aplicación real: arranque en mina nueva, línea recién comisionada o historiador sin eventos anotados.
1. Tres aplicaciones no supervisadas
| Aplicación | Método | Entregable turno | Demo |
|---|---|---|---|
| Mapa de modos | K-means K=2 | % horas en modo estrés | 14 h / 12 % |
| Tablero 2D | PCA | Gráfico PC1 vs PC2 | ~57 % var. |
| Radar de rareza | Isolation Forest | Top 10 horas raras/día | contam 12 % |
Cuándo usar NS antes que supervisado
- Menos de 30 eventos documentados en 6 meses
- Quieres explorar variables antes de definir KPI
- Complemento al supervisado: “hora rara que el clasificador no vio”
2. Integración con DSS (U26)
Cluster U20 → widget "modo celda" (estable / estrés)
PCA U21 → pantalla ingeniería (no alarma directa)
ISO U22 → cola de revisión para metalurgia
Transición → cuando hay 50+ eventos → entrenar U17 supervisado
3. Excel — dashboard NS
=' % turno en cluster estrés:
=CONTAR.SI(cluster_col;0)/FILAS(cluster_col)
=' Hora más rara del día (MAX distancia):
=INDICE(fecha_col; COINCIDIR(MAX(dist_col); dist_col; 0))
=' Sparkline PC1 últimas 24 h (si disponible)
4. Python — job semanal NS
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.ensemble import IsolationForest
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 = StandardScaler().fit_transform(df[features])
df["cluster"] = KMeans(2, random_state=42, n_init=10).fit_predict(X)
df["pc1"] = PCA(2).fit_transform(X)[:, 0]
iso = IsolationForest(contamination=0.12, random_state=42)
df["rara"] = iso.fit_predict(X) == -1
resumen = {
"pct_estres": round((df["cluster"]==0).mean()*100, 1),
"horas_raras": int(df["rara"].sum()),
}
print(resumen)
df.loc[df["rara"], ["fecha_hora","recuperacion_cu_pct","dosif_espumante_ml_min"]].head()
5. Investigación sugerida
Propón calendario: ¿cada cuánto re-entrenar K-means en planta? ¿Qué pasa si cambia el mineral (ley cabeza)?
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.
