¿Cómo manejar muchas series de tiempo simultáneamente?

14

Tengo un conjunto de datos que incluye la demanda de varios productos (1200 productos) durante 25 períodos y necesito predecir la demanda de cada producto para el próximo período. Al principio, quería usar ARIMA y entrenar un modelo para cada producto, pero debido a la cantidad de productos y el ajuste de los parámetros (p, d, q), lleva mucho tiempo y no es práctico. ¿Se recomienda usar una regresión donde las demandas anteriores son variables independientes (autorregresivas)?

¿Puedo saber si hay algún método para entrenar un solo modelo para la predicción de la demanda de los 1200 productos? Le agradecería que me sugiera cualquier biblioteca en Python porque estoy usando Python.

Katatonia
fuente
3
El paquete más avanzado para el análisis de series temporales de alta dimensión que conozco está bigtimeen R. Quizás podría llamar a R desde Python para poder usarlo.
Richard Hardy

Respuestas:

11

En general, cuando tiene varias series de tiempo, usaría algún tipo de modelo basado en vectores para modelarlas todas simultáneamente. La extensión natural del modelo ARIMA para este propósito es el modelo VARIMA (Vector ARIMA). El hecho de que tenga 1200 series temporales significa que tendrá que especificar algunas restricciones paramétricas pesadas en los términos de correlación cruzada en el modelo, ya que no podrá manejar parámetros libres para cada par de variables de series temporales.

Sugeriría comenzar con algún modelo simple basado en vectores (p. Ej., VAR, VMA, VARMA) con bajo grado, y algunas restricciones de parámetros simples para la correlación cruzada. Vea si puede encontrar un modelo razonable que incorpore correlación cruzada con al menos un grado de retraso, y luego vaya desde allí. Este ejercicio requerirá leer en modelos de series de tiempo basadas en vectores. El MTSpaquete y el bigtimepacakage en Rcuenta algunas capacidades para hacer frente a las series temporales multivariantes, por lo que también valdría la pena familiarizarse con estos paquetes.

Reinstalar a Mónica
fuente
El paquete más avanzado para el análisis de series temporales de alta dimensión que conozco está bigtimeen R. Por lo que sé MTS, es más una demostración de ejemplos de libros de texto que una herramienta de trabajo real. Algunos ejemplos multivariados solo pueden manejar series tridimensionales antes de ahogarse en la carga computacional.
Richard Hardy
@ Richard Hardy: Gracias. He editado mi respuesta para incluir esto.
Reinstale a Monica el
1
Una buena manera de hacerlo sería considerar un VAR bayesiano, o más específicamente el modelo VAR bayesiano grande.
Graeme Walsh
6

Como mencionó Ben, los métodos de libro de texto para múltiples series de tiempo son modelos VAR y VARIMA. Sin embargo, en la práctica, no los he visto usar tan a menudo en el contexto de la previsión de la demanda.

Mucho más común, incluido lo que mi equipo usa actualmente, es el pronóstico jerárquico (ver aquí también ). El pronóstico jerárquico se usa siempre que tenemos grupos de series temporales similares: historial de ventas para grupos de productos similares o relacionados, datos turísticos para ciudades agrupadas por región geográfica, etc.

La idea es tener una lista jerárquica de sus diferentes productos y luego hacer pronósticos tanto en el nivel base (es decir, para cada serie de tiempo individual) como en los niveles agregados definidos por la jerarquía de su producto (ver gráfico adjunto). Luego, concilie los pronósticos en los diferentes niveles (usando Arriba hacia abajo, Arriba hacia abajo, Reconciliación óptima, etc.) dependiendo de los objetivos comerciales y los objetivos de pronóstico deseados. Tenga en cuenta que en este caso no ajustará un modelo multivariado grande, sino múltiples modelos en diferentes nodos en su jerarquía, que luego se concilian usando el método de conciliación elegido.

ingrese la descripción de la imagen aquí

La ventaja de este enfoque es que al agrupar series de tiempo similares, puede aprovechar las correlaciones y similitudes entre ellas para encontrar patrones (tales variaciones estacionales) que podrían ser difíciles de detectar con una sola serie de tiempo. Como generará una gran cantidad de pronósticos que es imposible ajustar manualmente, deberá automatizar su procedimiento de pronóstico de series de tiempo, pero eso no es demasiado difícil; consulte aquí para obtener más detalles .

