Comment gérer plusieurs séries de temps simultanément?

14

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.

Katatonia
la source
3
Le package le plus avancé pour l'analyse de séries chronologiques de grande dimension que je connaisse se trouve bigtimedans R. Peut-être pourriez-vous appeler R depuis Python pour pouvoir l'utiliser.
Richard Hardy

Réponses:

11

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 ayez 1200 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 MTSpackage et le bigtimepacakage in Ront certaines capacités pour gérer les séries temporelles multivariées, il serait donc également utile de vous familiariser avec ces packages.

Réintégrer Monica
la source
Le progiciel le plus avancé pour l'analyse de séries chronologiques de grande dimension que je connaisse se trouve bigtimedans R. Pour autant que je sache MTS, 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.
Richard Hardy
@Richard Hardy: Merci --- J'ai modifié ma réponse pour l'inclure.
Rétablir Monica le
1
Une bonne façon de procéder serait d'envisager un VAR bayésien, ou plus précisément le grand modèle VAR bayésien.
Graeme Walsh
6

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.

entrez la description de l'image ici

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.

Skander H.
la source
1
En aparté . AUTOBOX implémente le type de modélisation hiérarchique auquel vous vous êtes référé en utilisant les totaux de GROUPE comme une série de conduite possible afin d'AIDER la prédiction des ENFANTS à l'aide des modèles SARMAX. L'incertitude dans les prévisions de l'enfant est également une fonction cumulative de l'incertitude chez le parent tout en incorporant la possibilité d'impulsions futures dans les deux .. Ravi de voir quelqu'un d'autre utiliser cette approche.
IrishStat
Amazon a récemment ouvert l'algorithme DeepAR open source sous le cadre GluonTS qui exploite le cadre MxNet, bien que je trouve la documentation un peu manquante à ce stade. aws.amazon.com/blogs/opensource/…
hardikudeshi
5

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.

IrishStat
la source
1
Ça semble intéressant. Juste un petit problème: même dans quelque chose d'aussi simple qu'un VAR, chaque série obtient sa propre équation, donc la nécessité d'avoir seulement 1 modèle avec 1 ensemble de paramètres n'est pas un problème. À moins que vous ne suggériez plusieurs modèles pour la même série, ce qui pourrait être une bonne idée du point de vue des combinaisons de prévisions.
Richard Hardy
« ? pour former un modèle unique pour la prévision de la demande de tous les 1200 produits »: objectif , je pris littéralement comme 1 équation de type 1 jeu de fixes / paramètres globaux estimés de toutes les séries chronologiques 1200 » Peut - être que je trop lu.
IrishStat
Ou peut-être que je me suis trompé.
Richard Hardy
3

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».

je=jFjβjje+ejeFj

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 produire F^jet 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.

Aksakal presque sûrement binaire
la source
Je vois votre point sur 25 périodes pour une très courte série chronologique, mais que faire si ce sont des valeurs mensuelles? Ensuite, le PO a deux ans de données mensuelles, ce qui est suffisant pour saisir une certaine saisonnalité, ou au moins pour utiliser un lissage exponentiel simple, non?
Skander H.
@SkanderH., 25 points peuvent suffire pour exécuter une série (c'est-à-dire chaque série seule) ou l'agrégat. Mon point est qu'il ne suffit pas d'exécuter cela en tant que système.
Aksakal presque sûrement binaire le
Ou ils peuvent être des facteurs exogènes, par exemple ceux que vous avez obtenus avec l'analyse PCA. Peut-être endogène ?
Richard Hardy
1

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:

L'entrée d'apprentissage pour l'algorithme DeepAR est une ou, de préférence, plusieurs séries temporelles cibles qui ont été générées par le même processus ou des processus similaires. Sur la base de cet ensemble de données d'entrée, l'algorithme forme un modèle qui apprend une approximation de ce processus / processus et l'utilise pour prédire comment les séries temporelles cibles évoluent. Chaque série temporelle cible peut éventuellement être associée à un vecteur de caractéristiques catégorielles statiques (indépendantes du temps) fournies par le champ cat et à un vecteur de séries chronologiques dynamiques (dépendant du temps) fournies par le champ dynamic_feat.

Malheureusement, pour autant que je sache, ils ne rendent pas cet algorithme disponible pour une utilisation hors ligne / auto-hébergée.

mbrig
la source