Berechnung der Prognosegenauigkeit


9

Wir verwenden STL (R-Implementierung) zur Vorhersage von Zeitreihendaten.

Jeden Tag führen wir tägliche Prognosen durch. Wir möchten Prognosewerte mit realen Werten vergleichen und durchschnittliche Abweichungen ermitteln. Zum Beispiel haben wir Prognosen für morgen erstellt und Prognosepunkte erhalten. Wir möchten diese Prognosepunkte mit realen Daten vergleichen, die wir morgen erhalten. Mir ist bewusst, dass Prognosewerte und reale Daten in den meisten Fällen nicht übereinstimmen. Dies ist einer der Gründe, warum wir gerne nachverfolgen möchten, wie genau wir jeden Tag sind.

Jetzt versuchen wir herauszufinden, wie dieses Problem am besten gelöst werden kann. Alle Hilfe Zeiger wäre dankbar.

Ich habe mir die Frage zur Messung der Prognosegenauigkeit angesehen , aber es scheint, dass sie eher mit dem Vergleich von Modellen als mit der Berechnung der Genauigkeit mit realen Werten zusammenhängt.

Ich habe mir die Implementierung der Genauigkeitsfunktion in R angesehen , aber mit zwei Fragen verwechselt:

1) Funktioniert es mit realen Daten im Vergleich zu Prognosedaten, da die meisten Lernprogramme "Testdaten" und "Prognosedaten" enthalten?

2) Es scheint, dass die Genauigkeitsfunktion eher ein Array von Werten als ein Prozentsatz der Abweichung ist.


1
Um eine gute Antwort zu erhalten, müssen Sie die richtige Frage stellen - und das kann frustrierend sein. Jeder will die Welt regieren und das erfordert Vorwissen. Wenn ich die Aktien von morgen genau kennen würde, sie aber heute hätte, könnte ich eine Menge Geld / Macht / Gelegenheit / Ruhm / etc. Verdienen. Wenn ich Ihr Problem betrachten würde, würde ich ein Histogramm (oder eCDF) des Vorhersagefehlers sehen wollen. Ich möchte vielleicht die Eingaben der Prognose "zittern" und ihren Mittelwert und ihre Variation betrachten und den Fehler mit diesen vergleichen. Sie müssen Ihren Fehler verstehen, um ihn zu beheben.
EngrStudent

1
Was ist STL für Uneingeweihte?
Shadowtalker

@EngrStudent: "Sie müssen Ihren Fehler verstehen, um ihn zu beheben" - In dieser Anweisung selbst haben wir zwei Teile. Ich versuche mögliche Ansätze für den ersten Abschnitt selbst herauszufinden. Die Methode, die ich auswähle, hilft mir bei der Auswahl der Strategien für Teil 2.
kosa

1
Mittelwert ist nicht dasselbe wie das Verhalten eines Systems. Die Standardabweichung ist nicht dasselbe wie das Verhalten eines Systems. Diese beiden Kennzahlen sind zusammenfassende Statistiken für das gemessene Systemverhalten. Fehler ist nicht Genauigkeit. Fehler ist keine Unsicherheit. Diese beiden Kennzahlen sind zusammenfassende Statistiken für Fehler analog zu Mittelwert und Standardabweichung. Genauso wie es unendlich viele Maße für das Systemverhalten gibt, gibt es auch unendlich viele Maße für das Fehlerverhalten. Was ist deine Rubrik? Wie messen Sie einen guten Weg, um über Fehler nachzudenken?
EngrStudent

1
@Nambari - Willkommen in der Welt der "Weisen". Der Anfang des Wissens ist zu wissen, dass man nichts weiß - ein Student zu sein. Ich versuche immer, mich selbst zu lernen und von jedem korrigiert zu werden, der die Wahrheit sagt. Wenn Sie mit dem Eureqa-Tool spielen und geeignete Beispieldaten sowohl für jede allgemeine Form des "Zielausdrucks" als auch für jede "Fehlermetrik" anprobieren, werden Sie diese tiefgründige Sache kennenlernen. Ich habe keine gute Antwort. L'Hospital (auch bekannt als L'Hopital) formulierte 1696 den ersten Ausdruck im kleinsten Quadrat. Ein guter Anfang ist der Anwendungsfall - wo der Verstand ins Spiel kommt. Was ist das?
EngrStudent

Antworten:


13

