Calcolo dell'accuratezza delle previsioni


9

Stiamo utilizzando STL (implementazione R) per la previsione dei dati delle serie temporali.

Ogni giorno eseguiamo previsioni giornaliere. Vorremmo confrontare i valori di previsione con i valori reali e identificare la deviazione media. Ad esempio, abbiamo eseguito previsioni per domani e ottenuto punti di previsione, vorremmo confrontare questi punti di previsioni con i dati reali che otterremo domani. Sono consapevole che i valori delle previsioni e i dati reali potrebbero non corrispondere il più delle volte, questo è uno dei motivi per cui vorremmo tenere traccia di quanto siamo precisi ogni giorno.

Ora stiamo cercando di identificare qual è l'approccio migliore per risolvere questo problema? qualsiasi suggerimento di aiuto sarebbe apprezzato.

Ho esaminato la domanda sulla misurazione dell'accuratezza delle previsioni , ma sembra che sia correlata al confronto tra modelli piuttosto che al calcolo dell'accuratezza con valori reali.

Ho osservato l' implementazione della funzione di precisione in R , ma confuso con due domande:

1) Funzionerà su dati reali vs dati di previsione, perché la maggior parte del tutorial dice "dati di test" vs "dati di previsione"

2) Sembra che la funzione di precisione sia la matrice di valori piuttosto che la% di deviazione.


1
Per ottenere un'ottima risposta devi porre la domanda giusta, e questo può essere frustrante. Tutti vogliono governare il mondo e questo richiede conoscenza preliminare. Se avessi una conoscenza perfetta degli stock di domani ma ce l'avessi oggi, allora potrei guadagnare un sacco di soldi / potere / opportunità / gloria / ecc. Se stessi esaminando il tuo problema, vorrei vedere un istogramma (o eCDF) dell'errore predittivo. Potrei "muovere" gli input della previsione e guardarne la media e la variazione, e confrontare l'errore con quelli. Devi capire il tuo errore per risolverlo.
EngrStudent,

1
Per chi non lo sapesse, cos'è STL?
Shadowtalker,

@EngrStudent: "Devi capire il tuo errore per risolverlo" - In questa affermazione stessa abbiamo due parti. Sto cercando di scoprire possibili approcci per la prima sezione stessa. La metodologia che scelgo mi aiuterà a scegliere le strategie per la parte 2.
kosa,

1
Mean non è la stessa cosa di come si comporta un sistema. La deviazione standard non è la stessa di come si comporta un sistema. Queste due misure sono statistiche riassuntive per il comportamento del sistema misurato. L'errore non è precisione. L'errore non è incertezza. Queste due misure sono statistiche riassuntive per errore analogo alla media e alla deviazione standard. Proprio come ci sono molte infinite misure del comportamento del sistema, ci sono molte infinite misure del comportamento dell'errore. Qual è la tua rubrica? come misurare un buon modo di pensare all'errore?
EngrStudent,

