Saltar al contenido
Lecciones de Finanzas

Deep Learning para Datos de Mercado

Modelos recurrentes: RNN, LSTM y GRU

Leer una secuencia de mercado paso a paso — el modelo mental de la recurrencia y el desenrollado, el problema del gradiente que se desvanece o explota que tumba a las RNN simples, y cómo las puertas de LSTM y GRU construyen una autopista de información que sobrevive a una ventana larga.

16 min Actualizado 19 jun 2026

En la lección pasada vimos cómo un perceptrón multicapa tropezaba en finanzas: con un tamaño de muestra efectivo minúsculo (unos pocos cientos de regímenes no solapados escondidos tras miles de filas autocorrelacionadas), o memorizaba ruido o no aprendía nada. Pero el MLP tenía un pecado más profundo — trataba cada día como una bolsa desordenada de características. No sabía que el ayer venía antes que el hoy.

Los mercados son secuencias. Los rendimientos llegan en orden, la volatilidad se agrupa (vuestra lección de GARCH) y el shock de ayer se filtra hasta hoy. El arreglo natural es un modelo que lea la serie paso a paso, arrastrando una memoria en curso — un resumen de todo lo que ha visto hasta ahora. Eso es exactamente lo que hace una red neuronal recurrente. Si ayuda más de lo que perjudica es la pregunta que iremos pinchando.

La celda recurrente y el desenrollado

Before you read — take a guess

Una celda 'recurrente' procesa una secuencia de longitud T. ¿Cuántos conjuntos distintos de pesos entrenables usa a lo largo de los T pasos?

Una celda recurrente mantiene un estado oculto hth_t — su resumen mental hasta el momento — y lo actualiza a medida que llega cada nueva entrada xtx_t:

ht=tanh(Wxt+Uht1+b)h_t = \tanh\left(W x_t + U h_{t-1} + b\right)

Léelo de izquierda a derecha: la nueva entrada xtx_t se transforma con WW, la memoria antigua ht1h_{t-1} se transforma con UU, sumas un sesgo bb y lo aplastas con tanh\tanh para mantener los valores en [1,1][-1, 1]. Una salida (digamos, una predicción de rendimiento) se lee de hth_t mediante otra capa lineal. Las matrices WW, UU, bb son las mismas en cada paso — son la celda, y la celda es el modelo.

Analogía. Estás leyendo una frase. No relees todo el párrafo en cada palabra — mantienes una idea general en la cabeza y la actualizas con cada palabra nueva. ht1h_{t-1} es tu idea antes de la palabra actual, xtx_t es la palabra, hth_t es tu idea actualizada. “Desenrollar” no es más que dibujar a ese único lector como una cadena de copias, una por palabra — pero sigue siendo un solo lector, no un comité de TT lectores.

Ejemplo resuelto

Toma una celda de juguete escalar: W=0.5W = 0.5, U=0.8U = 0.8, b=0b = 0, y una secuencia de rendimientos x1=1.0x_1 = 1.0, x2=0.5x_2 = -0.5. Empieza con h0=0h_0 = 0.

  • Paso 1: h1=tanh(0.51.0+0.80)=tanh(0.5)0.462h_1 = \tanh(0.5 \cdot 1.0 + 0.8 \cdot 0) = \tanh(0.5) \approx 0.462.
  • Paso 2: h2=tanh(0.5(0.5)+0.80.462)=tanh(0.25+0.370)=tanh(0.120)0.119h_2 = \tanh(0.5 \cdot (-0.5) + 0.8 \cdot 0.462) = \tanh(-0.25 + 0.370) = \tanh(0.120) \approx 0.119.

Fíjate en que h2h_2 depende de x1x_1 solo a través de h1h_1 — la memoria es el canal por el que el pasado alcanza el presente. Rompe ese canal y la historia desaparece.

Unrolling a recurrent model — and watching the past fade
x1h1x2h2x3h3x4h4x5h5x6h6x7h7x8h8Input xₜHidden state hₜŷ
Step-1 info surviving at h_T3.5%

Una celda, desenrollada sobre T pasos: cada entrada x_t alimenta la celda oculta h_t, que también recibe una flecha de h_{t-1}. El sombreado muestra cuánto de la PRIMERA entrada sobrevive a lo largo de la cadena. Alterna RNN simple vs Con puertas y arrastra el deslizador de longitud.

Une cada concepto con su definición.

Warning:

Desenrollar no significa más parámetros

Un error típico de principiante: “Voy a desenrollar sobre 60 días, así que mi modelo tiene 60× la capacidad”. No. Desenrollar es una visualización de una sola celda compartida aplicada 60 veces. El número de parámetros es fijo independientemente de la longitud de la secuencia. Lo que crece con TT es el grafo de cálculo (y la memoria necesaria para retropropagar a través de él), no el número de pesos.

