Fonction ETS (), comment éviter des prévisions non conformes aux données historiques?

16

Je travaille sur un alogorithme en R pour automatiser un calcul de prévision mensuelle. J'utilise, entre autres, la fonction ets () du package de prévisions pour calculer les prévisions. Cela fonctionne très bien.

Malheureusement, pour certaines séries temporelles spécifiques, le résultat que j'obtiens est bizarre.

Veuillez trouver ci-dessous le code que j'utilise:

train_ts<- ts(values, frequency=12)
fit2<-ets(train_ts, model="ZZZ", damped=TRUE, alpha=NULL, beta=NULL, gamma=NULL, 
            phi=NULL, additive.only=FALSE, lambda=TRUE, 
            lower=c(0.0001,0.0001,0.0001,0.8),upper=c(0.9999,0.9999,0.9999,0.98), 
            opt.crit=c("lik","amse","mse","sigma","mae"), nmse=3, 
            bounds=c("both","usual","admissible"), ic=c("aicc","aic","bic"),
            restrict=TRUE)  
ets <- forecast(fit2,h=forecasthorizon,method ='ets')   

Veuillez trouver ci-dessous l'ensemble de données d'historique concerné:

 values <- c(27, 27, 7, 24, 39, 40, 24, 45, 36, 37, 31, 47, 16, 24, 6, 21, 
35, 36, 21, 40, 32, 33, 27, 42, 14, 21, 5, 19, 31, 32, 19, 36, 
29, 29, 24, 42, 15, 24, 21)

Ici, sur le graphique, vous verrez les données historiques (noir), la valeur ajustée (vert) et les prévisions (bleu). La prévision n'est certainement pas conforme à la valeur ajustée.

Avez-vous une idée sur la façon de "lier" le prévisionnel pour qu'il soit "en ligne" avec les ventes historiques? entrez la description de l'image ici

mehdik
la source
C'est l'une des prévisions les plus étranges que j'ai rencontrées ets. La moyenne / niveau des données historiques est d'environ 20 et la moyenne / niveau des prévisions est d'environ 50. Vous ne savez pas pourquoi cela se produirait? pouvez-vous exécuter une base etset voir si vous obtenez les mêmes résultats?
prévisionniste
Merci beaucoup pour votre temps et votre réponse! Je suis d'accord avec vous sur le fait que le dernier point peut être considéré comme des valeurs aberrantes (21 contre 7 ou 6 ou 5 l'année précédente). Il peut être détecté tel quel en utilisant un intervalle de confiance basé sur des données antérieures et doit être propre avant de prévisions statistiques. Mais si l'on suppose qu'il s'agit d'une vente "normale", existe-t-il un moyen d'éviter ce comportement en délimitant la prévision, ou du moins d'être prévenu que la prévision est deux fois plus importante que l'histoire? Les limites alpha, bêta et gamma ne sont pas pertinentes dans ce cas. Encore une fois, merci beaucoup pour votre aide sur ce point!
MehdiK
J'ai voté pour votre réponse, maintenant je suppose que vous pouvez laisser des commentaires. À l'avenir, veuillez laisser le commentaire directement sous une réponse afin que les personnes qui ont répondu le remarquent. Merci
prévisionniste
ETS et tous les modèles de séries chronologiques univariés supposent que le comportement passé prédit le comportement futur. S'il y a des points de données anormaux, vous devez informer le modèle de l'existence d'une anomalie. Le modèle ne saura pas que la valeur est normale, vous devez spécifier dans le modèle que la valeur est aberrante.
prévisionniste

Réponses:

10

Comme l'a souligné @forecaster, cela est dû aux valeurs aberrantes à la fin de la série. Vous pouvez voir clairement le problème si vous tracez la composante du niveau estimé par-dessus:

plot(forecast(fit2))
lines(fit2$states[,1],col='red')

A noter l'augmentation du niveau en fin de série.

