23. Ingenieria y seleccion de caracteristicas
Como transformar datos crudos de planta en variables utiles para un modelo?
Ingenieria y seleccion de caracteristicas
Convertimos sensores, laboratorio y eventos en variables que ayuden al modelo a leer estabilidad, tendencia y riesgo.
Mapa rapido
| Componente | Uso en clase |
|---|---|
| Excel | Crear columnas auxiliares: delta, promedio movil, desviacion movil, percentiles y banderas. |
| Python | pandas feature engineering |
| ML / mineria de datos | Preparar X con variables mas informativas |
1. Pregunta de planta
No basta con entregar al modelo todas las columnas disponibles. En flotacion, muchas veces la senal util aparece como tendencia, diferencia, acumulado, promedio movil o bandera de condicion. La ingenieria de caracteristicas consiste en crear esas variables intermedias.
2. Matematica simple
Una caracteristica nueva es una transformacion de variables originales. Por ejemplo, variacion reciente, distancia al promedio, promedio movil o razon metalurgica.
feature = f(variable original, historico reciente, condicion operativa)
3. Aplicacion en flotacion
Podemos crear variables como estabilidad del nivel, cambio de recuperacion respecto a la hora anterior, espumante por tonelada, aire alto, recuperacion promedio de cuatro horas y distancia al comportamiento normal.
4. Excel
=D2-D1
Promedio movil 4 horas:
=PROMEDIO(D2:D5)
Desviacion movil del nivel:
=DESVEST.M(J2:J5)
Bandera de espumante alto:
=SI(L2>PERCENTIL.INC($L:$L,0.75),1,0)
5. Python
import pandas as pd
df = pd.read_excel("flotacion_cobre.xlsx")
df = df.sort_values("fecha_hora")
df["recuperacion_delta"] = df["recuperacion_cu"].diff()
df["nivel_std_4h"] = df["nivel_celda"].rolling(4).std()
df["aire_prom_4h"] = df["flujo_aire"].rolling(4).mean()
df["espumante_alto"] = (df["dosificacion_espumante"] > df["dosificacion_espumante"].quantile(0.75)).astype(int)
df["score_riesgo_delta"] = df["score_riesgo"].diff()
features = [
"flujo_aire", "nivel_celda", "ph", "p80", "densidad_pulpa",
"recuperacion_delta", "nivel_std_4h", "aire_prom_4h",
"espumante_alto", "score_riesgo_delta"
]
X = df[features].dropna()
y = df.loc[X.index, "evento_sobre_espumacion"]
print(X.head())6. Puente hacia ML
Mensaje final: Un buen modelo no empieza con el algoritmo. Empieza con buenas variables. La seleccion de caracteristicas permite quedarse con lo que aporta senal y retirar ruido, redundancia o variables que no podrian conocerse al momento de decidir.
