Enfoque guía: Pronóstico de series de tiempo
Recuperación y riesgo en el tiempo — lags, medias móviles y pronóstico 1 h
Ver concepto general MathPlay · Ruta IA matemática (MathPlay) →Pronóstico de series de tiempo
La planta no es una foto: es una película hora a hora — anticipar recuperación y riesgo
Idea central
Serie de tiempo: datos ordenados por fecha_hora. El valor de ahora depende del pasado reciente. En flotación: caída sostenida de recuperación + espumante alto → mayor riesgo en la próxima hora.
Demo: autocorrelación lag-1 recuperación ≈ 0,14 (señal débil pero útil). Con 120 h es material educativo; en planta real: meses de historiador.
1. Matemática — features temporales
yt ≈ f(yt−1, yt−2, xt, media_móvilt)
Features típicas (flotación)
| Feature | Definición | Para qué |
|---|---|---|
| rec_lag1 | Recuperación t−1 | Inercia del KPI |
| esp_lag1 | Espumante t−1 | Arrastre de dosificación |
| media_mov_6h | Promedio últimas 6 h | Tendencia del turno |
| std_mov_6h | σ móvil 6 h | Estabilidad (unidad 1) |
| turno A/B/C | Variable categórica | Efecto de cuadrilla |
2. Escalera de métodos
Pregunta operativa: ¿Recuperación cae 3 h seguidas y espumante sube — qué hacer en h+1?
3. Excel — lags y media móvil
CSV demo · ordenar por fecha_hora.
=' Recuperación lag 1 (fila 3 en adelante):
=G2
=' Media móvil 6 h recuperación:
=PROMEDIO(OFFSET(G3; -5; 0; 6; 1))
=' σ móvil 6 h:
=DESVEST(OFFSET(G3; -5; 0; 6; 1))
=' Tendencia simple (rec bajando 3 h):
=SI(Y(G3<G2; G2<G1); "CAIDA"; "OK")
=' Pronóstico naive (h+1 = rec actual):
=G3
4. Python — regresión con lags
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
df = pd.read_csv("datos_flotacion_demo.csv")
df["fecha_hora"] = pd.to_datetime(df["fecha_hora"])
df = df.sort_values("fecha_hora")
df["rec_lag1"] = df["recuperacion_cu_pct"].shift(1)
df["esp_lag1"] = df["dosif_espumante_ml_min"].shift(1)
df["rec_ma6"] = df["recuperacion_cu_pct"].rolling(6).mean()
df["rec_std6"] = df["recuperacion_cu_pct"].rolling(6).std()
feat_ts = ["rec_lag1","esp_lag1","rec_ma6","rec_std6",
"ph","flujo_aire","nivel_celda_pct"]
df2 = df.dropna(subset=feat_ts + ["recuperacion_cu_pct"])
# Pronóstico 1 h: predecir rec_t con info hasta t-1 y sensores t
X = df2[feat_ts]
y = df2["recuperacion_cu_pct"]
split = int(len(df2) * 0.75)
reg = LinearRegression().fit(X.iloc[:split], y.iloc[:split])
pred = reg.predict(X.iloc[split:])
mae = mean_absolute_error(y.iloc[split:], pred)
print("MAE pronóstico 1h (test final):", round(mae, 2), "pp")
# Riesgo: clasificar evento usando lags (mismo espíritu unidad 17)
from sklearn.linear_model import LogisticRegression
df2["evt_lag1"] = df["sobre_espumacion"].shift(1)
df3 = df2.dropna(subset=["evt_lag1"])
clf = LogisticRegression(max_iter=500, class_weight="balanced")
clf.fit(df3[feat_ts + ["evt_lag1"]].iloc[:split], df3["sobre_espumacion"].iloc[:split])
print("Coef lags en riesgo:", clf.coef_[0][:3])
5. Cierre Módulo 1 — panel supervisado
Próximo paso (Módulo 2): aprendizaje no supervisado — clustering, PCA como reducción, anomalías sin etiqueta. Mismo caso flotación, nuevas herramientas.
6. Investigación sugerida
Grafica recuperación vs hora. Marca eventos=1. ¿Cuántas horas antes del evento ya cae la media móvil 6 h? Propón una regla de alerta temporal.
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.