Es gibt viele verschiedene Möglichkeiten, die Prognosegenauigkeit zu messen, und die accuracy()Funktion aus dem Prognosepaket für R gibt mehrere davon aus. Aus Ihrem Kommentar zu "% der Abweichung" geht hervor, dass Sie den mittleren absoluten prozentualen Fehler verwenden möchten, der eine der von bereitgestellten Maßnahmen ist accuracy(). Die gebräuchlichsten Maße für die Prognosegenauigkeit werden hier erörtert . Vielleicht möchten Sie darüber nachdenken, ob MAPE die am besten geeignete Maßnahme für Ihr Problem ist oder ob eine der anderen Maßnahmen besser ist.

Die accuracy()Funktion arbeitet mit realen Daten. Die "Testdaten" sind diejenigen Daten, die nicht zur Erstellung der Prognosen verwendet wurden. Manchmal sind sie verfügbar, werden jedoch bei der Berechnung der Prognosen nicht verwendet (klassische Aufteilung der Daten in Trainings- und Testsätze). In anderen Situationen werden alle verfügbaren Daten zur Berechnung der Prognosen verwendet. Anschließend müssen Sie warten, bis einige zukünftige Beobachtungen als Testdaten verfügbar sind.

Wenn falso ein Vektor von Vorhersagen und xein Vektor von Beobachtungen ist, die denselben Zeiten entsprechen, dann

accuracy(f,x)

wird tun was du willst.


"Messungen, die auf prozentualen Fehlern basieren, haben den Nachteil, dass sie unendlich oder undefiniert sind, wenn yi = 0 für ein i in der interessierenden Periode ist, und Extremwerte haben, wenn ein yi nahe Null ist." Ich denke, dass dies in meinem Fall ein Problem sein wird, da viele Fälle tatsächlich NULL sein könnten. Ich denke, MAE berechnen und die Ergebniszahl in "Prozentsatz" ändern. Macht das Sinn?
kosa

Irgendwie ist mein Dankeschön weg, wirklich danke für Ihre Zeit, Dr. Hyndman!
kosa

2

Accuracy=E(f)yPrecision=Var[fy]

MSFE=1ni=1n(fiyi)2fiyi


Danke für die Antwort! Ja, ich mache mir im Moment keine Sorgen um Präzision. Ich möchte nur die Genauigkeit "Abweichung der Prognose von den tatsächlichen Werten" kennen. Ich mache mir keine Sorgen darüber, dass nur wenige Modelle Prognosefehler berechnen und das beste Modell auswählen. Mein einziges Ziel ist es, die Abweichung zwischen tatsächlichen und prognostizierten Werten herauszufinden. Unser Modell ist hier konstant. Unabhängig davon, ob unser Modell für den Datensatz gut oder schlecht ist, benötigen wir nur die Anzahl der Abweichungen. Diese Frage bezieht sich nicht auf die Feinabstimmung (oder) Modellauswahl von Parametern. Ich hoffe jetzt bin ich klar. Bitte lassen Sie mich wissen, wenn etwas fehlt.
kosa

@Nambari, wenn Sie die "Anzahl der Abweichungen" benötigen, warum verwenden Sie nicht die Anzahl der Abweichungen? Machen Sie eine Schleife über die Vorhersagen, vergleichen Sie sie mit den realen Werten und zählen Sie die Anzahl der Fälle, in denen Vorhersagen von den realen Werten abweichen.
Roman

2

Ich habe dies in R getan. Hier ist mein Code für meine Daten sowohl für In-Sample- als auch für Out-of-Sample-Daten:

#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")

hoffe das hilft ein bisschen. Wenn Sie meinen vollständigen Code möchten, den ich verwendet habe, fragen Sie bitte, da dies sehr einfach ist


1

Die kurze Antwort: Um die Qualität Ihrer Vorhersagen zu bewerten, verwenden Sie genau das Maß, das Sie beim Training (Anpassen) Ihres Modells verwendet haben.

Die lange Antwort:

Um ein Maß für die Genauigkeit Ihrer Prognosen zu wählen, müssen Sie zunächst wissen, wie Sie Ihre Prognosen interpretieren. Mit anderen Worten, was geben Sie eigentlich als "Prognose" an? Ist es Mittelwert? Median? Wahrscheinlichster Wert? Die Antwort auf diese Frage identifiziert das Maß für die Prognosegenauigkeit eindeutig. Wenn Sie den Mittelwert vorhersagen, müssen Sie die quadratische mittlere Abweichung als Maß für die Prognosegenauigkeit verwenden. Wenn Sie den Median vorhersagen, müssen Sie die mittlere absolute Abweichung als Maß für die Genauigkeit verwenden.