Cuándo usarlo

Recurre a la recurrencia cuando el orden lleva información de verdad y la misma regla de actualización local deba aplicarse en cada paso: flujo de órdenes tick a tick, barras intradía, una ventana móvil de rendimientos que alimenta una previsión del paso siguiente. Si tus características son un corte transversal desordenado (valor de hoy, momentum, puntuaciones de calidad para 500 acciones), la recurrencia no te aporta nada — ese es trabajo para el MLP o, más probablemente, para árboles potenciados por gradiente.

El gradiente que se desvanece (y explota)

Before you read — take a guess

Entrenar una RNN significa retropropagar la pérdida hacia atrás por cada paso temporal. ¿Qué operación matemática se acumula a medida que el gradiente viaja del paso T de vuelta al paso 1?

Para entrenar, retropropagamos la pérdida a través de la cadena desenrollada — retropropagación a través del tiempo (BPTT, backpropagation through time). La regla de la cadena dice que el gradiente de una pérdida tardía respecto a un estado oculto temprano es un producto de una jacobiana por paso:

hTht=k=t+1Thkhk1\frac{\partial h_T}{\partial h_t} = \prod_{k=t+1}^{T} \frac{\partial h_k}{\partial h_{k-1}}

Si cada factor tiene una magnitud aproximada de ρ\rho, el producto entero escala como ρTt\rho^{\,T-t}. Los productos de muchos números son implacables: un poco por debajo de 1 y se colapsan hacia cero (se desvanece); un poco por encima de 1 y detonan (explota).

Analogía. Un rumor susurrado que va pasando por una fila de personas. Si cada persona conserva el 60 % del mensaje, después de 20 personas casi nada del original sobrevive — eso es desvanecerse. Si cada persona lo exagera 1,2×, después de 20 personas tienes una teoría de la conspiración a gritos — eso es explotar.

Ejemplo resuelto

Supón que el factor típico por paso es ρ=0.6\rho = 0.6. A lo largo de T=20T = 20 pasos el gradiente hacia la primera entrada escala por

0.620=e20ln0.6=e20(0.511)=e10.23.6×105.0.6^{20} = e^{20 \ln 0.6} = e^{20 \cdot (-0.511)} = e^{-10.2} \approx 3.6 \times 10^{-5}.

El pasado lejano aporta esencialmente nada a la actualización de pesos — el modelo es estructuralmente ciego a dependencias más antiguas que un puñado de pasos. Ahora dale la vuelta: ρ=1.2\rho = 1.2 da 1.22038.31.2^{20} \approx 38.3, y a lo largo de 60 pasos 1.2605.6×1041.2^{60} \approx 5.6 \times 10^{4} — un gradiente que se desborda y produce pérdidas NaN.

Factor por paso ρ\rhoTras 10 pasosTras 20 pasosTras 60 pasosVeredicto
0.66.0×1036.0\times10^{-3}3.6×1053.6\times10^{-5}4.7×10144.7\times10^{-14}se desvanece
0.90.3490.1221.8×1031.8\times10^{-3}se atenúa
1.01.01.01.0filo del cuchillo
1.26.1938.35.6×1045.6\times10^{4}explota

El caso de la explosión tiene un parche barato — recorte de gradiente (gradient clipping): si la norma del gradiente supera un umbral τ\tau, lo reescalas a τ\tau antes de la actualización. Eso pone tope a la explosión. El desvanecimiento no tiene tal parche; no puedes reescalar un gradiente casi nulo de vuelta a algo informativo, porque la señal se ha ido, no solo la magnitud. Esa asimetría es la razón por la que la propia arquitectura tuvo que cambiar.

Rellena el modo de fallo y su remedio.

Elige la opción correcta para cada hueco y comprueba.

Cuando la magnitud de la jacobiana por paso queda por debajo de 1, el gradiente de BPTT geométricamente con la profundidad, lo que ; el caso por encima de 1 se domestica con .

Warning:

Ventanas largas no significan memoria larga

Alimentar una RNN simple con una ventana de 250 días no le da 250 días de memoria. Con ρ<1\rho < 1, su memoria efectiva es de solo unos pocos pasos; el resto de la ventana es decoración que ralentiza el entrenamiento y añade varianza. Si necesitas dependencia de largo alcance, la longitud de la ventana no es la palanca — la arquitectura de la celda lo es.