Amazon y Uber utilizan un enfoque más avanzado, pero de espíritu similar, donde una gran red neuronal RNN / LSTM se entrena en todas las series de tiempo a la vez. Es similar en espíritu al pronóstico jerárquico porque también trata de aprender patrones de similitudes y correlaciones entre series de tiempo relacionadas. Es diferente del pronóstico jerárquico porque trata de aprender las relaciones entre las series de tiempo en sí, en lugar de tener esta relación predeterminada y fija antes de hacer el pronóstico. En este caso, ya no tiene que lidiar con la generación automática de pronósticos, ya que está ajustando solo un modelo, pero dado que el modelo es muy complejo, el procedimiento de ajuste ya no es una simple tarea de minimización de AIC / BIC, y necesita para ver procedimientos de ajuste de hiperparámetros más avanzados,

Vea esta respuesta (y comentarios) para detalles adicionales.

Para los paquetes de Python, PyAF está disponible pero no es muy popular. La mayoría de la gente usa el paquete HTS en R, para lo cual hay mucho más apoyo de la comunidad. Para los enfoques basados ​​en LSTM, existen los modelos DeepAR y MQRNN de Amazon que son parte de un servicio que debe pagar. Varias personas también han implementado LSTM para el pronóstico de la demanda utilizando Keras, puede consultarlos.

Skander H.
fuente
1
Como un aparte . AUTOBOX implementa el tipo de modelado jerárquico al que se refirió mientras usaba los GRUPOS totales como una posible serie de manejo para AYUDAR a la predicción de los NIÑOS usando modelos SARMAX. La incertidumbre en los pronósticos secundarios también es entonces una función acumulativa de la incertidumbre en los padres al tiempo que incorpora la posibilidad de pulsos futuros en ambos. Encantado de ver a alguien más emplear este enfoque.
IrishStat
Amazon ha abierto recientemente el algoritmo DeepAR de origen bajo el marco GluonTS que aprovecha el marco MxNet, aunque en este momento encuentro que falta un poco de documentación. aws.amazon.com/blogs/opensource/…
hardikudeshi
5

El problema con los paquetes de ajuste en masa que se han sugerido es que no logran abordar de manera uniforme la estructura determinista latente, como los pulsos, los cambios de nivel / paso, los pulsos estacionales y las tendencias de tiempo, o tratan eficientemente las causas causales sugeridas por el usuario según https: // autobox.com/pdfs/SARMAX.pdf

Además, el tiempo de cálculo puede ser una complicación grave. AUTOBOX (que ayudé a desarrollar) tiene una fase de construcción de modelos muy sofisticada que archiva los modelos y una opción de pronóstico muy rápida que reutiliza el modelo desarrollado anteriormente reduciendo el tiempo de pronóstico a una pequeña fracción del tiempo de desarrollo riguroso del modelo mientras ajusta el nuevo pronóstico para los recientes datos observados después de que el modelo haya sido desarrollado y almacenado. Esto se implementó para el proyecto de pronóstico de 600,000 tiendas de Annheuser-Busch para más de 50 artículos teniendo en cuenta el precio y el clima.

Los modelos se pueden actualizar de forma continua, reemplazando modelos anteriores según sea necesario.

No hay necesidad de restricciones paramétricas O de omitir el efecto simultáneo de variables causales como en VAR y VARIMA, mientras que solo se basa en el pasado de todas las series a la ARIMA.

No es necesario tener solo 1 modelo con 1 conjunto de parámetros, ya que los modelos pueden y deben adaptarse / optimizarse para las series individuales.

Lamentablemente, todavía no existe una solución de Python, pero la esperanza es eterna.

IrishStat
fuente
1
Suena interesante. Solo una pequeña objeción: incluso en algo tan simple como un VAR, cada serie obtiene su propia ecuación, por lo que la necesidad de tener solo 1 modelo con 1 conjunto de parámetros no es una preocupación. A menos que sugiera varios modelos para la misma serie, lo que podría ser una buena idea desde la perspectiva de las combinaciones de pronóstico.
Richard Hardy
objetivo: "¿entrenar un modelo único para la predicción de la demanda de los 1200 productos?" Lo tomé literalmente como 1 ecuación de tipo con 1 conjunto de parámetros fijos / globales estimados a partir de las 1200 series de tiempo ". Quizás lo leí en
exceso
O tal vez me equivoqué.
Richard Hardy
3

