Enfoque guía: Limpieza de datos (supervisado y no supervisado)
Valores faltantes, outliers y etiquetas dudosas — antes de confiar en el modelo
Ver concepto general MathPlay · Ruta IA matemática (MathPlay) →Curso 2 — Minería de datos · Módulo 3 · Unidad 2 de 4
Limpieza de datos
Métodos supervisados y no supervisados para datos de planta confiables
Idea central
Basura entra, basura sale. Un modelo entrenado con sensores pegados, horas duplicadas o etiquetas mal anotadas va a “aprender” errores del historiador, no la metalurgia.
En el demo el CSV está limpio (120 h completas). En clase simulamos problemas típicos y mostramos cómo detectarlos.
1. Dos familias de limpieza
| Tipo | Qué detecta | Ejemplo flotación | Herramienta |
|---|---|---|---|
| No supervisado | Patrón raro sin etiqueta | pH = 0 por falla de sensor | Z-score, IQR, Isolation Forest (U22) |
| Supervisado | Error vs variable objetivo | Rec. 95 % con ley relave alta | Residual alto del soft sensor |
Checklist demo (n=120)
| Problema | Regla | Umbral sugerido |
|---|---|---|
| Outlier recuperación | |z| > 3 | ~0–2 filas |
| Espumante imposible | > P99 histórico | revisar calibración |
| Duplicado hora | fecha_hora única | 0 en demo |
| Etiqueta espuma dudosa | rec. alta + obs vacía + esp. alto | validar con turno |
En operación: limpiar no es borrar a ciegas. Cada fila eliminada se documenta: “sensor congelado 14:00”.
2. Flujo de limpieza
1. Auditoría → contar NA, duplicados, rangos físicos
2. No supervisado → Z-score / IQR por sensor
3. Supervisado → residual soft sensor > 2σ
4. Metalurgia → confirma etiquetas sobre_espumacion
5. Export → CSV limpio para U16–U22
3. Excel — detectar outliers
=' Z-score recuperación:
=(G2-PROMEDIO($G$2:$G$121))/DESVEST($G$2:$G$121)
=' Flag outlier:
=SI(ABS(z_score)>3; "REVISAR"; "OK")
=' IQR espumante (método caja):
=CUARTIL.EXC(J:J;3)+1.5*(CUARTIL.EXC(J:J;3)-CUARTIL.EXC(J:J;1))
=' Contar NA por columna:
=CONTAR.BLANCO(H2:H121)
4. Python — limpieza mixta
import pandas as pd
import numpy as np
from sklearn.ensemble import IsolationForest
from sklearn.linear_model import LinearRegression
df = pd.read_csv("datos_flotacion_demo.csv")
features = ["ph","p80_um","flujo_aire","dosif_espumante_ml_min","nivel_celda_pct","ley_cabeza_cu_pct"]
# --- No supervisado: sensores imposibles ---
z = (df[features] - df[features].mean()) / df[features].std()
df["outlier_sensor"] = (z.abs() > 3).any(axis=1)
# --- Supervisado: residual alto de recuperación ---
reg = LinearRegression().fit(df[features], df["recuperacion_cu_pct"])
res = df["recuperacion_cu_pct"] - reg.predict(df[features])
df["outlier_residual"] = res.abs() > 2 * res.std()
# --- Unión ---
df["limpiar"] = df["outlier_sensor"] | df["outlier_residual"]
print("Filas a revisar:", df["limpiar"].sum(), "de", len(df))
print(df.loc[df["limpiar"], ["fecha_hora","recuperacion_cu_pct","dosif_espumante_ml_min"]])
5. Investigación sugerida
Inyecta 5 valores erróneos al CSV (pH=2, rec.=50). ¿Los detecta Z-score, residual o ambos? ¿Cuál usarías en planta?
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.