Vuelve a mirar la isla principal: activa RNN simple y arrastra el deslizador de longitud hacia fuera. Observa cómo el sombreado de la contribución de la primera entrada se desvanece hasta casi negro en una docena de pasos — eso es ρT\rho^{T} renderizado como opacidad.

Cuándo usarlo

Una RNN simple va bien cuando la dependencia genuina es corta (unos pocos pasos) y quieres un modelo de secuencia barato y de pocos parámetros — a veces una virtud en muestras financieras minúsculas. En cuanto sospeches de una dependencia que abarque decenas de pasos (un cambio de régimen lento, una acumulación de volatilidad de varios días), la RNN simple es la herramienta equivocada, y te gradúas a una celda con puertas.

LSTM: la autopista del estado de celda

Before you read — take a guess

¿Cuál es el cambio estructural clave en una LSTM que permite a los gradientes sobrevivir secuencias largas?

La celda de Memoria a Largo y Corto Plazo (LSTM, Long Short-Term Memory) mantiene dos estados: el habitual estado oculto hth_t y un estado de celda separado ctc_t — una cinta transportadora protegida para la información de largo plazo. Tres puertas sigmoideas (cada una emite valores en [0,1][0,1], es decir, “cuánto dejar pasar”) lo regulan:

  • Puerta de olvido ftf_t — cuánto del estado de celda antiguo conservar.
  • Puerta de entrada iti_t — cuánto del nuevo candidato escribir.
  • Puerta de salida oto_t — cuánto del estado de celda exponer como hth_t.

El candidato es c~t=tanh(Wcxt+Ucht1+bc)\tilde{c}_t = \tanh(W_c x_t + U_c h_{t-1} + b_c), y el estado de celda se actualiza de forma aditiva:

ct=ftct1+itc~t,ht=ottanh(ct)c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}_t, \qquad h_t = o_t \odot \tanh(c_t)

(\odot es la multiplicación elemento a elemento.) Esa suma es todo el truco. El camino de ct1c_{t-1} a ctc_t es aproximadamente multiplicar por ftf_t, y si la celda aprende ft1f_t \approx 1, el gradiente a lo largo de la cinta se multiplica por ~1 en cada paso en lugar de por ~ρ<1\rho < 1. La autopista de información se mantiene abierta.

Analogía. La RNN simple obliga a cada recuerdo a pasar por un mezclador tanh con pérdidas en cada paso — como fotocopiar una fotocopia. La LSTM añade un sobre sellado (el estado de celda) que puedes elegir llevar contigo intacto, abriéndolo (puerta de salida) o editándolo (puerta de entrada) solo cuando tú decidas.

Ejemplo resuelto

Compara la supervivencia de largo alcance de un factor simple frente a una puerta de olvido de LSTM. Supón que la celda aprende ft=0.97f_t = 0.97. A lo largo de 20 pasos la contribución del estado de celda escala por

0.9720=e20ln0.97=e20(0.03046)=e0.6090.54.0.97^{20} = e^{20 \ln 0.97} = e^{20 \cdot (-0.03046)} = e^{-0.609} \approx 0.54.

Aproximadamente la mitad de la señal sobrevive 20 pasos. El 0.6203.6×1050.6^{20} \approx 3.6\times10^{-5} de la RNN simple ya se ha desvanecido por seis órdenes de magnitud. Empuja hasta 60 pasos: 0.97600.160.97^{60} \approx 0.16 sigue siendo significativo, frente a 0.6604.7×10140.6^{60} \approx 4.7\times10^{-14} — muerto.

Pasos TTSimple 0.6T0.6^{T}LSTM 0.97T0.97^{T}
50.0780.859
203.6×1053.6\times10^{-5}0.544
604.7×10144.7\times10^{-14}0.161
1202.2×10272.2\times10^{-27}0.026

La puerta de olvido no está fijada en 0,97 — se aprende paso a paso, así que la celda puede mantener un recuerdo abierto a lo largo de un régimen y cerrarlo de golpe cuando el régimen se rompe. Esa adaptabilidad es lo que el ρT\rho^T en bruto nunca puede hacer.

Clasifica cada pieza según si pertenece a una RNN simple o es nueva en la LSTM.

Coloca cada elemento en su grupo.

  • Retención aprendida por paso cercana a 1
  • Puertas de olvido, entrada y salida
  • Pesos compartidos a lo largo del tiempo
  • Estado de celda aditivo c_t
  • Único estado oculto h_t a través de tanh
Warning:

Las puertas cuestan parámetros — y los parámetros cuestan muestras

