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?
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 baseets
et voir si vous obtenez les mêmes résultats?Réponses:
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:
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:
la source
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:
la source
@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:
Les statistiques du modèle final sont ici. Le graphique Actual / Fit and Forecast est intéressant car il met en évidence l'activité exceptionnelle.
la source