Calcul de la précision des prévisions

9

Nous utilisons STL (implémentation R) pour prévoir les données de séries chronologiques.

Chaque jour, nous exécutons des prévisions quotidiennes. Nous aimerions comparer les valeurs prévues aux valeurs réelles et identifier l'écart moyen. Par exemple, nous avons effectué des prévisions pour demain et obtenu des points de prévisions, nous aimerions comparer ces points de prévisions avec des données réelles que nous obtiendrons demain. Je suis conscient que les valeurs des prévisions et les données réelles peuvent ne pas correspondre la plupart du temps, c'est l'une des raisons pour lesquelles nous aimerions garder une trace de notre précision quotidienne.

Maintenant, nous essayons d'identifier quelle est la meilleure approche pour résoudre ce problème? tout pointeur d'aide serait apprécié.

J'ai examiné la question de la mesure de la précision des prévisions , mais il semble qu'elle soit liée à la comparaison des modèles plutôt qu'au calcul de la précision avec des valeurs réelles.

J'ai examiné l' implémentation de la fonction de précision dans R , mais j'ai confondu avec deux questions:

1) Cela fonctionnera-t-il sur des données réelles par rapport à des données de prévision, car la plupart du tutoriel dit que "données de test" vs "données de prévision"

2) Il semble que la fonction de précision soit un tableau de valeurs plutôt qu'un% d'écart.