Una LSTM tiene aproximadamente 4× los parámetros recurrentes de una RNN simple (un conjunto de pesos por puerta más el candidato). Con los tamaños de muestra efectivos minúsculos de la lección 1, esa capacidad extra es un arma de doble filo: resuelve el desvanecimiento pero invita al sobreajuste. Un modelo de secuencia más potente sobre 300 observaciones efectivas todavía puede memorizar ruido — exactamente la trampa que martilleó la lección anterior.

Cuándo usarlo

Usa una LSTM cuando tengas dependencia de largo alcance genuina y datos suficientes para alimentar los parámetros extra — series de alta frecuencia o intradía donde las muestras abundan, o secuencias donde mantener un estado abierto durante decenas de pasos importe claramente. Sobre unos pocos cientos de regímenes diarios no solapados, una LSTM suele estar sobrearmada; regulariza con agresividad o recurre al primo más esbelto de abajo.

GRU: el primo simplificado

Before you read — take a guess

Frente a una LSTM, la Unidad Recurrente con Puertas (GRU) se diferencia principalmente por...

La GRU es la LSTM después de una dieta. Mantiene un único vector de estado (sin estado de celda separado) y usa solo dos puertas:

  • Puerta de actualización ztz_t — cuánto del estado antiguo conservar frente a sobrescribir (hace el trabajo de olvido y de entrada a la vez).
  • Puerta de reinicio rtr_t — cuánto del estado pasado dejar entrar en el nuevo candidato.

h~t=tanh ⁣(Wxt+U(rtht1)+b),ht=(1zt)ht1+zth~t\tilde{h}_t = \tanh\!\big(W x_t + U (r_t \odot h_{t-1}) + b\big), \qquad h_t = (1 - z_t)\odot h_{t-1} + z_t \odot \tilde{h}_t

Esa mezcla convexa ht=(1zt)ht1+zth~th_t = (1-z_t)h_{t-1} + z_t\tilde{h}_t es la autopista de la GRU: cuando zt0z_t \approx 0 el estado se arrastra casi intacto (memoria larga), cuando zt1z_t \approx 1 se reescribe por completo (reacciona a un shock). El mismo truco del camino aditivo que la LSTM, con menos piezas móviles.

Analogía. Si la LSTM es un coche con acelerador, freno y una guantera sellada por separado, la GRU es un coche eléctrico con un único pedal regenerativo que acelera y frena a la vez. Menos controles, normalmente igual de buena la conducción.

Ejemplo resuelto

El número de parámetros es el titular. Para un tamaño oculto HH y un tamaño de entrada DD, los bloques recurrentes necesitan aproximadamente:

CeldaBloques de puerta/candidatoParámetros aprox.
RNN simple1H(D+H)+HH(D+H) + H
GRU3 (reinicio, actualización, candidato)3[H(D+H)+H]3\,[H(D+H)+H]
LSTM4 (olvido, entrada, salida, candidato)4[H(D+H)+H]4\,[H(D+H)+H]

Con D=10D = 10 entradas y H=32H = 32 unidades ocultas, un bloque es 32(10+32)+32=137632(10+32)+32 = 1376. Así que GRU 4128\approx 4128 y LSTM 5504\approx 5504 parámetros recurrentes — la GRU ahorra ~25 %. En un conjunto de datos con unos pocos cientos de observaciones efectivas, cada parámetro que no tienes es un parámetro que no puedes sobreajustar. Por eso las GRU frecuentemente igualan o superan a las LSTM en series financieras pequeñas y ruidosas a pesar de ser “menos potentes”.

Una GRU tiene menos parámetros que una LSTM, así que debe ser estrictamente más débil. Verdadero o falso — ¿y por qué importa en finanzas?

Respuesta. Falso. “Más débil” solo importa si la capacidad extra de la LSTM se usa de forma productiva. En las muestras efectivas minúsculas de las finanzas, los parámetros extra de la LSTM ajustan ruido más a menudo que señal. El espacio de hipótesis más pequeño de la GRU es un regularizador incorporado, así que a menudo generaliza mejor fuera de muestra. La capacidad solo es un activo cuando tienes los datos para disciplinarla — la lección central del capítulo anterior.

Cuándo usarlo

Opta por la GRU sobre la LSTM por defecto cuando los datos sean escasos y quieras puertas sin la hinchazón de parámetros — lo que describe la mayoría de los problemas financieros de frecuencia diaria. Prefiere la LSTM solo cuando tengas datos abundantes y empíricamente descubras que su puerta extra se gana su sitio (a veces cierto en secuencias muy largas y ricas en información, como flujos completos de libro de órdenes).

¿Ayudan realmente las RNN en finanzas?

Before you read — take a guess

En la mayoría de las tareas de previsión financiera de frecuencia diaria, ¿cómo suelen comportarse las LSTM/GRU frente a los árboles potenciados por gradiente?

