24. Metodos supervisados y no supervisados de limpieza de datos
Como limpiar datos de planta sin borrar informacion importante?
Metodos supervisados y no supervisados de limpieza de datos
Revisamos faltantes, outliers, duplicados y sensores sospechosos antes de entrenar modelos.
Mapa rapido
| Componente | Uso en clase |
|---|---|
| Excel | Validaciones, reglas de rango, duplicados y saltos bruscos. |
| Python | flags + IsolationForest |
| ML / mineria de datos | Evitar entrenar modelos con ruido operativo |
1. Pregunta de planta
En planta, los datos rara vez llegan perfectos: sensores congelados, saltos bruscos, datos faltantes, duplicados de turno o registros manuales inconsistentes. Limpiar no significa maquillar el proceso; significa separar ruido de senal.
2. Matematica simple
Limpieza supervisada usa una etiqueta o regla conocida. Limpieza no supervisada busca rarezas sin etiqueta.
Supervisada: si evento conocido = 1, comparar patrones.
No supervisada: si distancia al patron normal es alta, revisar.
3. Aplicacion en flotacion
Ejemplos: pH fuera de rango fisico, nivel exactamente igual durante muchas horas, recuperacion imposible, concentrado sin ley asociada, o datos de aire con salto muy grande de una hora a otra.
4. Excel
=CONTAR.BLANCO(A:P)
Rango fisico pH:
=SI(O(K2<6,K2>12),"Revisar","OK")
Salto brusco de nivel:
=SI(ABS(J2-J1)>10,"Revisar","OK")
Duplicado por fecha:
=SI(CONTAR.SI($A:$A,A2)>1,"Duplicado","OK")
5. Python
import pandas as pd
from sklearn.ensemble import IsolationForest
from sklearn.preprocessing import StandardScaler
df = pd.read_excel("flotacion_cobre.xlsx")
# Reglas simples de calidad
df["flag_ph_fuera_rango"] = ((df["ph"] < 6) | (df["ph"] > 12)).astype(int)
df["flag_recuperacion_fuera_rango"] = ((df["recuperacion_cu"] < 0) | (df["recuperacion_cu"] > 100)).astype(int)
df["salto_nivel"] = df["nivel_celda"].diff().abs()
df["flag_salto_nivel"] = (df["salto_nivel"] > df["salto_nivel"].quantile(0.95)).astype(int)
# Metodo no supervisado para revisar registros raros
features = ["recuperacion_cu", "flujo_aire", "nivel_celda", "ph", "dosificacion_espumante", "score_riesgo"]
X_scaled = StandardScaler().fit_transform(df[features])
iso = IsolationForest(contamination=0.08, random_state=42)
df["registro_raro"] = (iso.fit_predict(X_scaled) == -1).astype(int)
print(df[["fecha_hora", "flag_ph_fuera_rango", "flag_salto_nivel", "registro_raro"]].head())6. Puente hacia ML
Mensaje final: Un modelo entrenado con datos sucios aprende errores. Antes de buscar exactitud, conviene construir una tabla de calidad: que se conserva, que se corrige, que se elimina y que se manda a revision de instrumentacion.
