Curso 2 · Módulo 1 · Aprendizaje supervisado

19. Pronóstico de series de tiempo

¿Cómo usar el pasado reciente para anticipar recuperación o riesgo?

Mate MathPlay · Flotación Cu · Archivo de trabajo: flotacion_cobre.xlsx

Flotación CuExcelPythonMachine Learning

Pronóstico de series de tiempo

Usamos rezagos, ventanas móviles y separación temporal para pronosticar indicadores de flotación.

1. Pregunta de planta

El pronóstico de series de tiempo usa el pasado reciente para estimar lo que podría ocurrir en las siguientes horas.

Idea central: no solo queremos saber cómo está la planta ahora; queremos anticipar si la recuperación o el riesgo se están deteriorando.
Pasado reciente -> patrón temporal -> pronóstico corto

2. Matemática simple

Una serie de tiempo es una variable ordenada por fecha u hora.

recuperacion_t = valor actual recuperacion_t-1 = valor anterior recuperacion_t-2 = dos pasos atrás

El modelo aprende con retrasos o ventanas móviles:

recuperacion_siguiente = f(recuperacion_actual, recuperacion_anterior, aire, nivel, espumante, score)
Lectura simple: el orden importa. No debemos mezclar futuro con pasado al entrenar.

3. Aplicación en flotación

PronósticoPreguntaUso
Recuperación próxima¿La recuperación podría caer?Revisión temprana de variables.
Score de riesgo próximo¿El riesgo va subiendo?Alerta preventiva.
Nivel de celda¿El nivel seguirá subiendo?Evitar inestabilidad o desborde.
Evento futuro¿Podría ocurrir sobre-espumación?Clasificación con horizonte.

4. Excel: rezagos y promedio móvil

Primero se ordenan los datos por fecha_hora.

Valor anterior de recuperación

=F2

Si estamos en la fila 3, esa fórmula representa la recuperación de la hora anterior.

Promedio móvil de 4 registros

=PROMEDIO(F2:F5)

Cambio de recuperación

=F3-F2

Alerta de tendencia

=SI(Y(F3-F2<0,P3>60),"Riesgo subiendo","Normal")

5. Python: pronóstico con variables rezagadas

import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error

archivo = "flotacion_cobre.xlsx"
df = pd.read_excel(archivo)
df = df.sort_values("fecha_hora").reset_index(drop=True)

# Variables del pasado reciente
df["rec_lag1"] = df["recuperacion_cu"].shift(1)
df["score_lag1"] = df["score_riesgo"].shift(1)
df["nivel_lag1"] = df["nivel_celda"].shift(1)
df["esp_lag1"] = df["dosificacion_espumante"].shift(1)
df["rec_media_4"] = df["recuperacion_cu"].rolling(4).mean()
df["score_media_4"] = df["score_riesgo"].rolling(4).mean()

# Objetivo: recuperación del siguiente registro
df["recuperacion_siguiente"] = df["recuperacion_cu"].shift(-1)

features = [
    "rec_lag1", "score_lag1", "nivel_lag1", "esp_lag1",
    "rec_media_4", "score_media_4", "flujo_aire", "ph", "p80"
]

data = df[features + ["recuperacion_siguiente"]].dropna()
X = data[features]
y = data["recuperacion_siguiente"]

# Separación temporal: primeras filas entrenan, últimas filas prueban
split = int(len(data)*0.8)
X_train, X_test = X.iloc[:split], X.iloc[split:]
y_train, y_test = y.iloc[:split], y.iloc[split:]

modelo = RandomForestRegressor(n_estimators=200, random_state=42)
modelo.fit(X_train, y_train)

pred = modelo.predict(X_test)
print("MAE:", mean_absolute_error(y_test, pred))

6. Pronosticar evento futuro

Tambien podemos crear una etiqueta futura para anticipar eventos.

df["evento_siguiente"] = df["evento_sobre_espumacion"].shift(-1)

# Luego se entrena un clasificador usando variables actuales y rezagadas
# para estimar si en el siguiente periodo podría aparecer el evento.
Advertencia: en series de tiempo no se debe mezclar aleatoriamente todo el histórico si eso permite que el futuro contamine el entrenamiento.

7. Lectura operativa

Un pronóstico corto sirve para preparar revisiones antes de que el indicador llegue tarde.

  • Si recuperación estimada baja: revisar variables de proceso.
  • Si score futuro sube: elevar nivel de atención.
  • Si nivel viene subiendo: revisar control, sensor y espuma.
  • Si evento futuro es probable: activar revisión operacional, no automatización ciega.

Mensaje final: pronosticar series de tiempo no es adivinar el futuro; es usar el pasado reciente para anticipar una conversación operativa.

← Lección anteriorDescargar datosContinuar Módulo 2 →