kosa
la source
1
Afin d'obtenir une bonne réponse, vous devez poser la bonne question - et cela peut être frustrant. Tout le monde veut gouverner le monde et cela nécessite une connaissance préalable. Si j'avais une parfaite connaissance des stocks de demain mais que je l'avais aujourd'hui, je pourrais gagner une tonne d'argent / pouvoir / opportunité / gloire / etc. Si je regardais votre problème, je voudrais voir un histogramme (ou eCDF) de l'erreur prédictive. Je voudrais peut-être "gémir" les entrées de la prévision et regarder sa moyenne et sa variation, et comparer l'erreur à celles-ci. Vous devez comprendre votre erreur pour la corriger.
EngrStudent
1
Pour les non-initiés, qu'est-ce que la STL?
shadowtalker
@EngrStudent: "Vous devez comprendre votre erreur pour la corriger" - Dans cette déclaration elle-même, nous avons deux parties. J'essaie de trouver des approches possibles pour la première section elle-même. La méthodologie que je choisis m'aidera à choisir des stratégies pour la partie 2.
kosa
1
La moyenne n'est pas la même chose que le comportement d'un système. L'écart type n'est pas la même chose que le comportement d'un système. Ces deux mesures sont des statistiques récapitulatives du comportement du système mesuré. L'erreur n'est pas la précision. L'erreur n'est pas l'incertitude. Ces deux mesures sont des statistiques sommaires d'erreur analogues à la moyenne et à l'écart-type. Tout comme il existe de nombreuses infinités de mesures du comportement du système, il existe de nombreuses infinités de mesures du comportement d'erreur. Quelle est votre rubrique? comment mesurer une bonne façon de penser à l'erreur?
EngrStudent
1
@Nambari - bienvenue dans le monde des "sages". Le début de la connaissance est de savoir que vous ne savez rien - d'être un étudiant. J'essaie d'être toujours en train de m'apprendre et d'essayer d'être corrigée par quiconque dit la vérité. Si vous jouez avec l'outil Eureqa et essayez des exemples de données appropriés à la fois pour chaque forme générale d '"expression cible" et pour chaque "mesure d'erreur", vous commencerez à connaître cette chose profonde et profonde. Je n'ai pas de bonne réponse. L'Hospital (alias L'Hopital) a formulé la première expression la moins carrée en 1696. Un bon début est le cas d'utilisation - où l'esprit entre en jeu. Qu'est-ce que c'est?
EngrStudent

Réponses:

13

Il existe de nombreuses façons différentes de mesurer la précision des prévisions, et la accuracy()fonction du package de prévisions pour R en génère plusieurs. D'après votre commentaire sur "% d'écart", il semble que vous souhaitiez utiliser l'erreur de pourcentage absolu moyen, qui est l'une des mesures fournies par accuracy(). Les mesures les plus courantes de l'exactitude des prévisions sont discutées ici . Vous pourriez vous demander si MAPE est la mesure la plus appropriée pour votre problème ou si l'une des autres mesures est meilleure.

La accuracy()fonction fonctionne sur des données réelles. Les "données de test" sont les données qui n'ont pas été utilisées pour construire les prévisions. Parfois, ils sont disponibles mais ne sont pas utilisés lors du calcul des prévisions (la répartition classique des données en ensembles de formation et de test). Dans d'autres situations, toutes les données disponibles sont utilisées pour calculer les prévisions, puis vous devez attendre qu'il y ait de futures observations disponibles pour les utiliser comme données de test.

Donc, si fest un vecteur de prévisions et xun vecteur d'observations correspondant aux mêmes moments, alors

accuracy(f,x)

fera ce que vous voulez.

Rob Hyndman
la source
"Les mesures basées sur des erreurs en pourcentage ont l'inconvénient d'être infinies ou indéfinies si yi = 0 pour tout i dans la période d'intérêt, et d'avoir des valeurs extrêmes lorsque tout yi est proche de zéro." Je pense que ce sera un problème dans mon cas, car beaucoup de cas réels pourraient être ZÉRO. Je pense calculer MAE et changer le nombre de résultats en "pourcentage". Est-ce que ça fait du sens?
kosa
D'une manière ou d'une autre ma note de remerciement a disparu, merci beaucoup pour votre temps Dr Hyndman!
kosa
2

UNEccurunecy=E(F)-yPrecjesjeon=Vuner[F-y]

MSFE=1nje=1n(Fje-yje)2Fjeyje

Aksakal
la source
Merci de votre réponse! Oui, je ne m'inquiète pas pour l'instant de la précision. Je veux juste savoir l'exactitude, "l'écart de la prévision par rapport aux chiffres réels". Je ne m'inquiète pas d'exécuter quelques modèles pour calculer les erreurs de prévision et choisir le meilleur modèle. Mon seul objectif est de découvrir l'écart entre les valeurs réelles et prévues. Notre modèle est constant ici. Peu importe que notre modèle soit bon ou mauvais pour l'ensemble de données, nous avons juste besoin du nombre d'écarts. Cette question n'est pas liée à la sélection du modèle de réglage fin (ou) du paramètre. J'espère que maintenant je suis clair. Veuillez me faire savoir s'il manque quelque chose.
kosa
@Nambari, si vous avez besoin du "nombre d'écarts", pourquoi n'utilisez-vous pas le nombre d'écarts? Faites une boucle sur les prédictions, comparez-les avec les valeurs réelles et comptez le nombre de cas dans lesquels les prévisions diffèrent des valeurs réelles.
Roman
2

J'ai fait cela dans R, voici mon code pour mes données pour les données dans et hors échantillon:

#accuracy testing for out-of-sample sample#

M<-#data#
deltaT<-#set observations per year,1/4 for quarterly, 1/12 for monthly
horiz<-#set amount of forecasts required
startY<-c(#,#) #set start date
N<-head(M,-horiz)
Nu<-log(Nu)
Nu<-ts(Nu,deltat=deltaT,start=startY)

#Run your forecasting method#
##My forecasting method is arima##

N<-#data#
N<-ts(N,deltat=deltaT,start=startY)
N<-tail(N,horiz)
fitted<-ts(append(fitted(Arimab), fArimab$mean[1]), deltat=deltaT, start = startY) #where Arimab is the ARIMA model and fArimab<-forecast(Arimab, h=horiz*2, simulate= TRUE, fan=TRUE)
N<-log(N)
fitted<-head(fitted,length(N))
error<-N-fitted
percenterror<-100*error/N
plus<-N+fitted
rmse<-function(error)
  sqrt(mean(error^2))
mae<-function(error)
  mean(abs(error))
mape<-function(percenterror)
  mean(abs(percenterror))
smape<-function(error,plus)
  mean(200*abs(error)/(plus))
mse<-function(error)
  mean(error^2)
me<-function(error)
  mean(error)
mpe<-function(percenterror)
  mean(percenterror)
accuracy<-matrix(c("rmse","mae","mape","smape","mse","me","mpe",(round(rmse(error),digits=3)),(round(mae(error),digits=3)),(round(mape(percenterror),digits=3)),(round(smape(error,plus),digits=3)),(round(mse(error),digits=3)),(round(me(error),digits=3)),(round(mpe(percenterror),digits=3))),ncol=2,byrow=FALSE)
View(accuracy,title="Accuracy of ARIMA out sample")

#Accuracy testing for the in sample

M<-#data#
deltaT<-#set observations per year,1/4 for quarterly, 1/12 for monthly
horiz<-#set amount of forecasts required
startY<-c(#,#) #set start date
Nu<-log(Nu)
Nu<-ts(Nu,deltat=deltaT,start=startY)
#run your forecasting method#
fitted<-ts(append(fitted(Arimab), fArimab$mean[1]), deltat=deltaT, start = startY)
N<-exp(Nu)
fitted<-exp(fitted)
fitted<-head(fitted,length(N))
error<-N-fitted
percenterror<-100*error/N
plus<-N+fitted
rmse<-function(error)
  sqrt(mean(error^2))
mae<-function(error)
  mean(abs(error))
mape<-function(percenterror)
  mean(abs(percenterror))
smape<-function(error,plus)
  mean(200*abs(error)/(plus))
mse<-function(error)
  mean(error^2)
me<-function(error)
  mean(error)
mpe<-function(percenterror)
  mean(percenterror)
accuracy<-matrix(c("rmse","mae","mape","smape","mse","me","mpe",(round(rmse(error),digits=3)),(round(mae(error),digits=3)),(round(mape(percenterror),digits=3)),(round(smape(error,plus),digits=3)),(round(mse(error),digits=3)),(round(me(error),digits=3)),(round(mpe(percenterror),digits=3))),ncol=2,byrow=FALSE)
View(accuracy,title="Accuracy of ARIMA in sample")

J'espère que ça aide un peu. si vous voulez mon code complet, je l'exécutais s'il vous plaît demander car c'est très basique

Summer-Jade Gleek'away
la source
1

La réponse courte: pour évaluer la qualité de vos prévisions, utilisez exactement la même mesure que celle utilisée lors de la formation (ajustement) de votre modèle.

La réponse longue:

Afin de choisir une mesure pour la précision de vos prévisions, votre premier besoin de savoir comment vous interprétez vos prévisions. En d'autres termes, que donnez-vous réellement en tant que "prévision"? Est-ce une valeur moyenne? Médian? Valeur la plus probable? La réponse à cette question identifiera de manière unique la mesure de la précision des prévisions. Si vous prévoyez une moyenne, vous devez utiliser l'écart quadratique moyen comme mesure de la précision des prévisions. Si vous prévoyez une médiane, vous devez utiliser la déviation absolue moyenne comme mesure de la précision.

Je développerai un peu ce point. Supposons que vous fassiez une prédiction / prévision pour demain. Supposons également que pour toute valeur que vous pourriez observer demain, vous avez une probabilité correspondante d'être observée. Par exemple, vous savez que vous pourriez observer 1 avec une probabilité de 0,03, 2 avec une probabilité de 0,07, 3 avec une probabilité de 0,11, etc. Ainsi, vous avez une distribution de probabilités sur différentes valeurs. Ayant cette distribution, vous pouvez calculer différentes propriétés et les donner comme "prédictions". Vous pouvez calculer la moyenne et la donner comme prédiction pour demain. Alternativement, vous pouvez utiliser la médiane comme prédiction. Vous pouvez également trouver la valeur la plus probable et la donner comme prédiction pour demain.

Si vous utilisez la valeur moyenne comme prédiction, la question de "comment mesurer l'exactitude de ma prédiction" doit être remplacée par "quelle est la mesure de l'exactitude de la moyenne" et la réponse est "l'écart quadratique moyen entre le valeurs réelles et prévisions ". Si vous utilisez la médiane comme prédictions, vous devez utiliser la déviation absolue moyenne.

Il se peut que vous ne sachiez pas si vous utilisez la médiane ou la moyenne ou autre chose. Pour savoir ce que vous utilisez réellement comme prédictions, vous devez savoir quelle mesure vous essayez de minimiser dans la formation. Si vous essayez de trouver des paramètres du modèle qui minimisent l'écart quadratique moyen entre les prévisions et les valeurs cibles à partir des données d'entraînement, alors vos prédictions doivent être traitées comme moyennes. Si vous minimisez les écarts absolus, vous entraînez votre modèle à fournir des médianes, etc.

AJOUTÉE

Je voudrais souligner une chose. Comme je l'ai mentionné ci-dessus, il est important de garder la même mesure de précision en "ajustement" et en "prédiction". En plus de cela, je voudrais dire que vous êtes absolument libre de choisir vos mesures. Il n'y a pas de mesures "meilleures" ou "pires". La mesure doit être déterminée par la façon dont vous (ou votre client) utilisez vos prévisions. Par exemple, il peut être très important (pour vous ou votre client) d'avoir une correspondance exacte et si vous ne l'avez pas, cela ne joue aucun rôle si la différence entre les valeurs réelles et prédites est grande ou petite. Dans d'autres cas, cette différence joue un rôle. La différence de 1 est meilleure que la différence de 2. Dans certains cas, la différence de 2 est 2 fois pire que la différence de 1. Dans d'autres cas, une différence égale à 2 est 100 fois pire qu'une différence égale à 1. Vous pouvez également imaginer des cas exotiques dans lesquels vous devez générer une valeur qui diffère des observations. Ainsi, la mesure de la qualité des chiffres que vous générez peut être ce que vous voulez, selon ce dont vous avez besoin. Ce qui est important, c'est d'utiliser la même mesure dans la formation (ajustement) et l'évaluation des prédictions.

romain
la source
(Lié à votre commentaire sur une autre réponse) Dans la plupart des cas, les prévisions diffèrent des valeurs réelles, je ne pense pas en tout cas que nous puissions obtenir un ajustement parfait. Ainsi, l'approche que vous avez suggérée n'est peut-être pas idéale, car nous obtiendrons 100%. Mais ce que je pense, c'est obtenir la différence entre la prévision réelle et la prévision en pourcentage, qui n'est rien d'autre que MAPE. Le cas que nous traitons a de très fortes chances d'obtenir ZERO réel très fréquemment, en raison des circonstances, auquel cas MAPE peut ne pas être la meilleure option car le pourcentage sera INFINITY. C'est là que j'étais coincé.
kosa
Je sais que MAPE est en principe celui que je veux, mais mon ensemble de données a ce cas malheureux où les valeurs RÉELLES en série peuvent être ZÉRO très fréquemment.
kosa