Neural Network Training Labs
Laboratorio 05 · Central · 6 / 31

📈 LSTM para series temporales

LSTM para series temporales

Objetivo

Pronosticar demanda horaria respetando el orden temporal.

Dataset real

8.760 observaciones reales de arriendo de bicicletas y clima en Seúl.

Fundamento matemático

Puertas input, forget y output de una LSTM.

Protocolo experimental

  1. Descargar y verificar la procedencia.
  2. Conservar o crear una partición reproducible.
  3. Ajustar transformaciones únicamente con train.
  4. Seleccionar modelo e hiperparámetros usando validation.
  5. Evaluar test una sola vez tras congelar la decisión.
  6. Comparar con la línea base: Persistencia, media móvil y Ridge.
  7. Guardar configuración, entorno, métricas, predicciones, gráficos y modelo.

Ejecución

python labs/05_lstm_time_series/train.py --quick
python labs/05_lstm_time_series/train.py --config improved

Preparar únicamente el dataset:

python -m neural_labs.cli dataset --lab 05_lstm_time_series

Inferencia y exportación:

neural-labs predict --lab 05_lstm_time_series --run latest --input sample.json
neural-labs export --lab 05_lstm_time_series --run latest --format onnx --verify

Métricas

mae, rmse, mape, r2.

Archivos

Ejercicios

Material formativo v3

Comandos profesionales

neural-labs quality --lab 05_lstm_time_series --quick
neural-labs benchmark --lab 05_lstm_time_series --quick --split-seed 42 --training-seeds 41 42 43
neural-labs leaderboard

Sellado del experimento

La partición se controla con split_seed; la inicialización y el entrenamiento con training_seed. El conjunto test se abre solamente después de seleccionar el checkpoint mediante validación y escribir experiment.lock.json.

🧠 Teoría

Teoría — LSTM para series temporales

Propósito

Pronosticar demanda horaria respetando el orden temporal.

Idea central

Este laboratorio estudia memoria recurrente para pronóstico temporal usando seoul_bike, un dataset público real procedente de UCI.

Este laboratorio ataca directamente la limitación descubierta con las RNN simples: su incapacidad para retener información a lo largo de muchos pasos por el desvanecimiento del gradiente. La LSTM (Long Short-Term Memory) introduce un canal de memoria protegido —el estado de celda cₜ— y un sistema de puertas que deciden, de forma aprendida, qué información conservar, qué olvidar y qué exponer en cada instante. El resultado es una memoria capaz de sostener patrones a largo plazo (ciclos diarios y semanales de demanda) sin que el gradiente se disipe.

El problema es un pronóstico de series temporales genuino: predecir la demanda horaria de bicicletas compartidas en Seúl a partir de su historia reciente y variables climáticas, sobre 8.760 observaciones reales. A diferencia de la clasificación, aquí el orden temporal es sagrado: la partición no puede mezclar futuro con pasado, y las líneas base (persistencia, media móvil, Ridge) son duras de batir. La pregunta crítica —si el modelo supera a la persistencia en períodos de cambio— pone el foco donde un pronosticador realmente demuestra su valor.

Fundamento matemático

La LSTM mantiene dos estados que viajan en el tiempo: el estado oculto hₜ (la salida en cada paso) y el estado de celda cₜ (la memoria a largo plazo). En cada instante, tres puertas —vectores con valores en (0, 1) producidos por sigmoides σ— regulan el flujo de información. Con la concatenación de la entrada xₜ y el estado previo hₜ₋₁:

Puerta de olvido: fₜ = σ(W_f·[hₜ₋₁, xₜ] + b_f)

Puerta de entrada: iₜ = σ(W_i·[hₜ₋₁, xₜ] + b_i)

Candidato de memoria: c̃ₜ = tanh(W_c·[hₜ₋₁, xₜ] + b_c)

Puerta de salida: oₜ = σ(W_o·[hₜ₋₁, xₜ] + b_o)

La actualización del estado de celda es el corazón del mecanismo y combina las puertas mediante el producto elemento a elemento ⊙:

cₜ = fₜ ⊙ cₜ₋₁ + iₜ ⊙ c̃ₜ

hₜ = oₜ ⊙ tanh(cₜ)

