42 votos

¿Cómo gestionar simultáneamente varias series temporales?

Tengo un conjunto de datos que incluye la demanda de varios productos (1200 productos) durante 25 periodos y necesito predecir la demanda de cada producto para el siguiente periodo. Al principio, quería utilizar ARIMA y entrenar un modelo para cada producto, pero debido al número de productos y al ajuste de los parámetros (p,d,q), lleva mucho tiempo y no es práctico. ¿Es recomendable utilizar una regresión en la que las demandas anteriores sean variables independientes (autorregresivas)?

¿Puedo saber si existe algún método para entrenar un único modelo para la predicción de la demanda de los 1200 productos? Le agradecería si me puede sugerir alguna biblioteca en Python porque estoy usando Python.

5 votos

El paquete más avanzado para el análisis de series temporales de alta dimensión que conozco es bigtime en R. Quizás podrías llamar a R desde Python para poder usarlo.

25voto

netbook shopper Puntos 11

Como ha mencionado Ben, los métodos de los libros de texto para series temporales múltiples son los modelos VAR y VARIMA. En la práctica, sin embargo, no he visto que se utilicen tan a menudo en el contexto de la previsión de la demanda.

Mucho más común, incluyendo lo que mi equipo utiliza actualmente, es previsión jerárquica (véase aquí también ). La previsión jerárquica se utiliza siempre que tenemos grupos de series temporales similares: Historial de ventas de grupos de productos similares o relacionados, datos turísticos de ciudades agrupados por regiones geográficas, etc.

La idea es disponer de un listado jerárquico de los distintos productos y, a continuación, realizar previsiones tanto a nivel de base (es decir, para cada serie temporal individual) como a niveles agregados definidos por la jerarquía de productos (véase el gráfico adjunto). A continuación, concilie las previsiones en los distintos niveles (utilizando Top Down, Botton Up, Optimal Reconciliation, etc...) en función de los objetivos empresariales y los objetivos de previsión deseados. Tenga en cuenta que, en este caso, no ajustará un gran modelo multivariante, sino varios modelos en distintos nodos de la jerarquía, que se conciliarán utilizando el método de conciliación elegido.

enter image description here

La ventaja de este enfoque es que, al agrupar series temporales similares, se pueden aprovechar las correlaciones y similitudes entre ellas para encontrar patrones (como variaciones estacionales) que podrían ser difíciles de detectar con una sola serie temporal. Dado que generará un gran número de previsiones imposibles de ajustar manualmente, tendrá que automatizar su procedimiento de previsión de series temporales, pero eso no es demasiado difícil consulte aquí los detalles .

Amazon y Uber utilizan un enfoque más avanzado, pero de espíritu similar, en el que una gran red neuronal RNN/LSTM se entrena en todas las series temporales a la vez. Es similar en espíritu a la previsión jerárquica porque también intenta aprender patrones a partir de similitudes y correlaciones entre series temporales relacionadas. Se diferencia de la previsión jerárquica en que trata de aprender las relaciones entre las propias series temporales, en lugar de tener esta relación predeterminada y fija antes de realizar la previsión. En este caso, ya no hay que ocuparse de la generación automática de previsiones, puesto que sólo se sintoniza un modelo, pero como el modelo es muy complejo, el procedimiento de sintonización ya no es una simple tarea de minimización AIC/BIC, y hay que recurrir a procedimientos más avanzados de sintonización de hiperparámetros, como la optimización bayesiana.

Véase esta respuesta (y comentarios) para más detalles.

Para paquetes Python, PyAF está disponible pero no es muy popular. La mayoría de la gente utiliza el HTS en R, para el que existe mucho más apoyo por parte de la comunidad. Para los enfoques basados en LSTM, existen los modelos DeepAR y MQRNN de Amazon, que forman parte de un servicio por el que hay que pagar. Varias personas también han implementado LSTM para la previsión de la demanda utilizando Keras, puedes buscarlos.

1 votos

Como apunte . AUTOBOX implementa el tipo de modelización jerárquica a la que usted se ha referido al utilizar los totales del GRUPO como posible serie impulsora con el fin de AYUDAR a la predicción de los HIJOS utilizando modelos SARMAX. La incertidumbre en las predicciones de los hijos es también entonces una función acumulativa de la incertidumbre en el padre mientras se incorpora la posibilidad de futuros impulsos en ambos Encantado de ver que alguien más emplea este enfoque.

1 votos

Amazon ha abierto recientemente el algoritmo DeepAR bajo el marco GluonTS que aprovecha el marco MxNet, aunque la documentación me parece un poco escasa en este momento. aws.amazon.com/blogs/opensource/

15voto

Aaron Puntos 36

Por lo general, cuando se tienen varias series temporales, se utiliza algún tipo de modelo basado en vectores para modelarlas todas simultáneamente. La extensión natural del modelo ARIMA para este fin es el modelo VARIMA (Vector ARIMA). El hecho de tener $1200$ series temporales significa que tendrá que especificar algunas restricciones paramétricas importantes en los términos de correlación cruzada del modelo, ya que no podrá tratar con parámetros libres para cada par de variables de series temporales.

