Se lo scopo del modello è la previsione e la previsione, la risposta breve è SÌ, ma la stazionarietà non deve necessariamente essere su livelli.
Spiegherò. Se riduci le previsioni nella sua forma più semplice, sarà l'estrazione dell'invariante. Considera questo: non puoi prevedere cosa sta cambiando. Se ti dico che domani sarà diverso da oggi in ogni aspetto immaginabile , non sarai in grado di produrre alcun tipo di previsione .
È solo quando sei in grado di estendere qualcosa da oggi a domani, puoi produrre qualsiasi tipo di previsione. Ti faccio alcuni esempi.
- Sai che la distribuzione della temperatura media di domani sarà più o meno la stessa di oggi . In questo caso, si può prendere la temperatura di oggi come la tua previsione per domani, gli ingenui previsioni x t + 1 = x tX^t + 1= xt
- Osserva un'auto al miglio 10 su una strada che guida alla velocità di mph. Tra un minuto probabilmente sarà intorno al miglio 11 o 9. Se sai che sta guidando verso il miglio 11, allora sarà intorno al miglio 11. Dato che la sua velocità e direzione sono costanti . Si noti che qui la posizione non è fissa, ma solo la velocità. A questo proposito è analogo a un modello di differenza come ARIMA (p, 1, q) o un modello di tendenza costante come x t ∼ v tv = 60Xt∼ v t
- Il tuo vicino è ubriaco ogni venerdì. Si ubriacherà venerdì prossimo? Sì, purché non cambi il suo comportamento
- e così via
In ogni caso di una previsione ragionevole, estraiamo prima qualcosa che è costante dal processo e lo estendiamo al futuro. Quindi, la mia risposta: sì, le serie temporali devono essere stazionarie se varianza e media sono gli invarianti che estenderete nel futuro dalla storia. Inoltre, vuoi che anche le relazioni con i regressori siano stabili.
Basta identificare ciò che è invariante nel tuo modello, che si tratti di un livello medio, un tasso di cambiamento o qualcos'altro. Queste cose devono rimanere le stesse in futuro se si desidera che il proprio modello abbia un potere di previsione.
Esempio di Holt Winters
Il filtro di Holt Winters è stato menzionato nei commenti. È una scelta popolare per lisciare e prevedere determinati tipi di serie stagionali e può gestire serie non stazionarie. In particolare, è in grado di gestire serie in cui il livello medio cresce linearmente con il tempo. In altre parole, dove la pendenza è stabile . Nella mia terminologia la pendenza è uno degli invarianti che questo approccio estrae dalla serie. Vediamo come fallisce quando la pendenza è instabile.
In questa trama sto mostrando le serie deterministiche con crescita esponenziale e stagionalità additiva. In altre parole, la pendenza diventa sempre più ripida con il tempo:
Puoi vedere come il filtro sembra adattarsi molto bene ai dati. La linea montata è rossa. Tuttavia, se si tenta di prevedere con questo filtro, fallisce miseramente. La linea vera è nera e il rosso se è dotato di limiti di confidenza blu sulla trama successiva:
Il motivo per cui fallisce è facile da esaminare esaminando le equazioni del modello di Holt Winters . Estrae la pendenza dal passato e si estende al futuro. Funziona molto bene quando la pendenza è stabile, ma quando cresce costantemente il filtro non riesce a tenere il passo, è un passo indietro e l'effetto si accumula in un errore di previsione crescente.
Codice R:
t=1:150
a = 0.04
x=ts(exp(a*t)+sin(t/5)*sin(t/2),deltat = 1/12,start=0)
xt = window(x,0,99/12)
plot(xt)
(m <- HoltWinters(xt))
plot(m)
plot(fitted(m))
xp = window(x,8.33)
p <- predict(m, 50, prediction.interval = TRUE)
plot(m, p)
lines(xp,col="black")
In questo esempio potresti essere in grado di migliorare le prestazioni del filtro semplicemente prendendo un registro delle serie. Quando prendi un logaritmo di serie in crescita esponenziale, rendi di nuovo stabile la sua pendenza e dai una possibilità a questo filtro. Ecco un esempio:
Codice R:
t=1:150
a = 0.1
x=ts(exp(a*t)+sin(t/5)*sin(t/2),deltat = 1/12,start=0)
xt = window(log(x),0,99/12)
plot(xt)
(m <- HoltWinters(xt))
plot(m)
plot(fitted(m))
p <- predict(m, 50, prediction.interval = TRUE)
plot(m, exp(p))
xp = window(x,8.33)
lines(xp,col="black")