La lectura es intuitiva: la puerta de olvido fₜ decide qué fracción de la memoria vieja cₜ₋₁ se conserva (fₜ ≈ 1 recuerda, fₜ ≈ 0 borra); la puerta de entrada iₜ decide cuánto del nuevo candidato c̃ₜ se escribe; y la de salida oₜ decide qué parte de la memoria se expone como estado oculto. Cuando la red aprende fₜ ≈ 1, el estado de celda actúa como una cinta transportadora por la que la información —y el gradiente— fluye a través de muchos pasos casi sin atenuarse. Esa suma cₜ = fₜ ⊙ cₜ₋₁ + … es precisamente lo que evita el producto de jacobianos que desvanecía el gradiente en la RNN simple: la ruta aditiva mantiene ∂cₜ/∂cₜ₋₁ ≈ fₜ en lugar de un factor que se contrae exponencialmente.

Una alternativa más ligera es la GRU (Cho et al. 2014), que fusiona las puertas de olvido y entrada en una sola puerta de actualización y prescinde del estado de celda separado, con menos parámetros y rendimiento a menudo comparable. Para el pronóstico, la salida h_T (o la de cada paso) pasa por una capa densa que produce el valor real predicho, y el entrenamiento minimiza un error de regresión como el MSE, L = (1/N) Σᵢ (ŷᵢ − yᵢ)². La evaluación reporta MAE, RMSE, MAPE y R², siempre comparando contra las líneas base clásicas de series temporales.

La formulación debe conectarse con cuatro elementos: representación de entrada, función del modelo, función de pérdida y regla de actualización. El notebook muestra las dimensiones de los tensores y conserva la misma implementación que el script de terminal.

Protocolo científico

Riesgos de interpretación

8.760 observaciones reales de arriendo de bicicletas y clima en Seúl.

El dataset refleja su proceso de recolección y no representa automáticamente otros períodos, países o poblaciones. Una asociación predictiva no demuestra causalidad.

Pregunta crítica

¿El modelo supera persistencia en períodos de cambio?

🔗 Referencias

Las referencias apuntan a las obras; no se reproduce su contenido, la redacción es original.

🔬 Experimentos

Plan de experimentos — LSTM para series temporales

Hipótesis principal

Pronosticar demanda horaria respetando el orden temporal. La hipótesis debe aceptarse o rechazarse comparando el modelo con Persistencia, media móvil y Ridge y no solo observando que la pérdida disminuye.

Experimento mínimo

  1. Ejecutar baseline.yaml con tres semillas.
  2. Ejecutar improved.yaml con las mismas semillas.
  3. Mantener fija la partición de datos dentro de cada semilla.
  4. Elegir la variante con validation.
  5. Comparar la variante elegida contra la línea base en test.
  6. Revisar intervalos de confianza, errores y costo computacional.

Experimento específico

Comparar ventanas, variables y horizonte.

Variables controladas

Tabla que debe completarse

Variante Semilla Métrica validation Métrica test Tiempo Parámetros Observación
baseline 41
baseline 42
baseline 43
improved 41
improved 42
improved 43

Criterio de conclusión

La conclusión debe declarar magnitud de la mejora, incertidumbre, costo adicional, errores relevantes y condiciones bajo las cuales el resultado podría no repetirse.

📝 Evaluación

Evaluación — LSTM para series temporales

Evidencias obligatorias

Preguntas

  1. Explique con sus palabras: Puertas input, forget y output de una LSTM.
  2. ¿Qué información del dataset solo puede utilizarse durante entrenamiento?
  3. ¿Por qué la línea base Persistencia, media móvil y Ridge es una comparación razonable?
  4. ¿El modelo supera persistencia en períodos de cambio?
  5. ¿Qué cambiaría antes de usar este modelo fuera del laboratorio?

Rúbrica

Criterio Insuficiente Adecuado Excelente Peso
Integridad de datos mezcla particiones separación correcta auditoría, hashes y justificación 20%
Implementación no ejecuta entrena y evalúa código claro, reusable y probado 20%
Diseño experimental resultado aislado comparación controlada multi-semilla e incertidumbre 20%
Análisis repite métricas interpreta errores identifica sesgos, límites y costo 25%
Comunicación incompleta reporte entendible model card y conclusiones verificables 15%

La aprobación exige al menos 70% y cero errores críticos de fuga de datos.