Curso 2 · Modulo 3 · Mineria de datos

23. Ingenieria y seleccion de caracteristicas

Como transformar datos crudos de planta en variables utiles para un modelo?

Mate MathPlay · Flotacion Cu · Archivo de trabajo: flotacion_cobre.xlsx

Flotacion CuExcelPythonMineria de datos

Ingenieria y seleccion de caracteristicas

Convertimos sensores, laboratorio y eventos en variables que ayuden al modelo a leer estabilidad, tendencia y riesgo.

Mapa rapido

ComponenteUso en clase
ExcelCrear columnas auxiliares: delta, promedio movil, desviacion movil, percentiles y banderas.
Pythonpandas feature engineering
ML / mineria de datosPreparar 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

Cambio horario de recuperacion:
=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.

← Leccion anteriorDescargar datosSiguiente leccion →