Je suis impressionné par le forecast
package R , ainsi que par exemple le zoo
package pour les séries temporelles irrégulières et l'interpolation des valeurs manquantes.
Mon application est dans le domaine des prévisions de trafic du centre d'appels, donc les données le week-end sont (presque) toujours manquantes, ce qui peut être bien géré zoo
. De plus, certains points discrets peuvent être manquants, j'utilise juste des R NA
pour cela.
Le truc, c'est que toute la belle magie du paquet de prévisions, comme eta()
, auto.arima()
etc., semble s'attendre à des ts
objets simples , c'est-à-dire des séries temporelles équidistantes ne contenant aucune donnée manquante. Je pense que les applications du monde réel pour les séries temporelles à espacement unique existent certainement, mais - à mon avis - très limitées.
Le problème de quelques NA
valeurs discrètes peut être facilement résolu en utilisant l'une des fonctions d'interpolation proposées dans zoo
ainsi que par forecast::interp
. Après cela, je lance les prévisions.
Mes questions:
- Quelqu'un suggère-t-il une meilleure solution?
(ma principale question) Au moins dans mon domaine d'application, la prévision du trafic du centre d'appels (et pour autant que je puisse imaginer la plupart des autres domaines problématiques), les séries temporelles ne sont pas espacées. Au moins, nous avons un programme récurrent de "jours ouvrables" ou quelque chose du genre. Quelle est la meilleure façon de gérer cela et d'utiliser toujours toute la magie du package de prévisions?
Dois-je simplement "compresser" la série chronologique pour remplir les week-ends, faire les prévisions, puis "gonfler" à nouveau les données pour réinsérer les valeurs NA dans les week-ends? (Ce serait dommage, je pense?)
Est-il prévu de rendre le package de prévisions entièrement compatible avec les packages de séries chronologiques irrégulières comme zoo ou son? Si oui, quand et si non, pourquoi pas?
Je suis assez nouveau dans les prévisions (et les statistiques en général), donc je pourrais oublier quelque chose d'important.
la source
auto.arima
peut gérer les valeurs manquantes.Réponses:
Je ne suis pas un expert en R, alors peut-être qu'il existe un moyen plus simple, mais je l'ai déjà rencontré auparavant. Ce que j'ai fait auparavant, c'est implémenter une fonction qui mesure la distance (en unités de temps) entre les dates réelles et l'enregistre dans une nouvelle colonne de la série chronologique existante. Nous avons donc quelque chose comme:
De cette façon, si votre série temporelle n'est pas encore associée à une série réelle de points dans le temps (ou au mauvais format ou autre), vous pouvez toujours travailler avec.
Ensuite, vous écrivez une fonction qui crée pour vous une nouvelle série chronologique, comme ceci:
Tout d'abord, vous calculez combien d'unités de temps la série temporelle aurait réellement entre les dates de votre choix et créez cette chronologie dans zoo ou ts ou quel que soit le choix avec des valeurs vides.
Deuxièmement, vous prenez votre tableau de séries chronologiques incomplet et, à l'aide d'une boucle, remplissez les valeurs dans la chronologie correcte, selon les limites de votre choix. Lorsque vous tombez sur une ligne où la distance unitaire n'est pas un (les jours (les unités) sont manquants), vous remplissez des valeurs interpolées.
Maintenant, puisque c'est votre fonction, vous pouvez réellement choisir comment interpoler. Par exemple, vous décidez que si la distance est inférieure à deux unités, vous utilisez une interpolation linéaire standard. Si une semaine est manquante, vous faites autre chose et si un certain seuil de dates manquantes est atteint, vous donnez un avertissement sur les données - vraiment tout ce que vous voulez imaginer.
Si la boucle atteint la date de fin, vous retournez vos nouveaux ts.
L'avantage d'une telle fonction est que vous pouvez utiliser différentes interpolations ou procédures de traitement en fonction de la longueur de l'écart et renvoyer une série créée proprement au format de votre choix. Une fois écrit, il vous permet de tirer des ts propres et agréables de toute sorte de données tabulaires. J'espère que cela vous aide d'une manière ou d'une autre.
la source
Vous devez être très prudent lorsque vous appliquez une interpolation avant de poursuivre le traitement statistique. Le choix que vous faites pour votre interpolation introduit un biais dans vos données. C'est quelque chose que vous voulez absolument éviter, car cela pourrait altérer la qualité de vos prévisions. À mon avis pour les valeurs manquantes telles que celles que vous avez mentionnées, qui sont régulièrement espacées dans le temps et qui correspondent à un arrêt des activités, il serait peut-être plus correct de laisser ces jours hors de votre modèle. Dans le petit monde de votre centre d'appels (le modèle que vous construisez à ce sujet), il serait peut-être préférable de considérer que le temps s'arrête tout simplement lorsqu'il est fermé au lieu d'inventer les mesures d'une activité inexistante. D'un autre côté, le modèle ARIMA a été construit statistiquement sur l'hypothèse que les données sont également espacées. Autant que je sache, il n'y a pas d'adaptation d'ARIMA à votre cas. Si vous manquez quelques mesures les jours ouvrables réels, vous pourriez être obligé d'utiliser l'interpolation.
la source
Je n'interpolerais pas les données avant d'estimer le modèle sur ces données, comme l'a noté @Remi. C'est une mauvaise idée. Un exemple extrême: imaginez que vous disposez de deux points de données janvier 2013 et janvier 2014. Maintenant, interpolez 10 points mensuels entre février et décembre 2013 et exécutez une régression sur la date mensuelle. En réalité, ça ne va pas être si mauvais, mais c'est la même idée: vous gonflerez vos statistiques au mieux.
La voie à suivre consiste à utiliser des méthodes de séries chronologiques qui gèrent les données manquantes. Par exemple, les méthodes d'espace d'état. Jetez un œil au package astsa R. Il est accompagné d'un excellent livre sur l'analyse des séries chronologiques. Cela gérera bien les données manquantes. Matlab a maintenant une fonctionnalité similaire dans le package ssm . Vous devez apprendre à convertir vos modèles sous forme d'espace d'état, mais vous devez quand même apprendre cela si vous voulez vous éloigner de la
auto.arima
"magie".la source