3 votos

Escalado (preparación de datos) y selección de características para los datos financieros para modelos LSTM

Visión general

Estoy entrenando un índice por ejemplo FTSE100, donde tengo 8 años de datos pasados (diarios). También tengo una lista de sus componentes.

Para cada acción, tengo las siguientes características: Fecha, Apertura, Cierre, Máximo, Mínimo, Volumen Comerciado

ESCALADO

Decidí predecir si comprar/vender el índice. En lugar de utilizar valores de cierre, decidí optimizar para el porcentaje de cambio, por lo tanto, creé una nueva variable porcentaje_cambio, que no está limitada por 1. ¿Esto hace que sea una métrica mala, y debería utilizar precios de cierre en su lugar?

¿Por qué no utilicé valores de cierre?

No estaba seguro de cómo escalarlo para ejecutarlo correctamente. Actualmente, la entrada de mi modelo son los 10 cambios porcentuales anteriores, por ejemplo, [t0, t1, ... , t10] prediciendo [t11] donde ti es el cambio porcentual en el día i.

Si utilizara el escalado, constantemente me encontraría con nuevos valores. Además, si mañana llega un nuevo máximo histórico, necesitaré reescalar los datos y volver a entrenar el modelo.

Además, pensé en reemplazar el porcentaje de cambio por el índice real denotado por pi. Pensé en escalar solo el período de ventana móvil [p0, p1, ... , p10], sin embargo, el predictor [p11] podría estar fuera del límite de 1.

Pregunta: ¿Maneja LSTM fácilmente entradas y salidas > 1?

SELECCIÓN DE CARACTERÍSTICAS

Por favor, aconséjeme qué variable independiente usar: porcentaje de cambio o precio de cierre (y cómo debería escalarlo). He entrenado el modelo en 2500 observaciones (500 épocas) dándome un 53% de precisión en el conjunto de pruebas (¿es bueno?). También obtuve un retorno del 30% en 600 días de prueba. Actualmente, las únicas características que estoy usando son las tasas de cambio de los últimos 10 días.

¿Qué características aprendió mi modelo?

No estoy seguro. ¿Aprendió medias móviles, gradientes lineales/aproximaciones de volatilidad, etc.? ¿O debería incluirlos en mi modelo como [t0, t1, ... , t10, MA10días, MA3días, Gradiente3días, Volatilidad3días]?

ENTRENANDO EL MODELO

Dado que tengo 100 componentes, ¿tendría sentido ejecutar/pre-entrenar el mismo modelo en todas estas acciones? Todas las acciones están altamente correlacionadas con el índice, y pensé en calcular medias móviles, gradientes, etc. para cada uno de los Cierre, Apertura, Máximo, Mínimo y luego ejecutar PCA para seleccionar solo unos pocos componentes.

SI LLEGASTE HASTA AQUÍ

Sé que esta es una larga pregunta y te agradezco por cualquier ayuda dada, ¡recompensaré los 100 puntos que tengo por la mejor respuesta! Gracias

0 votos

Pregunta: ¿LSTM maneja fácilmente entradas y salidas > 1? Sí, si no es muy diferente de 1. Todos los parámetros en una red neuronal deben estar entre 1 y -1. No puedes introducir los precios directamente, siempre tienes que normalizar. Pregunta 2: ¿Qué características tienes que usar? Bueno, eso es el arte de la predicción. Puedes usar indicadores, tus propios índices, etc.

0 votos

Por cierto, deberías intentar usar logReturns en su lugar.

3voto

Timothy Carter Puntos 7079

Si iba a utilizar escalado, constantemente me encontraría con nuevos valores. Además, si mañana trae un nuevo máximo histórico, necesitaré reescalar los datos y volver a entrenar el modelo.

De hecho, te enfrentas a 2 problemas subyacentes:

  1. Esto es menos un problema de escalado que un problema de estacionariedad. Una solución simple para esto es tomar las primeras diferencias de los precios de cierre en lugar de los precios de cierre brutos.

  2. El problema más trivial es la robustez de tu paso de escalado. Hay varias formas de contrarrestar esto. En el caso del escalado min-max que estás utilizando, una forma posible de abordar esto es la extensión de valores, donde censuras artificialmente todas las características $>1$ a 1. Si no quieres censurar tus datos, podrías usar puntuaciones z en su lugar. Sin conocer el entrenamiento exacto, es probable que estés escalando tus datos para mejorar la convergencia de tu solucionador LSTM, y a menos que tu solucionador tenga una sensibilidad específica a las puntuaciones z o la censura, ambos enfoques son prácticamente factibles. (Este tipo de sensibilidad puede surgir de trucos más avanzados como el meta-aprendizaje, por ejemplo, aprender un LSTM para optimizar tu LSTM).

¿Qué características aprendió mi modelo?

Dependiendo del paquete de software que hayas utilizado, debería tener una salida de resultados u objeto de resultados, que debería darte puntuaciones de características o importancias de características. Sin embargo, las redes neuronales a menudo se utilizan para combinar características, por lo que la respuesta debería ser menos de seleccionar características que encontrar nuevas.

¿Aprendió promedios móviles, gradientes lineales/aproximaciones de volatilidad, etc.?

Estas nuevas características a menudo no tienen una interpretación simple e intuitiva, por lo que puede ser bastante insignificante intentar interpretar las características aprendidas como cantidades convencionales como promedios móviles. Esta es una debilidad común de las redes neuronales.

Dado que tengo 100 constituyentes, ¿tendría sentido ejecutar/pre-entrenar el mismo modelo en todas estas acciones?

Depende de lo que estés tratando de modelar. Si hay razón para creer que lo que estás tratando de predecir se extrae de la misma distribución de la verdad fundamental en todos los constituyentes, entonces sí, vale la pena intentarlo.

0 votos

¡Gracias por esta respuesta! ¿Es mejor usar la predicción de precio en lugar del cambio porcentual para el modelado? Y, ¿debería incluir medias móviles, gradientes como entrada al modelo? Estoy construyendo un modelo simple que simplemente me da una guía sobre si debo comprar o vender.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X