1200 productos es el principal impulsor de la dimensionalidad de su problema. Ahora solo tienes 25 períodos. Estos son muy pocos datos, insuficientes para hacer cualquier tipo de análisis de correlación general. En otras palabras, no tiene datos para tener un pronóstico simultáneo de todos los productos sin reducir la dimensionalidad. Esto prácticamente elimina todos los modelos teóricos VARMA y otros buenos. Es imposible lidiar con los coeficientes de estos modelos, hay demasiados para estimar.

Considere un análisis de correlación simple. Necesitaría (1200x1200 + 1200) / 2 celdas en la matriz de covarianza / correlación. Tienes solo 25 puntos de datos. La matriz tendrá un rango deficiente en gran medida. ¿Qué vas a hacer? En términos generales, tiene dos enfoques simples: pronósticos separados y modelo de factores.

El primer enfoque es obvio: ejecuta cada producto de forma independiente. La variación es agruparlos por alguna característica, por ejemplo, sector como "cierre de hombres".

El segundo enfoque es representar la demanda del producto como reyo=jFjβjyo+miyo, dónde FjEs un factor. ¿Cuáles son los factores? Estos podrían ser factores exógenos como la tasa de crecimiento del PIB. O podrían ser factores exógenos, por ejemplo, los que obtuvo con el análisis de PCA.

Si se trata de un factor exógeno, entonces necesitaría obtener betas haciendo retroceder la serie sobre estos factores individualmente. Para PCA, podría hacer un PCA robusto y obtener los primeros factores con sus pesos, que son sus mejores versiones.

Luego, analiza los factores y crea un modelo de pronóstico para producir F^jy vuelva a conectarlos a su modelo para obtener un pronóstico de la demanda del producto. Puede ejecutar un modelo de serie temporal para cada factor, incluso un modelo vectorial como VARMA para varios factores. Ahora que se redujo la dimensionalidad del problema, es posible que tenga suficientes datos para construir pronósticos de series de tiempo.

Aksakal
fuente
Veo su punto de vista acerca de 25 períodos para una serie temporal muy corta, pero ¿qué pasa si son valores mensuales? Entonces el OP tiene dos años de datos mensuales, que son suficientes para capturar algo de estacionalidad, o al menos para usar un suavizado exponencial simple, ¿no?
Skander H.
@SkanderH., 25 puntos pueden ser suficientes para ejecutar una serie (es decir, cada serie por su cuenta), o el agregado. Mi punto es que no es suficiente ejecutar esto como un sistema.
Aksakal
O podrían ser factores exógenos, por ejemplo, los que obtuvo con el análisis de PCA. ¿Quizás endógeno ?
Richard Hardy
1

No estoy seguro de si está interesado en las soluciones basadas en la nube, pero Amazon hace que un algoritmo que llaman "DeepAR" esté disponible a través de AWS SageMaker, como se ve aquí .

Este algoritmo está diseñado específicamente para poder aprender de múltiples series de tiempo de entrada para crear pronósticos, incluyendo características estáticas y dinámicas; como se ve en este extracto de la página vinculada anterior:

La entrada de entrenamiento para el algoritmo DeepAR es una o, preferiblemente, más series de tiempo objetivo que han sido generadas por el mismo proceso o procesos similares. Basado en este conjunto de datos de entrada, el algoritmo entrena un modelo que aprende una aproximación de este proceso / procesos y lo usa para predecir cómo evoluciona la serie temporal objetivo. Cada serie temporal objetivo puede asociarse opcionalmente con un vector de características categóricas estáticas (independientes del tiempo) proporcionadas por el campo cat y un vector de series temporales dinámicas (dependientes del tiempo) proporcionadas por el campo dynamic_feat.

Desafortunadamente, por lo que puedo decir, no hacen que este algoritmo esté disponible para uso fuera de línea / autohospedado.

mbrig
fuente