Une façon de rendre le modèle plus robuste aux valeurs aberrantes est de réduire l'espace des paramètres de sorte que les paramètres de lissage doivent prendre des valeurs plus petites:

fit2 <- ets(train_ts, upper=c(0.3,0.2,0.2,0.98))  
plot(forecast(fit2))

entrez la description de l'image ici

Rob Hyndman
la source
quel est l'équivalent prévisions :: auto.arima de votre deuxième suggestion pour la gestion des valeurs aberrantes?
Brash Equilibrium
1
Avec les modèles ARIMA, vous pouvez gérer les valeurs aberrantes avec des variables fictives définies sur 1 aux moments problématiques. Utilisez simplement l'argument xreg dans auto.arima ou Arima.
Rob Hyndman
6

C'est le cas classique d'avoir des valeurs aberrantes à la fin de la série et ses conséquences inattendues. Le problème avec vos données est que les deux derniers points sont des valeurs aberrantes , vous voudrez peut-être identifier et traiter les valeurs aberrantes avant d'exécuter les algorithmes de prévision. Je mettrai à jour ma réponse et mon analyse plus tard dans la journée sur certaines stratégies pour identifier les valeurs aberrantes. Voici la mise à jour rapide.

Lorsque je relance ets avec les deux derniers points de données supprimés, j'obtiens une prévision raisonnable. Veuillez voir ci-dessous:

values.clean <- c(27, 27, 7, 24, 39, 40, 24, 45, 36, 37, 31, 47, 16, 24, 6, 21, 
                  35, 36, 21, 40, 32, 33, 27, 42, 14, 21, 5, 19, 31, 32, 19, 36, 
                  29, 29, 24, 42, 15)## Last two points removed

train_ts.clean<- ts(values.clean, frequency=12)
fit2.clean<-ets(train_ts.clean)  
ets.f.clean <- forecast(fit2.clean,h=24)
plot(ets.f.clean)

entrez la description de l'image ici

prévisionniste
la source
5

@prévisionnistevous avez raison de dire que la dernière valeur est une valeur aberrante MAIS la période 38 (l'avant-dernière valeur) n'est pas une valeur aberrante lorsque vous tenez compte des tendances et de l'activité saisonnière. Il s'agit d'un moment de définition / d'enseignement pour tester / évaluer d'autres approches robustes. Si vous n'identifiez pas et ne corrigez pas les anomalies, la variance est gonflée et les autres éléments sont introuvables. La période 32 est également une valeur aberrante. Les périodes 3,32 et 1 sont également des valeurs aberrantes. Il y a une tendance statistiquement significative dans la série pour les 17 premières valeurs mais diminue par la suite à partir de la période 18. Il y a donc vraiment deux tendances dans les données. La leçon à tirer ici est que les approches simples qui ne supposent aucune tendance ou une forme particulière de tendance et / ou supposent tacitement une forme spécifique du processus autorégressif doivent être sérieusement remises en question. Pour aller de l'avant, une bonne prévision devrait tenir compte de la poursuite éventuelle de l'activité exceptionnelle trouvée au point ultime (période 39). Il est impossible d'extraire cela des données.

Il s'agit d'un modèle éventuellement utile:

entrez la description de l'image iciLes statistiques du modèle final sont ici. entrez la description de l'image iciLe graphique Actual / Fit and Forecast est intéressant car il met en évidence l'activité exceptionnelle.entrez la description de l'image ici

IrishStat
la source
+1 vos réponses sont toujours instructives et instructives. Je comprends le pouls et le temps, les effets fixes sont-ils un modèle purement déterministe?
prévisionniste
@forecaster Oui, les effets fixes / impulsions saisonnières sont purement dterministes ... tout comme les impulsions / changements de niveau et les tendances de l'heure locale. De plus, le mois d'août (8) n'était pas significatif et n'était pas dans la liste définitive.
IrishStat