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?
- Doit-il s'agir d'un découpage chronologique train / validation / test?
- Est-ce que je ferais alors un réglage hyperparamétrique avec le train et l'ensemble de validation?
- 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.
la source
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.
la source
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.
la source
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.)
la source