Artificial Intelligence

Redes neuronales II

gromero

30/07/2014

2

Como primer acercamiento al uso de redes neuronales, decidimos entrenar una red para tratar de predecir una serie de precios. Tomamos como ejemplo la serie del EURUSD.

En primer lugar, utilizamos la autocorrelación y autocorrelación parcial para determinar si tiene sentido tratar de predecir una serie con información pasada de la misma.

facpfacDurante los 20 primeros retrasos, tan sólo las series de high, low y punto medio tienen retrasos con una correlación suficientemente interesante como para que sean tenidos en cuenta. Decidimos utilizar la serie del punto medio, utilizando 5 retrasos.

Caso 1: un solo input

Definimos una red neuronal que sigue el siguiente esquema:

Esquema red

Tenemos:

  • 1 input, y(t), que es la propia serie del punto medio.

           y(t) = f(y(t –1), …, y(t – d)), donde d es el número de retrasos

  • 1:5 – número de retrasos
  • w – pesos sinápticos
  • b – constante
  • 10 capas ocultas
  • 1 capa de salida
  • 1 output, y(t)

La muestra pasada se divide en tres conjuntos de forma aleatoria: el 70% de entrenamiento, el 15% de validación y el 15% restante de testeo fuera de muestra.

El entrenamiento de la red viene caracterizado por:

ecuación cálculo red

Se trata de un entrenamiento supervisado, esto es, se le proporciona a la red el valor de la salida. Partiendo de un conjunto de pesos aleatorios, se inicia un proceso iterativo en el cual se intenta minimizar el error de la estimación. En este caso se ha utilizado el algoritmo Levenberg-Marquardt. El entrenamiento de la red continúa hasta que el error de validación deja de decrecer durante 6 iteraciones.

Para analizar los resultados, recurrimos a distintos estadísticos:

  • Error de autocorrelaciónError Autocorrelation

Describe cómo se relacionan en el tiempo los errores de predicción. Lo ideal sería que los errores fueran cero (salvo en lag=0, que representa el error cuadrático medio). En nuestro caso la mayoría de los errores están dentro de los límites de confianza del 95%, por lo que el modelo parece adecuado.

  • Error cuadrático medio en cada iteraciónPerformanceRegression

Los errores de las tres series decrecen hasta la iteración 11. Los errores de validación y testeo son similares. Estos últimos son algo superiores pero decrecen/crecen en momentos similares del tiempo.

  • Gráficos de regresión

El resultado no es muy alentador. El ajuste es muy pobre, con un valor de R por debajo de 0.4, incluso en el entrenamiento.

Caso 2: Incluimos más información

Probamos a incluir más información a la red. Mantenemos todos los parámetros igual pero incluimos como inputs el resto de series de precios (open, high, low, close).

Esquema red

En este caso tenemos 5 series como inputs.

y(t) = f(y(t – 1), …, y(t – d), x(t – 1), …, (t – d)),  donde d es el número de retrasos

Si estudiamos de nuevo los estadísticos:Error Autocorrelation

Los errores de autocorrelación no son nulos, pero sí algo más reducidos.

Los errores  de testeo a lo largo de las iteraciones son inferiores, y similares a los del entrenamiento. Sin embargo a partir de la iteración 14 se incrementan, mientras que en el entrenamiento y en la validación o se reducen o se mantienen constantes. Esto nos puede indicar la existencia de sobreajuste.

Performance

Conseguimos mejorar el ajuste de las estimaciones. En este caso, el valor de R se sitúa cerca de 0.7.Regression

Precios estimados vs reales

Calculamos el precio estimado para saber cuánto se acercan estas estimaciones a la realidad. La siguiente tabla muestra el porcentaje de veces que el valor estimado se encuentra dentro / por encima / por debajo de la barra diaria de precios. El caso 1 es el calculado con un solo input, el caso 2 el que incluye más información.

Dentro Por debajo Por encima
Caso 1 71.48% 14.01% 14.51%
Caso2 92.31% 3.15% 4.54%

La mayoría de las veces el precio está dentro de la barra, hasta un 90% en el caso 2. Cuando está fuera, existe la misma probabilidad de que se sitúe por encima o por debajo de la barra. Viendo estos porcentajes, el caso 1 no parece tan malo.

Si dividimos la barra diaria en tres partes ((0-0.35), [0.35-0.65], (0.65-1)), en el caso 1 existe la misma probabilidad de que se sitúe en cualquiera de los tres tramos. En el caso 2 incluso es ligeramente menor en la zona central (28% vs 36% en las otras dos zonas). Por tanto, la aproximación no parece tan acertada como cabría esperar.

En mi opinión, el uso de redes neuronales tiene un gran potencial pero es muy complejo dar con la combinación adecuada. Las posibilidades son infinitas y no existen reglas que permitan saber qué es lo más conveniente en cada caso. La mejor configuración se va obteniendo por prueba y error, quedándonos con aquellas características que parecen ajustarse mejor a nuestro objetivo. Pero como en todos los procesos que utilizan información observada del pasado, es difícil saber dónde está límite entre un buen ajuste y un sobreajuste. Además, a medida que aumentamos la complejidad, se incrementa considerablemente el tiempo de computación y potencia necesaria para llevar a cabo el entrenamiento.

Por último, sólo comentar que existen numerosos recursos que pueden ser utilizados para crear una red neuronal, como el “Neural Network Toolbox” que ofrece Matlab y que ha sido utilizado en este ejemplo. Cuando se aborda el tema por primera vez cuesta saber qué funciones/procesos son los más adecuados, puesto que ofrece numerosas posibilidades. Pero es un toolbox realmente interesante y completo.

2 Comments
Inline Feedbacks
View all comments
alarije
8 years ago

Gracias libesa, desde luego eso sería ideal pero desgraciadamente la red no proporciona información tan exacta. La cantidad de datos que incluimos como entrada en una red siempre hay que definirla analizando la propia serie de datos para saber qué cantidad de información es relevante. Lo mismo ocurre con el número de series que queremos incluir. Lo que sí es importante es adaptar la estructura de la red al número de datos utilizados, aunque ni siquiera aquí hay ninguna regla establecida, sólo recomendaciones. Sí que es verdad que a posteriori, si los resultados de la red no son los esperados… Read more »

libesa
8 years ago

Gracias por el post alarije! Es interesante ver una posible aplicación de redes neuronales a pesar de no tener resultados muy alentadores. A mi entender hay bastantes pocos parámetros de entrada en la red y uno de ellos, el número de retrasos del punto medio, tiene una gran importancia. ¿No sería capaz la red de decidir cuántos retrasos son relevantes o siempre hay que definirlos? Gracias.