Predicción de series de tiempo (eventualmente con python)

  • ¿Qué algoritmos existen para el pronóstico / regresión de series de tiempo?
    • ¿Qué pasa con el uso de redes neuronales? (¿Los mejores documentos sobre este tema?)
    • ¿Hay bibliotecas de Python / fragmentos de código que pueden ayudar?

Los enfoques clásicos para la regresión de series de tiempo son:

  • Modelos auto-regresivos (hay literaturas enteras sobre ellos)

  • Procesos gaussianos

  • Descomposición de Fourier o similar para extraer los componentes periódicos de la señal (es decir, oscilaciones ocultas en los datos)

Otros enfoques menos comunes que conozco son

  • Análisis de características lentas , un algoritmo que extrae las fuerzas motrices de una serie de tiempo, por ejemplo, los parámetros detrás de una señal caótica

  • La neural network (NN) se aproxima, ya sea utilizando NN recurrentes (es decir, construidas para procesar señales de tiempo) o NN de avance clásico que reciben como parte de entrada de los datos pasados ​​e intentan predecir un punto en el futuro; La ventaja de este último es que se sabe que las NN recurrentes tienen un problema al tener en cuenta el pasado lejano

En mi opinión, para el análisis de datos financieros es importante obtener no solo una extrapolación de las series de tiempo más acertadas, sino también un intervalo de confianza confiable, ya que la estrategia de inversión resultante podría ser muy diferente dependiendo de eso. Los métodos probabilísticos, como los procesos gaussianos, le dan eso “gratis”, ya que devuelven una distribución de probabilidad sobre posibles valores futuros. Con los métodos estadísticos clásicos, tendrás que confiar en las técnicas de arranque .

Hay muchas bibliotecas de Python que ofrecen herramientas estadísticas y de aprendizaje automático, aquí están las que estoy más familiarizado con:

  • NumPy y SciPy son una necesidad para la progtwigción científica en Python
  • Hay una interfaz de Python para R, llamada RPy
  • statsmodel contiene técnicas clásicas de modelos estadísticos, incluidos modelos autorregresivos; Funciona bien con Pandas , un popular paquete de análisis de datos.
  • scikits.learn , MDP , MLPy , Orange son colecciones de algoritmos de aprendizaje automático
  • PyMC Un módulo de python que implementa modelos estadísticos bayesianos y algoritmos de ajuste, incluida la cadena de Markov Monte Carlo.
  • PyBrain contiene (entre otras cosas) implementaciones de redes neuronales de avance y recurrentes
  • en el sitio del Proceso Gaussiano hay una lista de software de GP, que incluye dos implementaciones de Python
  • mloss es un directorio de software de aprendizaje automático de código abierto

No tengo idea acerca de las bibliotecas de Python, pero hay buenos algoritmos de pronóstico en R que son de código abierto. Consulte el paquete de pronóstico para el código y las referencias para el pronóstico de series de tiempo.

Hablando solo sobre los algoritmos detrás de ellos, recientemente usé el suavizado exponencial doble en un proyecto y funcionó bien al pronosticar nuevos valores cuando hay una tendencia en los datos.

La implementación es bastante trivial, pero tal vez el algoritmo no esté lo suficientemente desarrollado para su caso.

¿Has probado Autocorrelación para encontrar patrones periódicos en series de tiempo? Puedes hacerlo con la función numpy.correlate .

Dos enfoques

Hay dos formas de tratar las entradas estructuradas de forma temporal para la clasificación, regresión, agrupación, pronóstico y tareas relacionadas:

  1. Modelo dedicado de series de tiempo: El algoritmo de aprendizaje automático incorpora dichas series de tiempo directamente. Tal modelo es como una caja negra y puede ser difícil explicar el comportamiento del modelo. Los ejemplos son modelos autorregresivos.
  2. Enfoque basado en características: aquí las series de tiempo se asignan a otra representación, posiblemente de menor dimensión. Esto significa que el algoritmo de extracción de características calcula características tales como el valor promedio o máximo de la serie de tiempo. Luego, las características se pasan como una matriz de características a un aprendizaje automático “normal”, como una neural network, un bosque aleatorio o una máquina de vectores de soporte. Este enfoque tiene la ventaja de una mejor explicación de los resultados. Además, nos permite utilizar una teoría bien desarrollada del aprendizaje automático supervisado.

Tsfresh calcula una gran cantidad de características

El paquete python tsfresh calcula una gran cantidad de tales características desde un pandas.DataFrame que contiene la serie de tiempo. Puede encontrar su documentación en http://tsfresh.readthedocs.io .

introduzca la descripción de la imagen aquí

Descargo de responsabilidad: Soy uno de los autores de tsfresh.

El método grupal de manejo de datos se usa ampliamente para pronosticar datos financieros.

Aunque no responde directamente a la pregunta, después de una gran cantidad de búsquedas en Google sobre bibliotecas adecuadas para la predicción de series temporales y la minería de datos secuencial, encontré esta página del taller http://sequenceanalysis.github.io/ que tiene un código interesante con respecto al ajuste de cadena de Markov . Espero que también ayude a alguien más 🙂