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.
machine-learning
time-series
arima
Katatonia
fuente
fuente
bigtime
en R. Quizás podría llamar a R desde Python para poder usarlo.Respuestas:
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 tenga1200 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
MTS
paquete y elbigtime
pacakage enR
cuenta algunas capacidades para hacer frente a las series temporales multivariantes, por lo que también valdría la pena familiarizarse con estos paquetes.fuente
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 multivariados solo pueden manejar series tridimensionales antes de ahogarse en la carga computacional.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.
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.
fuente
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.
fuente
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 comoreyo= ∑jFjβj i+ eyo , dónde Fj Es 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 producirF^j y 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.
fuente
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:
Desafortunadamente, por lo que puedo decir, no hacen que este algoritmo esté disponible para uso fuera de línea / autohospedado.
fuente