12 votos

Primeros pasos en la predicción de series temporales financieras mediante aprendizaje automático

Estoy tratando de entender cómo utilizar el aprendizaje automático para predecir series temporales financieras 1 o más pasos en el futuro.

Tengo una serie de tiempo financiera con algunos datos descriptivos y me gustaría formar un modelo y luego utilizar el modelo para predecir n pasos por delante.

Lo que he estado haciendo hasta ahora es:

getSymbols("GOOG")

GOOG$sma <- SMA(Cl(GOOG))
GOOG$range <- GOOG$GOOG.High-GOOG$GOOG.Low

tail(GOOG)

           GOOG.Open GOOG.High GOOG.Low GOOG.Close GOOG.Volume GOOG.Adjusted     sma range
2013-05-07    863.01    863.87   850.67     857.23     1959000        857.23 828.214 13.20
2013-05-08    857.00    873.88   852.91     873.63     2468300        873.63 834.232 20.97
2013-05-09    870.84    879.66   868.23     871.48     2200600        871.48 840.470 11.43
2013-05-10    875.31    880.54   872.16     880.23     1897700        880.23 848.351  8.38
2013-05-13    878.89    882.47   873.38     877.53     1448500        877.53 854.198  9.09
2013-05-14    877.50    888.69   877.14     887.10     1579300        887.10 860.451 11.55

Luego he ajustado un modelo randomForest a estos datos.

fit <- randomForest(GOOG$GOOG.Close ~ GOOG$sma + GOOG$range, GOOG)

Lo que parece encajar sorprendentemente bien:

> fit

Call:
 randomForest(formula = GOOG$GOOG.Close ~ GOOG$sma + GOOG$range,      data = GOOG) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 1

          Mean of squared residuals: 353.9844
                    % Var explained: 97.28

Y trató de usarla para predecir:

predict(fit, GOOG, n.ahead=2)

Pero esta predicción no funcionó.

Si intento predecir el Cierre, ¿debo retrasar las otras variables tantos pasos como quiera la predicción, antes de ajustar el modelo?

Probablemente también debería tener en cuenta muchas otras cosas, pero estos son realmente mis primeros pasos probando el aprendizaje automático.

16voto

Tyler Puntos 21

Mi primera observación es que no has retrasado las entradas con respecto al precio de cierre y por eso has observado un ajuste tan bueno. La SMA (media móvil simple) utiliza el precio de cierre en su cálculo y el rango alto-bajo abarca el precio de cierre, por lo que utilizarlos para predecir el precio de cierre imparte un sesgo de anticipación. Mi opinión es que si usted está tratando de predecir el precio de cierre con dos días de antelación, debe construir su modelo con entradas que se retrasan desde el precio de cierre por lo menos dos días. Algunas de las entradas pueden tener un retraso de más de dos días, pero yo empezaría de forma sencilla y trataría de utilizar sólo un puñado de entradas.

En cuanto a su objetivo de predecir el precio de cierre, creo que los precios de cierre son demasiado ruidosos para ser utilizados como variables objetivo y su uso conducirá a un sobreajuste o a la optimización de un objetivo equivocado. En su lugar, yo empezaría por suavizar el precio de cierre con una media móvil y, a continuación, predecir la dirección del cambio de precios en los dos días siguientes. Por ejemplo, podría reemplazar el cierre con una media móvil de 5 días del cierre y luego codificar el cambio de precio de la media móvil como 1 si fuera positivo durante los dos días siguientes y 0 en caso contrario. Dado que la variable de salida se codifica ahora como un 1 o un 0, este es un buen problema para intentar resolverlo con la función de bosque aleatorio que estaba utilizando. También podría probar con otros algoritmos de clasificación como la regresión logística, las redes neuronales y las SVM, y tal vez combinar algunos de ellos en un conjunto para mejorar el rendimiento. Sigue siendo un problema difícil de resolver sin sobreajustar, pero es un paso en la dirección correcta. Otra advertencia es que su modelo final podría tener una precisión asombrosa a la hora de clasificar los dos días siguientes como positivos o negativos, pero aún así perdería dinero porque clasificó incorrectamente algunos movimientos grandes.

También recomendaría construir su modelo sobre más de un valor para que el algoritmo de aprendizaje automático no se centre en la idiosincrasia de una acción. Yo empezaría con al menos 5 valores que no estén muy correlacionados entre sí.

Trading on the Edge, de Guido Deboeck, es un buen punto de partida para explorar las aplicaciones del aprendizaje automático a la predicción de series temporales financieras. Es un libro antiguo, por lo que está muy por detrás de la tecnología de la que disponemos hoy en día, pero es un buen comienzo. También recomendaría New Trading Systems and Methods de Kaufman y Expert Trading Systems de John Wolberg.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X