Primeros pasos para aprender a predecir series de tiempo financieras usando el aprendizaje automático

12

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

Tengo una serie cronológica financiera con algunos datos descriptivos y me gustaría formar un modelo y luego usar 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 usarlo para predecir:

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

Pero esta predicción de c no funcionó.

Intento predecir el cierre, ¿debo retrasar las otras variables en tantos pasos como quiera la predicción, antes de ajustar el modelo?

Probablemente también tenga en cuenta muchas otras cosas, pero estos son realmente mis primeros pasos para probar el aprendizaje automático.

nikke
fuente

Respuestas:

16

Mi primera observación es que no retrasó las entradas en relación con el precio de cierre y es por eso que observó un ajuste tan bueno. El SMA (promedio móvil simple) utiliza el precio de cierre en su cálculo y el rango alto y bajo abarca el precio de cierre, por lo que usarlos para predecir el precio de cierre imparte un sesgo de anticipación. Mi opinión es que si está tratando de predecir el precio de cierre con dos días de anticipación, debe construir su modelo con entradas que estén rezagadas del precio de cierre por al menos dos días. Algunas de las entradas pueden demorarse más de dos días, pero comenzaría de manera simple y trataría de usar solo 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 ajuste excesivo u optimización del objetivo equivocado. En cambio, comenzaría suavizando el precio de cierre con un promedio móvil y luego prediciendo la dirección del cambio de precio en los próximos dos días. Por ejemplo, podría reemplazar el cierre con un SMA de 5 días del cierre y luego codificar el cambio de precio del SMA como 1 si fue positivo durante los próximos dos días y 0 en caso contrario. Debido a que la variable de salida ahora está codificada como 1 o 0, este es un buen problema para tratar de resolver con la función de bosque aleatorio que estaba utilizando. También puede probar algunos otros algoritmos de clasificación, como la regresión logística, las redes neuronales y los SVM, y tal vez combinar algunos en un conjunto para mejorar su rendimiento. Este 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 sorprendente al clasificar los próximos dos días como positivo o negativo, pero aún así perder dinero porque clasificó incorrectamente algunos movimientos grandes.

También recomendaría construir su modelo en más de una seguridad para que el algoritmo de aprendizaje automático no se centre en las idiosincrasias de un stock. Comenzaría con al menos 5 acciones que no están altamente correlacionadas entre sí.

Trading on the Edge por Guido Deboeck es un buen lugar para comenzar a explorar las aplicaciones del aprendizaje automático a la predicción de series de tiempo financieras. Es un libro antiguo, por lo que está muy por detrás de la tecnología que tenemos disponible hoy, pero es un buen comienzo. También recomendaría Nuevos sistemas y métodos de negociación de Kaufman y Expert Trading Systems de John Wolberg.

CrossValidatedTrading
fuente
Ok, gracias por esta buena respuesta. El ejemplo fue más para mí entender cómo configurar los datos para que randomForest pueda usarlos. Pero ahora sé que necesito retrasar las entradas para que funcione. ¿Tendría algún sentido tener el precio de la SMA en su ejemplo como variable de salida, o tendría que ser como 0 o 1? \ n Gracias también por las recomendaciones del libro, me familiarizaré con ellas.
nike
Definitivamente, podría usar el precio de la SMA como variable de salida; El problema se vuelve más complejo. En lugar de predecir una dirección, ahora está tratando de predecir un valor de precio exacto. En mi experiencia, esto es algo muy difícil para que un algoritmo de máquina tenga buenos resultados fuera de la muestra. Pero si solo se está familiarizando con el proceso de configuración de datos de series temporales para la predicción, este puede ser un buen lugar para comenzar, especialmente si es más intuitivo para usted que la predicción direccional. También puede intentar predecir el precio al que se cruzarán dos promedios móviles.
CrossValidatedTrading
Hola, creé algunas características e hice un modelo: pastie.org/7958695 Creo que resolví la mecánica. Sin embargo, este modelo es demasiado curvado. ¿Has hecho algo similar y lo has usado realmente? Sería genial hablar más.
Nikke
Siempre estoy abierto a conversaciones más detalladas. Mi información de contacto está en mi perfil. Mándame un correo electrónico si quieres.
CrossValidatedTrading
Hicimos algunas regresiones simples para predecir los rendimientos que deberían funcionar bien, en comparación con la predicción de un valor de precio. Además de predecir el retorno, debe predecir un retorno lo suficientemente grande como para superar la propagación y la comunicación, etc. Sería genial hablar más, no podría encontrar su correo en su perfil. La mía está en el pastel que publiqué en el comentario anterior.
Nikke