Prévision de séries chronologiques avec données quotidiennes: ARIMA avec régresseur

15

J'utilise une série chronologique quotidienne de données de vente qui contient environ 2 ans de points de données quotidiens. Sur la base de certains tutoriels / exemples en ligne, j'ai essayé d'identifier la saisonnalité des données. Il semble qu'il y ait une périodicité / saisonnalité hebdomadaire, mensuelle et probablement annuelle.

Par exemple, il existe des jours de paie, en particulier le 1er jour de paie du mois qui dure quelques jours au cours de la semaine. Il existe également des effets spécifiques de vacances, clairement identifiables en notant les observations.

Équipé de certaines de ces observations, j'ai essayé ce qui suit:

  1. ARIMA (avec Arimaet à auto.arimapartir du package de prévisions R), en utilisant le régresseur (et d'autres valeurs par défaut nécessaires dans la fonction). Le régresseur que j'ai créé est essentiellement une matrice de valeurs 0/1:

    • Variables à 11 mois (n-1)
    • 12 variables de vacances
    • Impossible de comprendre la partie paie ... car c'est un effet un peu plus compliqué que je ne le pensais. L'effet de paie fonctionne différemment, selon le jour de semaine du 1er du mois.

    J'ai utilisé 7 (c'est-à-dire la fréquence hebdomadaire) pour modéliser la série chronologique. J'ai essayé le test - prévoyant 7 jours à la fois. Les résultats sont raisonnables: la précision moyenne pour une prévision de 11 semaines s'élève à RMSE hebdomadaire moyenne à 5%.

  2. Modèle TBATS (de l'ensemble de prévisions R) - utilisant la saisonnalité multiple (7, 30,4375, 365,25) et évidemment aucun régresseur. La précision est étonnamment meilleure que le modèle ARIMA à une moyenne hebdomadaire de RMSE de 3,5%.

    Dans ce cas, le modèle sans erreur ARMA fonctionne légèrement mieux. Maintenant, si j'applique les coefficients pour seulement les effets de vacances du modèle ARIMA décrit dans # 1, aux résultats du modèle TBATS, le RMSE moyen hebdomadaire s'améliore à 2,95%

Maintenant, sans avoir beaucoup d'expérience ou de connaissances sur les théories sous-jacentes de ces modèles, je suis dans un dilemme si cette approche TBATS est même valable. Même s'il améliore considérablement le RMSE au cours du test de 11 semaines, je me demande s'il peut maintenir cette précision à l'avenir. Ou même si l'application des effets de vacances d'ARIMA au résultat TBATS est justifiable. Toutes les pensées de tous / de tous les contributeurs seront très appréciées.

Lien pour les données de test

Remarque: effectuez "Enregistrer le lien sous" pour télécharger le fichier.

CKI
la source
1
Bienvenue sur le site, @CKI. Si vous pouvez télécharger vos données quelque part sur le Web, vous pouvez publier un lien ici.
gung - Rétablir Monica
Je souhaite en savoir plus sur la configuration des régresseurs.
orbital
Les variables muettes 6 jours de la semaine, les variables muettes 11 mois et les jours fériés sont de simples régresseurs 0/1. Le jour fixe du mois, l'avance et le décalage autour des vacances, la tendance temporelle, le pouls saisonnier et le pouls sont basés sur une recherche heuristique.
Tom Reilly
Alors CKI, comment l'avez-vous résolu?
Tom Reilly
Bonjour CKI, pouvez-vous partager une partie de votre script R utilisé pour créer la matrice de saisonnalité
Ahmed

Réponses:

9

Vous devez évaluer des modèles et des prévisions de différentes origines à travers différents horizons et non pas un seul chiffre afin d'évaluer une approche.

Je suppose que vos données proviennent des États-Unis. Je préfère plus de 3 ans de données quotidiennes, car vous pouvez avoir deux jours fériés sur un week-end et ne pas lire en semaine. Il semble que votre impact de Thanksgiving soit un jour de congé en 2012 ou qu'il y ait eu une erreur d'enregistrement d'une sorte et que le modèle ait manqué l'effet de Thanksgiving.

Les janvier sont généralement bas dans l'ensemble de données si vous regardez en% de l'année. Les week-ends sont hauts. Les mannequins reflètent ce comportement .... MONTH_EFF01, FIXED_EFF_N10507, FIXED_EFF_N10607

J'ai trouvé que l'utilisation d'un composant AR avec des données quotidiennes suppose que le jour des deux dernières semaines du modèle de semaine est la façon dont le modèle est en général, ce qui est une grande hypothèse. Nous avons commencé avec 11 mannequins mensuels et 6 mannequins quotidiens. Certains ont abandonné le modèle. B ** 1 signifie qu'il y a un impact de retard le lendemain des vacances. Il y avait 6 jours spéciaux du mois (les jours 2,3,5,21,29,30 ---- 21 pourraient être faux?) Et 3 tendances temporelles, 2 légumineuses saisonnières (où un jour de la semaine a commencé à s'écarter de la typique, un 0 avant ces données et un 1 tous les 7 jours après) et 2 valeurs aberrantes (notez l'action de grâce!) Cela a pris un peu moins de 7 minutes pour fonctionner. Téléchargez tous les résultats ici www.autobox.com/se/dd/daily.zip

Il comprend une feuille XLS rapide et sale pour vérifier si le modèle a du sens. Bien sûr, les XLS% sont en fait mauvais car ce sont des références brutes.

Essayez d'estimer ce modèle:

Y(T) =  .53169E+06                                                                                        
       +[X1(T)][(+  .13482E+06B** 1)]                                       M_HALLOWEEN
       +[X2(T)][(+  .17378E+06B**-3)]                                       M_JULY4TH
       +[X3(T)][(-  .11556E+06)]                                            M_MEMORIALDAY
       +[X4(T)][(-  .16706E+06B**-4+  .13960E+06B**-3-  .15636E+06B**-2                                                 
       -  .19886E+06B**-1)]                                                 M_NEWYEARS
       +[X5(T)][(+  .17023E+06B**-2-  .26854E+06B**-1-  .14257E+06B** 1)]   M_THANKSGIVI
       +[X6(T)][(-  71726.    )]                                            MONTH_EFF01
       +[X7(T)][(+  55617.    )]                                            MONTH_EFF02
       +[X8(T)][(+  27827.    )]                                            MONTH_EFF03
       +[X9(T)][(-  37945.    )]                                            MONTH_EFF09
       +[X10(T)[(-  23652.    )]                                            MONTH_EFF10
       +[X11(T)[(-  33488.    )]                                            MONTH_EFF11
       +[X12(T)[(+  39389.    )]                                            FIXED_EFF_N10107
       +[X13(T)[(+  63399.    )]                                            FIXED_EFF_N10207
       +[X14(T)[(+  .13727E+06)]                                            FIXED_EFF_N10307
       +[X15(T)[(+  .25144E+06)]                                            FIXED_EFF_N10407
       +[X16(T)[(+  .32004E+06)]                                            FIXED_EFF_N10507
       +[X17(T)[(+  .29156E+06)]                                            FIXED_EFF_N10607
       +[X18(T)[(+  74960.    )]                                            FIXED_DAY02
       +[X19(T)[(+  39299.    )]                                            FIXED_DAY03
       +[X20(T)[(+  27660.    )]                                            FIXED_DAY05
       +[X21(T)[(-  33451.    )]                                            FIXED_DAY21
       +[X22(T)[(+  43602.    )]                                            FIXED_DAY29
       +[X23(T)[(+  68016.    )]                                            FIXED_DAY30
       +[X24(T)[(+  226.98    )]                                            :TIME TREND        1                   1/  1   1/ 3/2011   I~T00001__010311stack
       +[X25(T)[(-  133.25    )]                                            :TIME TREND      423                  61/  3   2/29/2012   I~T00423__010311stack
       +[X26(T)[(+  164.56    )]                                            :TIME TREND      631                  91/  1   9/24/2012   I~T00631__010311stack
       +[X27(T)[(-  .42528E+06)]                                            :SEASONAL PULSE  733                 105/  5   1/ 4/2013   I~S00733__010311stack
       +[X28(T)[(-  .33108E+06)]                                            :SEASONAL PULSE  370                  53/  6   1/ 7/2012   I~S00370__010311stack
       +[X29(T)[(-  .82083E+06)]                                            :PULSE           326                  47/  4  11/24/2011   I~P00326__010311stack
       +[X30(T)[(+  .17502E+06)]                                            :PULSE           394                  57/  2   1/31/2012   I~P00394__010311stack
      +                    +   [A(T)]
Tom Reilly
la source