J'ai un ensemble de données comprenant la demande de plusieurs produits (1200 produits) pour 25 périodes et j'ai besoin de prédire la demande de chaque produit pour la période suivante. Au début, je voulais utiliser ARIMA et former un modèle pour chaque produit, mais en raison du nombre de produits et du réglage des paramètres (p, d, q), cela prend tellement de temps et ce n'est pas pratique. Est-il recommandé d'utiliser une régression où les demandes précédentes sont des variables indépendantes (autorégressives)?
Puis-je savoir s'il existe une méthode pour former un modèle unique pour la prévision de la demande pour les 1200 produits? Je serais reconnaissant si vous pouvez suggérer une bibliothèque en Python car j'utilise Python.
machine-learning
time-series
arima
Katatonia
la source
la source
bigtime
dans R. Peut-être pourriez-vous appeler R depuis Python pour pouvoir l'utiliser.Réponses:
Généralement, lorsque vous avez plusieurs séries temporelles, vous utiliseriez une sorte de modèle vectoriel pour les modéliser toutes simultanément. L'extension naturelle du modèle ARIMA à cet effet est le modèle VARIMA (Vector ARIMA). Le fait que vous ayez1200 séries chronologiques signifie que vous devrez spécifier de lourdes restrictions paramétriques sur les termes de corrélation croisée dans le modèle, car vous ne pourrez pas traiter les paramètres libres pour chaque paire de variables de séries chronologiques.
Je suggérerais de commencer avec un modèle simple basé sur un vecteur (par exemple, VAR, VMA, VARMA) avec un faible degré, et quelques restrictions de paramètres simples pour la corrélation croisée. Voyez si vous pouvez trouver un modèle raisonnable qui incorpore une corrélation croisée à au moins un degré de décalage, puis allez-y. Cet exercice nécessitera la lecture de modèles de séries chronologiques vectoriels. Le
MTS
package et lebigtime
pacakage inR
ont certaines capacités pour gérer les séries temporelles multivariées, il serait donc également utile de vous familiariser avec ces packages.la source
bigtime
dans R. Pour autant que je sacheMTS
, il s'agit davantage d'une démonstration d'exemples de manuels que d'un véritable outil de travail. Certains exemples multivariés ne peuvent gérer que des séries tridimensionnelles avant d'étouffer la charge de calcul.Comme Ben l'a mentionné, les méthodes des manuels pour plusieurs séries chronologiques sont les modèles VAR et VARIMA. Dans la pratique cependant, je ne les ai pas vu souvent utilisés dans le contexte de la prévision de la demande.
Les prévisions hiérarchiques sont beaucoup plus courantes, y compris celles que mon équipe utilise actuellement (voir ici également ). La prévision hiérarchique est utilisée chaque fois que nous avons des groupes de séries chronologiques similaires: historique des ventes pour des groupes de produits similaires ou connexes, données touristiques pour les villes regroupées par région géographique, etc.
L'idée est d'avoir une liste hiérarchique de vos différents produits, puis de faire des prévisions à la fois au niveau de base (c'est-à-dire pour chaque série temporelle individuelle) et aux niveaux agrégés définis par votre hiérarchie de produits (voir graphique ci-joint). Vous rapprochez ensuite les prévisions aux différents niveaux (en utilisant Top Down, Botton Up, Optimal Reconciliation, etc ...) en fonction des objectifs métiers et des cibles de prévision souhaitées. Notez que vous n'adapterez pas un grand modèle multivarié dans ce cas, mais plusieurs modèles à différents nœuds de votre hiérarchie, qui sont ensuite réconciliés en utilisant la méthode de réconciliation que vous avez choisie.
L'avantage de cette approche est qu'en regroupant des séries chronologiques similaires, vous pouvez profiter des corrélations et des similitudes entre elles pour trouver des modèles (tels que des variations saisonnières) qui pourraient être difficiles à repérer avec une seule série chronologique. Comme vous générerez un grand nombre de prévisions impossibles à régler manuellement, vous devrez automatiser votre procédure de prévision de séries chronologiques, mais ce n'est pas trop difficile - voir ici pour plus de détails .
Une approche plus avancée, mais similaire dans son esprit, est utilisée par Amazon et Uber, où un grand réseau neuronal RNN / LSTM est formé sur toutes les séries temporelles à la fois. Elle est similaire dans son esprit à la prévision hiérarchique, car elle essaie également d'apprendre des modèles à partir de similitudes et de corrélations entre des séries chronologiques connexes. Elle est différente de la prévision hiérarchique car elle essaie d'apprendre les relations entre la série temporelle elle-même, au lieu d'avoir cette relation prédéterminée et fixée avant de faire la prévision. Dans ce cas, vous n'avez plus à vous occuper de la génération de prévisions automatisée, car vous ajustez un seul modèle, mais comme le modèle est très complexe, la procédure de réglage n'est plus une simple tâche de minimisation AIC / BIC, et vous avez besoin pour examiner des procédures de réglage d'hyper-paramètres plus avancées,
Voir cette réponse (et commentaires) pour plus de détails.
Pour les packages Python, PyAF est disponible mais pas très populaire. La plupart des gens utilisent le package HTS dans R, pour lequel il y a beaucoup plus de soutien communautaire. Pour les approches basées sur LSTM, il existe des modèles DeepAR et MQRNN d'Amazon qui font partie d'un service pour lequel vous devez payer. Plusieurs personnes ont également implémenté LSTM pour la prévision de la demande à l'aide de Keras, vous pouvez les rechercher.
la source
Le problème avec les packages d'ajustement de masse qui ont été suggérés est qu'ils ne traitent pas uniformément la structure déterministe latente comme les impulsions, les changements de niveau / pas, les impulsions saisonnières et les tendances temporelles ou traitent efficacement les causalités suggérées par l'utilisateur selon https: // autobox.com/pdfs/SARMAX.pdf
De plus, le temps de calcul peut être une complication grave. AUTOBOX (que j'ai aidé à développer) a une phase de construction de modèle très sophistiquée qui archive les modèles et une option de prévision très rapide qui réutilise le modèle développé précédemment en réduisant le temps de prévision à une petite fraction du temps de développement de modèle rigoureux tout en ajustant les nouvelles prévisions pour les récentes données observées après le développement et le stockage du modèle. Cela a été mis en œuvre pour le projet de prévisions de 600 000 magasins d'Annheuser-Busch pour plus de 50 articles en tenant compte du prix et de la météo.
Les modèles peuvent être mis à jour de manière continue, en remplaçant les modèles précédents si nécessaire.
Pas besoin de restrictions paramétriques OU en omettant l'effet simultané des variables causales comme dans VAR et VARIMA tout en s'appuyant uniquement sur le passé de toutes les séries à la ARIMA.
Il n'est pas nécessaire d'avoir un seul modèle avec 1 ensemble de paramètres car les modèles peuvent et doivent être adaptés / optimisés pour chaque série.
Malheureusement, il n'y a pas encore de solution Python mais l'espoir est éternel.
la source
1200 produits est le principal moteur de la dimensionnalité de votre problème. Maintenant, vous n'avez que 25 périodes. Il s'agit de très peu de données, insuffisantes pour effectuer tout type d'analyse de corrélation globale. En d'autres termes, vous n'avez pas de données pour avoir une prévision simultanée de tous les produits sans réduire la dimensionnalité. Cela élimine à peu près tous les VARMA et autres beaux modèles théoriques. Il est impossible de traiter les coefficients de ces modèles, ils sont trop nombreux pour être estimés.
Envisagez une analyse de corrélation simple. Vous auriez besoin de (1200x1200 + 1200) / 2 cellules dans la matrice de covariance / corrélation. Vous n'avez que 25 points de données. La matrice sera de rang insuffisant à un degré énorme. Qu'est ce que tu vas faire? Globalement, vous avez deux approches simples: des prévisions distinctes et un modèle factoriel.
La première approche est évidente: vous exécutez chaque produit indépendamment. La variation consiste à les regrouper par une caractéristique, par exemple un secteur comme la «fermeture des hommes».
S'il s'agit d'un facteur exogène, vous devez obtenir des bêtas en régressant individuellement la série sur ces facteurs. Pour PCA, vous pouvez faire un PCA robuste et obtenir les premiers facteurs avec leurs poids qui sont vous bêtas.
Ensuite, vous analysez les facteurs et créez un modèle de prévision pour produireF^j et rebranchez-les à votre modèle pour obtenir des prévisions de la demande de produits. Vous pouvez exécuter un modèle de série chronologique pour chaque facteur, même un modèle vectoriel tel que VARMA pour plusieurs facteurs. Maintenant que la dimensionnalité du problème a été réduite, vous pouvez disposer de suffisamment de données pour construire des prévisions chronologiques.
la source
Je ne sais pas si vous êtes intéressé par les solutions basées sur le cloud, mais Amazon met à disposition un algorithme appelé «DeepAR» via AWS SageMaker, comme on le voit ici .
Cet algorithme est spécifiquement destiné à être en mesure d'apprendre de multiples séries temporelles d'entrée afin de créer des prévisions, y compris des caractéristiques statiques et dynamiques; comme on le voit dans cet extrait de la page liée ci-dessus:
Malheureusement, pour autant que je sache, ils ne rendent pas cet algorithme disponible pour une utilisation hors ligne / auto-hébergée.
la source