Yo sugeriría empezar con algún modelo simple basado en vectores (por ejemplo, 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 la correlación cruzada hasta al menos un grado de retardo, y luego continúe a partir de ahí. Este ejercicio requerirá leer sobre modelos de series temporales basados en vectores. En MTS paquete y el bigtime paquete en R tiene algunas capacidades para tratar series temporales multivariantes, por lo que también merecería la pena familiarizarse con estos paquetes.

1 votos

El paquete más avanzado para el análisis de series temporales de alta dimensión que conozco es bigtime en 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 multivariantes sólo pueden manejar series tridimensionales antes de ahogarse por la carga computacional.

1 votos

@Richard Hardy: Gracias --- He editado mi respuesta para incluir esto.

2 votos

Una buena forma de hacerlo sería considerar un VAR bayesiano, o más concretamente el modelo de gran VAR bayesiano.

6voto

Owen Fraser-Green Puntos 642

El problema con los paquetes de ajuste masivo que se han sugerido es que no tratan de manera uniforme la estructura determinista latente, como pulsos, cambios de nivel/escalón, pulsos estacionales y tendencias temporales, ni tratan de manera eficiente las causales sugeridas por el usuario según https://autobox.com/pdfs/SARMAX.pdf

Además, el tiempo de cálculo puede suponer una seria complicación. AUTOBOX (en cuyo desarrollo he colaborado) dispone de una fase muy sofisticada de creación de modelos que los archiva y de una opción de previsión muy rápida que reutiliza el modelo desarrollado previamente, reduciendo el tiempo de previsión a una pequeña fracción del tiempo de desarrollo riguroso del modelo, al tiempo que ajusta la nueva previsión a los datos recientes observados después de que el modelo se haya desarrollado y almacenado. Esto se implementó para el proyecto de previsión de 600.000 tiendas de Annheuser-Busch para unos 50+ artículos teniendo en cuenta el Precio y el Tiempo .

Los modelos pueden actualizarse de forma continua, sustituyendo a los anteriores según sea necesario.

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

No es necesario tener un único modelo con un único conjunto de parámetros, ya que los modelos pueden y deben adaptarse/optimizarse para cada serie.

Por desgracia, aún no existe una solución Python, pero la esperanza es eterna.

1 votos

Parece interesante. Sólo una pequeña objeción: incluso en algo tan simple como un VAR, cada serie tiene su propia ecuación, por lo que el necesidad de tener sólo 1 modelo con 1 conjunto de parámetros no es motivo de preocupación. A menos que sugiera varios modelos para la misma serie, lo que podría ser una buena idea desde el punto de vista de las combinaciones de previsiones.

0 votos

Objetivo: "¿entrenar un único modelo para la predicción de la demanda de los 1.200 productos? Me lo tomé literalmente como "1 ecuación tipo con 1 conjunto de parámetros fijos/globales estimados a partir de las 1200 series temporales" . Quizá lo interpreté mal.

0 votos

O tal vez lo entendí mal.

3voto

Aksakal Puntos 11351

1200 productos es el principal impulsor de la dimensionalidad de su problema. Ahora sólo tienes 25 periodos. Son muy pocos datos, insuficientes para hacer cualquier tipo de análisis de correlación general. En otras palabras, no tienes datos para hacer una previsión simultánea de todos los productos sin reducir la dimensionalidad. Esto elimina prácticamente todos los modelos VARMA y otros buenos modelos teóricos. Es imposible tratar con los coeficientes de estos modelos, hay demasiados que estimar.

Consideremos un análisis de correlación simple. Necesitarías (1200x1200 + 1200)/2 celdas en la matriz de covarianza/correlación. Usted tiene sólo 25 puntos de datos. La matriz será rango deficiente a un grado enorme. ¿Qué vamos a hacer? A grandes rasgos, existen dos enfoques sencillos: previsiones separadas y modelo factorial.

El primer enfoque es obvio: se ejecuta cada producto de forma independiente. La variante consiste en agruparlos por alguna característica, por ejemplo, un sector como "cierre masculino".

El segundo enfoque consiste en representar la demanda del producto como $d_i=\sum_jF_{j}\beta_{ji}+e_i$ donde $F_j$ es un factor. ¿Cuáles son los factores? Pueden ser factores exógenos, como la tasa de crecimiento del PIB. O podrían ser factores exógenos , por ejemplo, los obtenidos con el análisis PCA.

Si se trata de un factor exógeno, habría que obtener las betas mediante la regresión de las series sobre estos factores individualmente. Para PCA, usted podría hacer un PCA robusto y obtener los primeros factores con sus pesos que son betas.

A continuación, se analizan los factores y se construye un modelo de previsión para producir $\hat F_j$ e introdúzcalos en su modelo para obtener una previsión de la demanda del producto. Podría ejecutar un modelo de series temporales para cada factor, incluso un modelo vectorial como VARMA para varios factores. Ahora que la dimensionalidad del problema se ha reducido, es posible que disponga de datos suficientes para elaborar previsiones de series temporales.

0 votos

Entiendo que 25 periodos constituyen una serie temporal muy corta, pero ¿y si son valores mensuales? Entonces el OP dispone de dos años de datos mensuales, lo que es suficiente para captar cierta estacionalidad, o al menos para utilizar un suavizado exponencial simple, ¿no?

0 votos

@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 para ejecutar esto como un sistema.

1 votos

O podrían ser factores exógenos , por ejemplo, los obtenidos con el análisis PCA. Quizás endógeno ?

1voto

mbrig Puntos 171

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

Este algoritmo está pensado específicamente para poder aprender de múltiples series temporales de entrada con el fin de crear previsiones, incluyendo características estáticas y dinámicas; como se ve en este extracto de la página enlazada anteriormente:

La entrada de entrenamiento para el algoritmo DeepAR es una o, preferiblemente, más series temporales objetivo que han sido generadas por el mismo proceso o procesos similares. Basándose en este conjunto de datos de entrada, el algoritmo entrena un modelo que aprende una aproximación de este proceso o procesos y lo utiliza para predecir cómo evolucionan las series temporales 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.

Lamentablemente, por lo que sé, este algoritmo no está disponible para su uso fuera de línea/autoalojamiento.

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