Tengo la siguiente configuración para un proyecto de investigación de Finanzas / Aprendizaje automático en mi universidad: estoy aplicando una Red neuronal (profunda) (MLP) con la siguiente estructura en Keras / Theano para distinguir las existencias con mejor rendimiento (etiqueta 1) de las existencias con bajo rendimiento ( etiqueta 0). En primer lugar, solo uso múltiplos de valoración reales e históricos. Debido a que se trata de datos de existencias, uno puede esperar tener datos muy ruidosos. Además, una precisión estable fuera de la muestra de más del 52% ya podría considerarse como buena en este dominio.
La estructura de la red:
- Capa densa con 30 características como entrada
- Relu-Activation
- Capa de normalización por lotes (sin eso, la red no está convergiendo en absoluto)
- Capa de abandono opcional
- Denso
- Relu
- Lote
- Abandonar
- .... Más capas, con la misma estructura.
- Capa densa con activación sigmoidea
Optimizador: RMSprop
Función de pérdida: entropía cruzada binaria
Lo único que hago para el preprocesamiento es reescalar las características al rango [0,1].
Ahora me encuentro con un problema típico de sobreajuste / subajuste, que normalmente abordaría con Dropout o / y la regularización de kernel L1 y L2. Pero en este caso, tanto la deserción como la regularización L1 y L2 tienen un impacto negativo en el rendimiento, como puede ver en los siguientes gráficos.
Mi configuración básica es: 5 capas NN (incluida la capa de entrada y salida), 60 neuronas por capa, tasa de aprendizaje de 0.02, sin L1 / L2 y sin abandono, 100 épocas, normalización de lotes, tamaño de lote 1000. Todo está entrenado en 76000 muestras de entrada (clases casi equilibradas 45% / 55%) y aplicadas a aproximadamente la misma cantidad de muestras de prueba. Para los gráficos solo he cambiado un parámetro a la vez. "Perf-Diff" significa la diferencia de rendimiento promedio de las acciones clasificadas como 1 y las acciones clasificadas como 0, que es básicamente la métrica central al final. (Más alto es mejor)
En el caso l1, la red básicamente clasifica cada muestra en una clase. El aumento está ocurriendo porque la red está haciendo esto nuevamente pero clasifica 25 muestras al azar. Por lo tanto, este pico no debe interpretarse como un buen resultado, sino un valor atípico.
Los otros parámetros tienen el siguiente impacto:
¿Tienes alguna idea de cómo podría mejorar mis resultados? ¿Hay un error obvio que estoy haciendo o hay una respuesta fácil a los resultados de la regularización? ¿Sugeriría hacer algún tipo de selección de características antes del entrenamiento (por ejemplo, PCA)?
Respuestas:
Dado que se trata de datos financieros, es probable que las distribuciones de características en su tren y conjuntos de validación sean diferentes, un fenómeno conocido como cambio covariable, y las redes neuronales no tienden a funcionar bien con esto. Tener diferentes distribuciones de características puede causar un sobreajuste incluso si la red es relativamente pequeña.
Dado que l1 y l2 no ayudan, sospecho que otras medidas de regularización estándar, como agregar ruido a las entradas / pesos / gradientes, probablemente no ayuden, pero puede valer la pena intentarlo.
Me sentiría tentado a probar un algoritmo de clasificación que se vea menos afectado por las magnitudes absolutas de las características, como un árbol impulsado por gradiente.
fuente