Comment diviser un ensemble de données pour la prédiction de séries chronologiques?


22

J'ai des données historiques sur les ventes d'une boulangerie (quotidiennement, sur 3 ans). Maintenant, je veux construire un modèle pour prédire les ventes futures (en utilisant des fonctionnalités comme le jour de la semaine, les variables météorologiques, etc.).

Comment dois-je diviser l'ensemble de données pour ajuster et évaluer les modèles?

  1. Doit-il s'agir d'un découpage chronologique train / validation / test?
  2. Est-ce que je ferais alors un réglage hyperparamétrique avec le train et l'ensemble de validation?
  3. La validation croisée (imbriquée) est-elle une mauvaise stratégie pour un problème de série chronologique?


EDIT

Voici quelques liens que j'ai rencontrés après avoir suivi l'URL suggérée par @ ene100:

  • Rob Hyndman décrivant "l'origine des prévisions glissantes" en théorie et en pratique (avec code R)
  • d'autres termes pour l' origine des prévisions glissantes sont «optimisation de marche en avant» ( ici ou ici ), «horizon glissant» ou «origine mobile»
  • il semble que ces techniques ne seront pas intégrées dans scikit-learn dans un avenir proche, car «la demande et la séminalité de ces techniques ne sont pas claires» (indiqué ici ).

Et ceci est une autre suggestion pour la validation croisée des séries chronologiques.

Réponses:


8

Ce lien du blog de Rob Hyndman contient des informations qui peuvent être utiles: http://robjhyndman.com/hyndsight/crossvalidation/

D'après mon expérience, la division des données en ensembles chronologiques (année 1, année 2, etc.) et la vérification de la stabilité des paramètres dans le temps sont très utiles pour construire quelque chose de robuste. De plus, si vos données sont saisonnières ou ont un autre moyen évident de se diviser en groupes (par exemple, les régions géographiques), la vérification de la stabilité des paramètres dans ces sous-groupes peut également aider à déterminer la robustesse du modèle et s'il est logique de l'adapter. des modèles distincts pour des catégories de données distinctes.

Je pense que les tests statistiques peuvent être utiles mais le résultat final devrait également passer le "test des odeurs".


3

1) Techniquement parlant, vous n'avez pas besoin de tester hors échantillon si vous utilisez l'AIC et des critères similaires car ils aident à éviter le sur-ajustement.

3) Je ne vois pas comment vous pouvez faire le CV standard car cela implique de former un modèle de série chronologique avec quelques valeurs manquantes. Au lieu de cela, essayez d'utiliser une fenêtre mobile pour la formation et prédisez la réponse à un ou plusieurs points qui suivent la fenêtre.


3
L'AIC dans les séries chronologiques est souvent basé sur une erreur de prévision d'une période à venir. Il ne dit pas grand-chose sur les performances prévisionnelles dynamiques de la période n à venir. Par conséquent, ce n'est absolument pas suffisant.
Aksakal

Pourriez-vous fournir une référence?
James

1

J'aborde souvent les problèmes dans une perspective bayésienne. Dans ce cas, j'envisagerais d' utiliser la surimputation comme stratégie. Cela signifie définir une probabilité pour vos données, mais omettre certains de vos résultats. Traitez ces valeurs comme manquantes et modélisez ces résultats manquants à l'aide de leurs covariables correspondantes. Faites ensuite pivoter les données omises. Vous pouvez le faire à l'intérieur, par exemple, d'une procédure CV multipliée par 10.

Lorsqu'il est implémenté dans un programme d'échantillonnage, cela signifie qu'à chaque étape, vous dessinez une valeur candidate de votre valeur de données omise (à côté de vos paramètres) et évaluez sa probabilité par rapport à votre modèle proposé. Après avoir atteint stationnarité, vous avez contrefactuel valeurs échantillonnées compte tenu de votre modèle que vous pouvez utiliser pour évaluer l' erreur de prédiction: « qu'est - ce que mon modèle aurait ressemblé en l'absence de ces valeurs » ces échantillons répondre à la question Notez que ces prédictions hériteront également de l'incertitude de l'incertitude présente dans les estimations de coefficient, donc lorsque vous collectez toutes vos valeurs prédites pour, par exemple le 1er mars 2010 ensemble, vous aurez une distribution des prédictions pour cette date.

