Enfoque guía: Modelos de regresión
Soft sensor de recuperación Cu — de y = Xβ (Curso 1) a regresión supervisada entrenada
Ver concepto general MathPlay · Ruta IA matemática (MathPlay) →Modelos de regresión
Estimar recuperación de Cu (%) a partir de sensores — el soft sensor como regresión supervisada
Puente desde Curso 1
En la unidad 8 ya estimaste recuperación con y = Xβ a mano. Eso es regresión lineal. Hoy formalizamos el aprendizaje supervisado: entrenar β con histórico, medir error y validar antes de confiar en planta.
Problema: sobre-espumación desestabiliza la celda y cae recuperación (~76 % con evento vs ~86 % sin evento en el demo). Objetivo: predecir recuperación hora a hora para detectar desvíos tempranos.
1. Matemática — regresión supervisada
ÿ = β0 + β1x1 + … + βpxp = Xβ
Entrenamiento = encontrar β que minimiza la pérdida (error cuadrático medio):
L(β) = (1/n) Σi (yi − ÿi)²
Métricas en planta (demo n=120)
| Métrica | Demo | Qué significa |
|---|---|---|
| Media rec. | 85,3 % | Línea base del KPI |
| σ rec. | 3,41 % | Planta nerviosa |
| R² | ~0,79 | El modelo lineal explica ~79 % de variación |
| MAE | ~1,3 pp | Error medio absoluto en puntos de rec. |
| β espumante | −0,27 | Más espumante → menor rec. (modelo) |
2. Escalera de modelos (flotación)
Salida operativa: soft sensor — ÿ vs laboratorio. Si ÿ cae > 2σ bajo lo esperado, revisar espumante y nivel.
3. Excel — regresión y error
CSV demo · datos_flotacion_demo.csv
Columnas: G = recuperación · H:M = features (pH, P80, aire, espumante, nivel, ley cabeza).
=' Coeficientes (LINEST multivariable):
=LINEST(G2:G121; H2:M121; VERDADERO; VERDADERO)
=' Predicción fila 2:
=$B$0 + $B$1*H2 + $B$2*I2 + $B$3*J2 + $B$4*K2 + $B$5*L2 + $B$6*M2
=' Error absoluto:
=ABS(G2 - predicción)
=' MAE global:
=PROMEDIO(error_abs)
=' R²:
=COEF.DE.CORRELACIÓN(G2:G121; pred:G121)^2
4. Python — entrenar y evaluar
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_absolute_error
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 = df[features]
y = df["recuperacion_cu_pct"]
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42
)
reg = LinearRegression()
reg.fit(X_train, y_train)
pred = reg.predict(X_test)
print("R2 test:", round(r2_score(y_test, pred), 3))
print("MAE test:", round(mean_absolute_error(y_test, pred), 2), "pp")
for name, b in zip(features, reg.coef_):
print(f" beta {name}: {b:.3f}")
# Soft sensor última hora
ult = X.iloc[[-1]]
print("Rec. real:", y.iloc[-1], "| Estimada:", round(reg.predict(ult)[0], 1))
5. Investigación sugerida
Calcula MAE separado para horas con sobre_espumacion=1 vs 0. ¿El modelo falla más cuando hay espuma? ¿Qué implica para el turno?
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.