1
@Nambari - benvenuto nel mondo dei "saggi". L'inizio della conoscenza è sapere che non sai nulla - essere uno studente. Cerco di imparare sempre me stesso e cerco di essere corretto da chiunque dica la verità. Se giochi con lo strumento Eureqa e provi dati di esempio appropriati sia in ogni forma generale di "espressione target" che in ogni "metrica di errore", inizierai a conoscere questa cosa profonda e profonda. Non ho una buona risposta L'Hospital (alias L'Hopital) ha formulato la prima espressione meno quadrata nel 1696. Un buon inizio è il caso d'uso - in cui entra in gioco la mente. Che cos'è?
EngrStudent,

Risposte:


13

Esistono molti modi diversi per misurare l'accuratezza della previsione e la accuracy()funzione del pacchetto di previsione per R ne genera diversi. Dal tuo commento su "% di deviazione" sembra che tu voglia utilizzare Errore percentuale assoluta media, che è una delle misure fornite da accuracy(). Le misure più comuni di accuratezza delle previsioni sono discusse qui . Potresti pensare se MAPE è la misura più appropriata per il tuo problema o se una delle altre misure è migliore.

La accuracy()funzione funziona su dati reali. I "dati di test" sono quei dati che non sono stati utilizzati per costruire le previsioni. A volte sono disponibili ma non utilizzati quando vengono calcolate le previsioni (la classica suddivisione dei dati in training e set di test). In altre situazioni, tutti i dati disponibili vengono utilizzati per calcolare le previsioni, quindi è necessario attendere fino a quando non saranno disponibili alcune osservazioni future da utilizzare come dati di test.

Quindi se fè un vettore di previsioni ed xè un vettore di osservazioni corrispondenti agli stessi tempi, allora

accuracy(f,x)

farà quello che vuoi.


"Le misure basate su errori percentuali hanno lo svantaggio di essere infinite o indefinite se yi = 0 per qualsiasi i nel periodo di interesse e avere valori estremi quando uno yi è vicino allo zero." Penso che questo sarà un problema nel mio caso, perché molti casi reali potrebbero essere ZERO. Sto pensando di calcolare MAE e cambiare il numero dei risultati in "percentuale". Ha senso?
Kosa,

In qualche modo la mia nota di ringraziamento scompare, davvero grazie per il tuo tempo, dottor Hyndman!
Kosa,

2

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

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


Grazie per la risposta! Sì, in questo momento non mi preoccupo della precisione. Voglio solo conoscere l'accuratezza, "deviazione della previsione dagli effettivi". Non mi preoccupo di eseguire alcuni modelli per calcolare gli errori di previsione e scegliere il modello migliore. Il mio unico obiettivo è scoprire la deviazione tra valori effettivi e previsti. Il nostro modello è costante qui. Indipendentemente dal nostro modello è buono o cattivo per il set di dati, abbiamo solo bisogno del numero di deviazione. Questa domanda non è correlata alla regolazione fine dei parametri (o) alla selezione del modello. Spero ora di essere chiaro. Per favore fatemi sapere se manca qualcosa.
Kosa,

@Nambari, se hai bisogno del "numero di deviazioni", perché non usi il numero di deviazioni? Fai un giro sulle previsioni, confrontale con i valori reali e conta il numero di casi in cui le previsioni differiscono dai valori reali.
Roman

2

Lo sto facendo in R qui è il mio codice per i miei dati sia per i dati in-sample che out-of-sample:

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

spero che questo aiuti un po '. se vuoi il mio codice completo che ho usato per eseguirlo, chiedi perché è molto semplice


1

La risposta breve: per valutare la qualità delle tue previsioni, usa esattamente la stessa misura che hai usato nella formazione (adattamento) del tuo modello.

La lunga risposta:

Al fine di scegliere una misura per l'accuratezza delle previsioni, il primo bisogno di sapere come interpretare le previsioni. In altre parole, cosa dai in realtà come "previsione"? È valore medio? Mediano? Il valore più probabile? La risposta a questa domanda identificherà in modo univoco la misura dell'accuratezza della previsione. Se si prevede la media, è necessario utilizzare la deviazione quadrata media radice come misura dell'accuratezza della previsione. Se si prevede la mediana, è necessario utilizzare la deviazione assoluta media come misura di precisione.

Elaborerò un po 'su questo punto. Supponiamo che tu faccia una previsione / previsione per domani. Supponiamo anche che per qualsiasi valore che potresti osservare domani tu abbia una probabilità corrispondente da osservare. Ad esempio, sai che potresti osservare 1 con probabilità 0,03, 2 con probabilità 0,07, 3 con probabilità 0,11 e così via. Quindi, hai una distribuzione di probabilità su valori diversi. Con questa distribuzione è possibile calcolare diverse proprietà e fornirle come "previsioni". Puoi calcolare la media e fornirla come previsione per domani. In alternativa puoi usare la mediana come previsione. Puoi anche trovare il valore più probabile e fornirlo come previsione per domani.

Se si utilizza il valore medio come previsione, la domanda su "come misurare l'accuratezza della mia previsione" deve essere sostituita da "qual è la misura dell'accuratezza per la media" e la risposta è "deviazione quadrata media radice tra la valori reali e previsione ". Se usi la mediana come previsioni, devi usare la deviazione assoluta media.

Potrebbe non sapere se usi la mediana o la media o qualcos'altro. Per scoprire cosa usi effettivamente come pronostici devi sapere quale misura cerchi di minimizzare durante l'allenamento. Se si tenta di trovare i parametri del modello che minimizzano la deviazione quadrata della media della radice tra le previsioni e i valori target dai dati di addestramento, le previsioni devono essere trattate come medie. Se minimizzi le deviazioni assolute, allora alleni il tuo modello per fornire mediane e così via.

AGGIUNTO

Vorrei sottolineare una cosa. Come ho accennato in precedenza, è importante mantenere la stessa misura di precisione in "adattamento" e in "previsione". Inoltre, vorrei dire che sei assolutamente libero di scegliere le tue misure. Non esistono misure "migliori" o "peggiori". La misura dovrebbe essere determinata dal modo in cui tu (o il tuo cliente) utilizzate le vostre previsioni. Ad esempio, potrebbe essere molto importante (per te o per il tuo cliente) avere una corrispondenza esatta e se non ce l'hai, non ha alcun ruolo se la differenza tra i valori reali e previsti è grande o piccola. In altri casi questa differenza gioca un ruolo. La differenza di 1 è migliore della differenza di 2. In alcuni casi la differenza di 2 è 2 volte peggiore della differenza di 1. In altri casi la differenza uguale a 2 è 100 volte peggiore della differenza uguale a 1. Puoi anche immaginare casi esotici in cui devi generare un valore diverso dalle osservazioni. Quindi, la misura della qualità dei numeri che generi può essere qualsiasi cosa tu voglia, a seconda di ciò di cui hai bisogno. Ciò che è importante è utilizzare la stessa misura nell'allenamento (idoneo) e nella valutazione delle previsioni.


(Relativo al tuo commento su un'altra risposta) Nella maggior parte dei casi, le previsioni differiscono dai valori reali, non credo che in ogni caso possiamo adattarci perfettamente. Quindi, l'approccio che hai suggerito potrebbe non essere l'ideale, perché otterremo il 100%. Ma quello che sto pensando è ottenere la differenza tra la previsione effettiva e la percentuale, che non è altro che MAPE. Il caso che stiamo gestendo ha altissime probabilità di rendere ZERO attuale molto frequentemente, a causa di circostanze, nel qual caso MAPE potrebbe non essere l'opzione migliore perché la percentuale sarà INFINITY. Questo è dove ero bloccato.
Kosa,

So che MAPE è quello che in linea di principio voglio, ma il mio set di dati ha questo sfortunato caso in cui i valori REALI in serie possono essere ZERO molto frequentemente.
Kosa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.