Ich werde auf diesen Punkt etwas näher eingehen. Nehmen wir an, Sie machen eine Vorhersage für morgen. Nehmen wir auch an, dass Sie für jeden Wert, den Sie morgen beobachten könnten, eine entsprechende Wahrscheinlichkeit haben, beobachtet zu werden. Zum Beispiel wissen Sie, dass Sie 1 mit einer Wahrscheinlichkeit von 0,03, 2 mit einer Wahrscheinlichkeit von 0,07, 3 mit einer Wahrscheinlichkeit von 0,11 usw. beobachten können. Sie haben also eine Verteilung der Wahrscheinlichkeiten über verschiedene Werte. Mit dieser Verteilung können Sie verschiedene Eigenschaften berechnen und als "Vorhersagen" angeben. Sie können den Mittelwert berechnen und als Vorhersage für morgen angeben. Alternativ können Sie den Median als Vorhersage verwenden. Sie können auch den wahrscheinlichsten Wert finden und ihn als Vorhersage für morgen angeben.

Wenn Sie den Mittelwert als Vorhersage verwenden, muss die Frage "Wie messe ich die Genauigkeit meiner Vorhersage?" Durch "Was ist das Maß für die Genauigkeit des Mittelwerts?" Ersetzt werden. Die Antwort lautet "quadratische mittlere Abweichung zwischen dem." reale Werte und Vorhersage ". Wenn Sie den Median als Vorhersage verwenden, müssen Sie die mittlere absolute Abweichung verwenden.

Es kann sein, dass Sie nicht wissen, ob Sie Median oder Mittelwert oder etwas anderes verwenden. Um herauszufinden, was Sie tatsächlich als Vorhersagen verwenden, müssen Sie wissen, welche Maßnahme Sie im Training zu minimieren versuchen. Wenn Sie versuchen, Parameter des Modells zu finden, die die Abweichung des quadratischen Mittelwerts zwischen den Vorhersagen und Zielwerten aus den Trainingsdaten minimieren, müssen Ihre Vorhersagen als Mittelwert behandelt werden. Wenn Sie absolute Abweichungen minimieren, trainieren Sie Ihr Modell, um Mediane usw. bereitzustellen.

HINZUGEFÜGT

Ich möchte eines hervorheben. Wie ich oben erwähnt habe, ist es wichtig, das gleiche Maß an Genauigkeit bei "Passform" und "Vorhersage" beizubehalten. Darüber hinaus möchte ich sagen, dass Sie bei der Auswahl Ihrer Maßnahmen absolut frei sind. Es gibt keine "besseren" oder "schlechteren" Maßnahmen. Die Maßnahme sollte durch die Art und Weise bestimmt werden, wie Sie (oder Ihr Kunde) Ihre Vorhersagen verwenden. Zum Beispiel kann es sehr wichtig sein (für Sie oder Ihren Kunden), eine genaue Übereinstimmung zu haben, und wenn Sie diese nicht haben, spielt sie keine Rolle, wenn der Unterschied zwischen den tatsächlichen und den vorhergesagten Werten groß oder klein ist. In anderen Fällen spielt dieser Unterschied eine Rolle. Die Differenz von 1 ist besser als die Differenz von 2. In einigen Fällen ist die Differenz von 2 zweimal schlechter als die Differenz von 1. In anderen Fällen ist eine Differenz von 2 100-mal schlechter als eine Differenz von 1. Sie können sich auch exotische Fälle vorstellen, in denen Sie einen Wert generieren müssen, der sich von den Beobachtungen unterscheidet. Das Maß für die Qualität der von Ihnen generierten Zahlen kann also je nach Bedarf beliebig sein. Wichtig ist, dass beim Training (Fit) und bei der Bewertung von Vorhersagen dasselbe Maß verwendet wird.


(Bezogen auf Ihren Kommentar zu einer anderen Antwort) In den meisten Fällen weichen die Vorhersagen von den tatsächlichen Werten ab. Ich denke auf keinen Fall, dass wir perfekt passen können. Daher ist der von Ihnen vorgeschlagene Ansatz möglicherweise nicht ideal, da wir 100% erhalten. Aber was ich denke, ist, den Unterschied zwischen der tatsächlichen und der Vorhersage in Prozent zu ermitteln, was nichts anderes als MAPE ist. Der Fall, den wir bearbeiten, hat aufgrund der Umstände sehr hohe Chancen, dass NULL sehr häufig aktuell wird. In diesem Fall ist MAPE möglicherweise nicht die beste Option, da der Prozentsatz UNENDLICH ist. Hier steckte ich fest.
kosa

Ich weiß, dass MAPE das Prinzip ist, das ich möchte, aber mein Datensatz hat diesen unglücklichen Fall, in dem REAL-Werte in Reihe sehr häufig NULL sein können.
kosa
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.