Le fait que ces valeurs soient échantillonnées signifie que vous pouvez toujours utiliser des termes d'erreur qui dépendent de la disponibilité d'une série de données complète (par exemple, moyenne mobile), car vous avez une valeur de résultat échantillonnée disponible à chaque étape.


1

Dans votre cas, vous n'avez pas beaucoup d'options. Vous n'avez qu'une seule boulangerie, semble-t-il. Ainsi, pour exécuter un test hors échantillon, votre seule option est la séparation du temps, c'est-à-dire que l'échantillon d'apprentissage se ferait du début à un moment récent, et le maintien serait de ce point à aujourd'hui.

yt=F(t)+εtF(t)ys<t


Cela semble prometteur. Quel est l'indice "s" dans y_s <= t?
passez le

tyss<t

Je suppose que mes ventes de boulangerie dépendent plutôt de facteurs exogènes. Je ne pense pas que ce soit un modèle de série chronologique strictement dynamique comme, par exemple, les cours des actions. Dans mes données, l'erreur moyenne moyenne avec un CV habituel de 5 fois n'est que légèrement supérieure à un CV de série temporelle de 5 fois qui préserve l'ordre chronologique des plis comme décrit ici (par exemple, 30,7 contre 33,8 pour un ExtraTreesRegressor) . Vous ne savez pas s'il s'agit d'un moyen valide de tester empiriquement un modèle dynamique?
passez le

Quelque chose comme ARIMA serait un modèle dynamique. Les ventes sont généralement persistantes, c'est-à-dire que les ventes d'aujourd'hui sont comme celles d'hier.
Aksakal

0

Avertissement: La méthode décrite ici n'est pas basée sur une lecture approfondie de la littérature. C'est ma meilleure tentative d'improviser une méthode CV K-fold pour une analyse de séries temporelles multivariées avec des longueurs de fenêtre d'entrée relativement courtes (en supposant une dépendance faible / faible sur des périodes de temps plus longues), où il y avait un problème avec la présence non homogène de sources de données sur la période de collecte des données.

La série d'observations est d'abord transformée en une série de fenêtres d'historique d'observation de longueur window_length et avec étape 1 entre les fenêtres (pas de foulée). Ensuite, le principe est de diviser le jeu de données de fenêtre en "fragments" plusieurs fois plus longtemps que window_length (mais beaucoup plus que le nombre d'instances de modèle), et de distribuer les fragments (comme les cartes à jouer) en tant que données de validation pour séparer les instances de modèle. Pour garder les modèles plus nettement séparés, une fenêtre de quarantaine de window_length au début de chaque fragment est exclue de toute formation.

Les modèles sont entraînés sur tous les fragments sauf le leur, et la validation se fait sur leurs propres fragments. La validation de la collection / ensemble de modèles se fait en sommant l'erreur de validation sur tous les fragments, chaque fragment étant traité par son sous-modèle correspondant. Les tests sur les données invisibles peuvent être effectués en utilisant une moyenne (ou une autre combinaison appropriée) des sorties de tous les modèles formés.

Cette méthode est destinée à réduire la dépendance à l'égard du système (et des sources de données) étant les mêmes sur toute la période de collecte des données. Il est également destiné à donner à chaque partie grossière des données la même influence sur le modèle. Notez que pour ne pas permettre aux fenêtres de quarantaine de nuire à la formation, il est un point que la longueur du fragment ne s'aligne pas trop bien avec les périodes qui (devraient) apparaître dans les données, telles que (généralement) les cycles quotidiens, hebdomadaires et annuels.

Le modèle d'ensemble peut peut-être mal gérer des données complètement nouvelles. (Je ne sais pas encore.)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.