Aquí viene la parte aleccionadora. Todo lo de arriba es elegante — y en la mayoría de los problemas financieros, una RNN todavía pierde frente a un árbol potenciado. ¿Por qué?

  • Muestra efectiva minúscula (vuelta a la lección 1). Recuerda: miles de filas diarias autocorrelacionadas colapsan a unos pocos cientos de regímenes independientes y no solapados. Las redes recurrentes tienen más parámetros que un MLP y los mismos datos famélicos — el riesgo de sobreajuste sube, no baja.
  • Entrenamiento secuencial, no paralelizable. BPTT debe procesar los pasos en orden; no puedes paralelizar a lo largo del eje del tiempo como sí pueden un Transformer o un barrido de divisiones de árbol. El entrenamiento es lento, lo que significa menos experimentos, lo que significa más sobreajuste vía grados de libertad del investigador (tus instintos de Sharpe deflactado deberían estar haciendo tic).
  • Los árboles y las TCN te comen el bocadillo. Los árboles potenciados por gradiente devoran características de rezago diseñadas y son tremendamente eficientes en muestras. Las Redes Convolucionales Temporales (TCN, convoluciones causales dilatadas) consiguen campos receptivos largos con paralelismo total y a menudo mejor estabilidad que las RNN.

¿Dónde se ganan de verdad su sitio las redes recurrentes? Datos grandes, estructurados y de mayor frecuencia con rica microestructura secuencial: secuencias de libro de órdenes (LOB), flujos de ticks, secuencias de eventos intradía — lugares donde las muestras abundan y el orden de los micro-eventos lleva señal de verdad. Allí el problema de la muestra efectiva se alivia y el sesgo inductivo de secuencia rinde.

Overfitting: backtest soars, live performance collapses
In-sample (backtest)Out-of-sample (live)
Model complexity / strategies triedApparent performance
gap9%

La pérdida dentro de muestra sigue cayendo a medida que sube la complejidad del modelo, pero la pérdida fuera de muestra repunta — y una LSTM de alta capacidad sobre unos pocos cientos de observaciones efectivas se sitúa bien a la derecha del punto óptimo.

Warning:

El IC dentro de muestra de una RNN te deslumbrará. Ignóralo.

Una red recurrente flexible puede exhibir un coeficiente de información dentro de muestra precioso — y un IC fuera de muestra deflactado, purgado, cercano a cero. Evalúa siempre con validación cruzada walk-forward purgada y con embargo (Aprendizaje Automático para el Alfa), reporta el Sharpe deflactado y presupuesta tus ensayos. Si una RNN no puede superar a un GBM regularizado en números honestos fuera de muestra, no se despliega.

Cuándo usarlo

Usa un modelo recurrente en finanzas cuando (1) los datos sean de alta frecuencia o por lo demás grandes en muestra efectiva, (2) la microestructura secuencial plausiblemente lleve señal, y (3) ya hayas confirmado que una línea base más simple (lineal regularizada, GBM, TCN) no domina. Si no, el valor por defecto honesto es: empieza con árboles, y haz que la RNN demuestre que aporta valor fuera de muestra. Regulariza con dureza en cualquier caso — dropout, decaimiento de pesos, tamaños ocultos minúsculos, ventanas cortas.

¿Cuáles de estas son razones legítimas por las que las RNN suelen rendir por debajo en datos financieros de frecuencia diaria? (Selecciona todas las que apliquen.)

Repaso

Big picture

Modelos recurrentes para secuencias de mercado

  • Modelos recurrentes
    • Celda recurrente
      • h_t = tanh(Wx + Uh_{t-1} + b)
      • Desenrollar = una celda compartida, T copias
    • Desvanece/explota
      • BPTT = producto de jacobianas ≈ ρ^T
      • ρ<1 se desvanece; ρ>1 explota (recorta)
    • LSTM
      • Estado de celda aditivo c_t
      • Puerta de olvido ≈1 mantiene abierta la autopista
    • GRU
      • Puertas de reinicio + actualización, un estado
      • Menos params → menos sobreajuste
    • En finanzas
      • Muestra efectiva minúscula; BPTT lenta
      • Brilla con datos de LOB/alta frecuencia
De la celda recurrente compartida a las autopistas con puertas y al baño de realidad de las finanzas.

Modelos recurrentes — repaso mixto

Pregunta 1 de 50 correct

La magnitud de la jacobiana por paso de una RNN simple es de unos 0,9. ¿Qué fracción del gradiente sobrevive aproximadamente 20 pasos hacia atrás?

Comprueba tu respuesta para continuar.

Marcar lección como completada