Setup. Esta es la serie con la que trabajará todo el día: demanda semanal de un SKU de Inditex durante T = 156 semanas (3 años), generada con el modelo del panel de ecuaciones y semilla reproducible (mulberry32). Arriba: la serie completa, con la parte determinista en dorado y los datos observados en tinta. Abajo: la descomposición en tendencia, estacionalidad y ruido, cada una en su banda.
Juega. Los tres sliders controlan los tres componentes. La pregunta de negocio es siempre la misma: ¿cuánta de la variación de la serie es estructura aprendible (tendencia + estación) y cuánta es ruido que ningún modelo va a predecir? El lector da la desviación típica de la parte determinista, la del ruido y su cociente: la razón señal/ruido.
Lee así. Si la señal domina (cociente alto), un modelo simple ya hará buen forecast; si el ruido domina, ni el mejor LSTM bajará el error por debajo de s. Saber dónde está ese suelo evita prometer MAPEs imposibles al negocio.
Mensaje. Producir de más cuesta stock muerto y rebajas; producir de menos cuesta venta perdida. Cada punto de MAPE en Inditex se estima en 8–12 M€/año. Todo lo que sigue (RNN, LSTM, GRU) son máquinas para exprimir la parte aprendible de esta curva.
Términos. SKU: referencia concreta de producto. Estacionalidad: patrón que se repite con período fijo (aquí 52 semanas). Razón señal/ruido: sd(parte determinista)/sd(ruido); mide cuánto hay que aprender frente a cuánto es azar.
Setup. Tomo la serie de demanda de la slide anterior (parámetros fijos: g = 0.3, A = 18, s = 6, misma semilla), la normalizo a x̃t = (xt−media)/sd, y ejecuto de verdad la recurrencia escalar ht = tanh(Whht−1 + Wxx̃t + b) con h0 = 0 durante las primeras 60 semanas. Arriba: x̃t (tinta) y ht (dorado). Abajo: la curva tanh con un punto por cada pre-activación at visitada; la franja |a| > 2 es la zona saturada.
Juega. Wh gradúa cuánto pesa la nota anterior; Wx, cuánto pesa la semana nueva; b desplaza el punto de trabajo. El lector muestra h60, el % de pasos con |at| > 2 y la correlación entre ht y x̃t.
Lee así. ht es un resumen de TODO el pasado en un solo número (en la práctica, un vector de dh números). La calidad del forecast depende de que ese resumen retenga lo útil; los dos paneles te enseñan los dos enemigos: saturación (abajo) y memoria mal dosificada (arriba).
Mensaje. Una RNN es alguien que lee el informe de ventas semana a semana y va actualizando sus notas mentales con la misma regla cada semana. La siguiente slide pregunta: ¿cuánto recuerda esa regla de lo que pasó hace 30 semanas? La respuesta es el defecto estructural que motiva la LSTM.
Términos. ht: estado oculto, memoria de trabajo. Pre-activación at: lo que entra a la tanh. Saturación: zona donde tanh ≈ ±1 y su derivada ≈ 0. Pesos compartidos: Wh, Wx, b idénticos en los T pasos.
Setup. Ejecuto la recurrencia escalar de la slide anterior (Wx = 0.4, b = 0, demanda normalizada, semilla fija) durante T semanas y calculo exactamente el gradiente ∂hT/∂hT−L = ∏ Wh(1−hj²) para cada retardo L. Arriba: |gradiente| frente al retardo, en escala log10, con la franja [10−3, 103] marcada como zona sana. Abajo: el factor de cada paso |Wh·tanh′(aj)| con la línea crítica en 1.
Juega. Wh controla el factor común del producto; T, cuántos factores se multiplican. El badge clasifica el régimen según el gradiente al máximo retardo: DESVANECE (< 10−3), SANO, o EXPLOTA (> 103).
Lee así. En escala log un producto es una suma: cada paso añade log|Whtanh′| a la altura. Por eso la curva es casi una recta y su pendiente es el log del factor medio. La geometría del problema queda desnuda: no es un bug de implementación, es la estructura multiplicativa de la cadena.
Mensaje. Para el negocio: una RNN básica entrenada sobre ventanas de 52 semanas no aprenderá la estacionalidad anual, porque el gradiente que conecta la Navidad de este año con la del anterior llega multiplicado por ≈ 10−10. La solución no es otro optimizador: es cambiar la célula. Dos slides más y la tendrás.
Términos. BPTT: backpropagation through time, la regla de la cadena aplicada a la recurrencia desplegada. Desvanecimiento / explosión: decaimiento / crecimiento exponencial del gradiente con el retardo. Gradient clipping: truncar la norma del gradiente; cura la explosión, no el desvanecimiento.
Setup. Arriba: la curva στ(z) con el punto de trabajo actual y, en gris, su derivada. Abajo: una memoria de 8 componentes (el vector C, barras tinta, valores fijos que representan "lo aprendido hasta hoy": nivel de demanda, fase estacional, efecto promo…) y el resultado de multiplicarla por στ(z) (barras doradas). Es literalmente la operación ft ⊙ Ct−1 de la LSTM, con la puerta compartida.
Juega. z simula lo que la red calcularía a partir del contexto: Wf[ht−1, xt] + bf. En la LSTM real cada componente de la memoria tiene su propio z (su propia fila de Wf), así que la red puede conservar el componente "estacionalidad" y borrar el componente "promo puntual" a la vez.
Lee así. El lector muestra σ(z), el % de señal que pasa, y la derivada σ′(z) = σ(1−σ)/τ. La derivada es la "entrenabilidad" de la puerta en ese punto: en los extremos la puerta está decidida y ya no aprende; cerca de 0.5 está indecisa pero maximalmente educable.
Mensaje. Caso churn telco del curso: una puerta aprendida puede decidir "si el cliente acaba de llamar a soporte (xt), olvida la inercia de silencio acumulada". Las tres puertas de la LSTM (olvido, entrada, salida) son tres copias de este mecanismo con pesos distintos. La siguiente slide las ensambla.
Términos. σ: sigmoide, fracción de paso en (0, 1). ⊙: producto de Hadamard, componente a componente. τ: temperatura, brusquedad de la decisión. [ht−1, xt]: concatenación de memoria de trabajo y entrada nueva, el "contexto" que mira la puerta.
Setup. LSTM escalar con los pesos del deck: Wf = 0.5, Wi = 0.8, WC = 0.7, Wo = 0.6 (cada peso multiplica a ht−1 y a xt), sesgos bf = 0.1, bi = −0.1, bC = 0, bo = 0.2, estado inicial h0 = C0 = 0. La secuencia de entrada empieza con los x1 = 1.0 y x2 = 0.5 del deck y sigue 6 pasos más (una mini serie de demanda normalizada). El canvas pinta Ct (dorado), ht (tinta) y xt (gris); la tabla da las seis columnas por paso.
Juega. Los tres pares checkbox + slider hacen un experimento imposible en una red entrenada: fijar una puerta a mano en todos los pasos y ver qué papel jugaba. Forzar f es decidir cuánto pasado sobrevive; forzar i, cuánto presente entra; forzar o, cuánto se publica.
Lee así. La fila t = 1 de la tabla reproduce el ejemplo a mano del deck (redondeos incluidos); el resto de filas es la misma cuenta iterada. El lector resume C8, h8 y la media de cada puerta.
Mensaje. En el forecast de demanda, f aprende a conservar la fase estacional, i aprende a dejar entrar el efecto de una promo, y o aprende a no contaminar la predicción de esta semana con memoria irrelevante. Tres decisiones de negocio, tres puertas, una célula.
Términos. ft, it, ot ∈ [0,1]: puertas de olvido, entrada y salida. C̃t: candidato, contenido nuevo propuesto. Ct: célula, memoria de largo plazo. ht: estado oculto publicado, lo que ven las capas siguientes.
Setup. Aíslo el mecanismo estrella de la LSTM. Arriba: la célula como cinta transportadora: inyecto un pulso C̃1 = 1 ("una promo excepcional en la semana 1") y dejo correr Ct = f·Ct−1 + i·C̃t durante 40 semanas con puertas fijas (las demás C̃t traen ruido pequeño de demanda). Abajo: |gradiente| frente al retardo L en escala log, para la LSTM (∏f = fL, dorado) y para la RNN rival (∏Wh(1−h²) calculado sobre la recurrencia real con demanda normalizada, tinta).
Juega. f es la tasa de retención de la cinta; i, cuánto ruido nuevo se sube a ella; Wh mueve a la RNN rival entre sus dos únicos destinos (desvanecerse o explotar).
Lee así. En el panel log, la LSTM es una recta de pendiente log f, ajustable hasta pendiente 0; la RNN es una recta cuya pendiente no puedes anular porque tanh′ < 1 siempre. Mismo gráfico, dos geometrías: ese es el teorema visual del día.
Mensaje. "La célula Ct es un canal de gradiente": la frase del deck, demostrada con el producto calculado en vivo. Por esto la LSTM aprende la estacionalidad anual (retardo 52) que a la RNN básica le llega con gradiente 10−10.
Términos. Cinta transportadora: la línea Ct−1 → Ct, solo multiplicada por f y sumada con i·C̃. Camino aditivo: actualización sin no-linealidad que aplaste el estado. ∏fj: jacobiano acumulado de la célula, controlado por la red.
Setup. Las fórmulas de la GRU están en el panel; aquí se cuantifica la diferencia de tamaño. Arriba: parámetros por capa de RNN, GRU y LSTM para los dh y d de los sliders (barras, con la memoria en KB/MB para float32 = 4 bytes por parámetro). Abajo: parámetros frente a dh en escala log-log, con tu dh marcado: las tres curvas son paralelas (misma pendiente 2), separadas por los factores 1, 3, 4.
Juega. El conteo es exacto, no aproximado: P = dh(dh+d)+dh por bloque (matriz sobre la concatenación más sesgo), por el número de bloques de cada arquitectura. Es el mismo número que te daría sum(p.numel() for p in model.parameters()) en PyTorch para una capa.
Lee así. El coste en memoria casi nunca es el problema (ni un MB); el problema es la razón parámetros/datos. El lector la calcula para un histórico de 156 semanas: cuando supera ≈ 10, enciende la alarma de sobreajuste.
Mensaje. "Si dudas entre LSTM y GRU, prueba GRU primero: menos parámetros, menos riesgo" (deck). En forecasting de retail el dataset por SKU es corto: el 25% de ahorro no es elegancia, es regularización.
Términos. zt: puerta de actualización (cuánto se renueva). rt: puerta de reset (cuánto pasado consulta el candidato). P: parámetros de un bloque puerta/candidato. float32: 4 bytes por parámetro.
Setup. La misma serie de demanda de todo el día. Arriba: la serie con el ejemplo elegido resaltado: caja dorada = las W semanas de entrada, punto dorado = la etiqueta xt+1. Abajo: el dataset entero como matriz de color (cada fila un ejemplo, cada columna un lag; rampa blanco→dorado→sepia = demanda baja→alta), con la columna etiqueta separada por la línea vertical y la franja de test marcada a la derecha.
Juega. W controla cuánto pasado ve cada ejemplo. La estacionalidad anual necesita W ≈ 52 para ser visible en la ventana… o un modelo con memoria (LSTM) que la arrastre en su estado: esa es la diferencia profunda entre ensanchar la ventana y tener célula.
Lee así. El lector da |DW| = T−W, la forma de la matriz X y el reparto train/test (124/32 menos los W de arranque). La matriz de abajo ES el tensor que entra a nn.LSTM, aplastado a 2D para poder mirarlo.
Mensaje. Todo el aparato de los días 02–05 (datasets, train/test, MLP, regresión) se recicla: la serie temporal solo necesitaba este puente. La siguiente slide entrena de verdad un modelo sobre estas filas.
Términos. Lag: valor retardado xt−j usado como feature. W: tamaño de ventana. Fuga de información: que el test contamine el train por solapamiento temporal. batch_first: convención PyTorch (batch, T, features).
Setup. Entrenamiento real en el navegador: con la serie del día construyo el dataset de ventanas, corto por fecha (test = últimas 32 semanas), resuelvo la regresión AR(W) exacta sobre el train y predigo el test a un paso. Arriba: demanda real del test (tinta) frente a la producción decidida x̂t+s (dorado); las zonas sombreadas marcan faltantes (venta perdida) y sobrantes (rebaja). Abajo: el coste total del test en función del colchón s, con tu s actual (punto) y el mínimo (marca).
Juega. W cambia el modelo (se re-entrena al instante); s, cu y co cambian la decisión y su precio. Los dos planos — estadístico y económico — se mueven por separado a propósito.
Lee así. El lector da MAE y MAPE de test, el coste anual en euros con tu s, y el s* teórico del newsvendor: el percentil cu/(cu+co) de los errores de forecast en train. Que el valle empírico y s* coincidan razonablemente es la teoría funcionando.
Mensaje. Este AR lineal es el baseline que la práctica del curso (Online Retail II) obliga a batir con la LSTM de PyTorch del deck. Si la LSTM no lo supera en MAPE de test, ARIMA/ETS o este AR son la opción honesta: las features exógenas (promo, precio, calendario), no la arquitectura, suelen ser lo que desequilibra la balanza.
Términos. AR(W): modelo autorregresivo de orden W. MAE / MAPE: error absoluto medio / porcentual medio. cu, co: coste unitario de faltante (understock) y sobrante (overstock). Newsvendor: el colchón óptimo es el cuantil cu/(cu+co) del error.
Setup. El mismo AR(W) de la slide anterior, ahora pidiendo h semanas de golpe. Arriba: el final del train (tinta), la demanda real del test (gris), la trayectoria recursiva (dorado) y la directa (dorado profundo, discontinua) desde la última semana de train. Abajo: MAPE por horizonte k, promediado sobre todos los anclajes posibles dentro del test (cada anclaje hace su forecast de h pasos y se agregan los errores absolutos por k): es una evaluación honesta, no una sola trayectoria con suerte.
Juega. h fija cuántas semanas hacia delante pides; W, cuánto pasado real ve el modelo. Los dos modelos se re-entrenan al mover W: la directa ajusta h regresiones, una por horizonte.
Lee así. La pendiente de MAPE(k) es el precio del futuro: plana cerca de k = 1 y creciente después, pero las dos estrategias fallan por causas distintas. La recursiva acumula sus propios errores (su joroba en horizontes medios); la directa pierde datos efectivos y extrapola fuera de rango en horizontes largos. La estacionalidad, que el AR iterado extrapola bien, es quien re-engancha a la recursiva; el ruido s marca el suelo común de ambas curvas.
Mensaje. "Multipaso: recursiva o directa" (nota técnica), ya no como definición sino como decisión medida en vivo: ninguna domina en todos los plazos, así que se elige mirando la curva MAPE(k) en el horizonte donde tu decisión vive. Y el puente al Día 07: un Transformer con atención predice horizontes largos mirando directamente las semanas relevantes del pasado, sin arrastrar un estado paso a paso.
Términos. Horizonte h: nº de pasos a futuro pedidos. Anclaje: semana desde la que se lanza un forecast multipaso. Recursiva: 1 modelo realimentado. Directa: h modelos, uno por horizonte.
En una frase. Las redes recurrentes convierten "el pasado" en un estado que viaja; las puertas de la LSTM/GRU deciden qué sobrevive en ese estado, arreglando el gradiente por diseño; y un forecast solo vale lo que valen los euros de las decisiones que alimenta. Próximo día: la atención sustituye al estado viajero mirando directamente las semanas relevantes.