Come adattare un modello per una serie storica che contiene valori anomali


9

Ho montato il modello ARIMA (5,1,2) usando la auto.arima()funzione in R e osservando l'ordine possiamo dire che questo non è il modello migliore da prevedere. Se nelle serie di dati esistono valori anomali, qual è il metodo per adattare un modello a tali dati?


Hai qualche dato / teoria su quali punti sono valori anomali? Non puoi semplicemente supporre che i punti "lontani" siano anomali, ma se sai che è accaduto qualcosa di speciale in una data particolare e che l'evento influirebbe sui tuoi dati, puoi aggiungere una variabile indicatore al tuo modello per quella data. Vedi il commento di IrishStat, di seguito.
Wayne,

Se si verifica qualcosa di speciale in 1 o 2 settimane in quel periodo e influisce sul modello, il modello potrebbe non essere corretto. poiché non vi sono altri motivi come la variazione stagionale, ho ipotizzato che i valori anomali siano la causa che influisce sul modello.
Anthony,

Risposte:


7

Michael Chernick ti indica nella giusta direzione. Vorrei anche esaminare il lavoro di Ruey Tsay come aggiunto a questo corpus di conoscenze. Vedi di più qui .

Non puoi competere con gli algoritmi informatici automatizzati di oggi. Esaminano molti modi per avvicinarsi alle serie storiche che non sono state prese in considerazione e spesso non documentate in alcun documento o libro. Quando ci si chiede come fare un ANOVA, ci si può aspettare una risposta precisa quando si confronta con algoritmi diversi. Quando ci si pone la domanda come si fa a riconoscere il modello, sono possibili molte risposte quando sono coinvolte le euristiche. La tua domanda riguarda l'uso dell'euristica.

Il modo migliore per adattare un modello ARIMA, se nei dati esistono valori anomali, è valutare possibili stati della natura e selezionare quell'approccio ritenuto ottimale per un determinato set di dati. Un possibile stato della natura è che il processo ARIMA è la fonte primaria di variazione spiegata. In questo caso si dovrebbe "identificare provvisoriamente" il processo ARIMA tramite la funzione acf / pacf e quindi esaminare i residui per possibili valori anomali. I valori anomali possono essere impulsi, ovvero eventi occasionali O impulsi stagionali che sono evidenziati da valori anomali sistematici a una certa frequenza (diciamo 12 per i dati mensili). Un terzo tipo di valore anomalo è quello in cui si ha un insieme contiguo di impulsi, ciascuno con lo stesso segno e magnitudine, questo è chiamato spostamento del livello o del gradino. Dopo aver esaminato i residui del processo provvisorio ARIMA, si può quindi aggiungere provvisoriamente la struttura deterministica identificata empiricamente per creare un modello combinato provvisorio. Né se la fonte primaria di variazione fosse uno dei 4 tipi o "valori anomali", si sarebbe meglio servirli identificandoli ab initio (prima) e quindi usando i residui di questo "modello di regressione" per identificare la struttura stocastica (ARIMA) . Ora queste due strategie alternative diventano un po 'più complicate quando si ha un "problema" in cui i parametri ARIMA cambiano nel tempo o la varianza dell'errore cambia nel tempo a causa di una serie di possibili cause, forse la necessità di minimi quadrati ponderati o una trasformazione di potenza come registri / reciproci, ecc. Un'altra complicazione / opportunità è come e quando formare il contributo delle serie di predittori suggerite dall'utente per formare un modello perfettamente integrato che incorpora memoria, causali e serie fittizie identificate empiricamente. Questo problema si aggrava ulteriormente quando si hanno le serie di tendenza modellate al meglio con le serie di indicatori del modulo, O 1 , 2 , 3 , 4 , 5 , . . . n e combinazioni di serie di spostamento di livello come 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 10,0,0,0,1,2,3,4,...1,2,3,4,5,...n0,0,0,0,0,0,1,1,1,1,1. Potresti voler provare a scrivere tali procedure in R, ma la vita è breve. Sarei felice di risolvere effettivamente il tuo problema e dimostrare in questo caso come funziona la procedura, si prega di inviare i dati o inviarli a sales@autobox.com


Ulteriori commenti dopo aver ricevuto / analizzato i dati / i dati giornalieri per un tasso di cambio / 18 = 765 valori a partire dall'1 / 1/2007

inserisci qui la descrizione dell'immagine

I dati avevano un acf di:

inserisci qui la descrizione dell'immagine

Dopo aver identificato un modello arma della forma e un numero di valori anomali, l'acf dei residui indica casualità poiché i valori acf sono molto piccoli. AUTOBOX ha identificato una serie di valori anomali:(1,1,0)(0,0,0)

inserisci qui la descrizione dell'immagine

Il modello finale:

inserisci qui la descrizione dell'immagine

inclusa la necessità di un aumento della stabilizzazione della varianza alla TSAY dove sono state identificate e incorporate le variazioni di varianza nei residui. Il problema che hai avuto con la tua esecuzione automatica era che la procedura che stavi utilizzando, come un contabile, ritiene i dati piuttosto che sfidare i dati tramite il rilevamento degli interventi (noto anche come Outlier Detection). Ho pubblicato un'analisi completa qui .

inserisci qui la descrizione dell'immagine


@IrishStat: in futuro puoi utilizzare le opzioni di formattazione? (la chiave corretta per inserire i collegamenti è ctrl-l, non ctrl-c).
user603

@ user603 Ho semplicemente usato l'opzione Aggiungi un grafico. Non so cosa intendi con ctrl-l o cntrl-c. Forse potresti aiutarmi, per favore contattami a dave / @ / autobox.com e forse puoi parlarmi / parlarmi.
IrishStat

@IrishStat: dai un'occhiata qui .
user603

@ user603 OK, ma non so ancora cosa intendi con ctrl-l e cntrl-c. Stavo usando il trasferimento di immagini dove sono in grado di inserire un'immagine. Se scrivo cntrl-g ottengo solo una schermata pop-up vuota.
IrishStat,

@IrishStat: va bene - il metodo del collegamento è persino migliore di ctrl-l :). PS: il mio obiettivo era aiutarti a rendere le tue risposte / i tuoi commenti più interessanti, esteticamente, nascondendo questi lunghi collegamenti che tagliano il flusso del testo. Il link ti spiega come raggiungerlo.
user603

6

Non esiste una controparte robusta pronta all'uso per la funzione arima in R (ancora) ; se ne appare uno, verrà elencato qui . Forse un'alternativa è quella di appesantire quelle osservazioni che sono periferiche rispetto a una semplice regola di rilevamento anomalo univariato, ma non vedo neanche pacchetti pronti per usare la regressione ARMA ponderata. Un'altra possibile alternativa sarebbe quindi Winsorize i punti periferici:

#parameters
para     <- list(ar=c(0.6,-0.48), ma=c(-0.22,0.24))
#original series
y1 <- y0 <- arima.sim(n=100, para, sd=sqrt(0.1796)) 
#outliers
out      <- sample(1:100, 20)               
#contaminated series
y1[out]  <- rnorm(20, 10, 1)                
plot( y1, type="l")
lines(y0, col="red")

esempio di contaminazione casuale

#winsorized series
y2      <- rep(NA, length(y1))
a1      <- (y1-median(y1)) / mad(y1)
a2      <- which(abs(a1)>3)
y2[-a2] <- y1[-a2]
for(i in 2:length(y2)){
   if(is.na(y2[i])){ y2[i] <- y2[i-1] }
}       

serie pulite


Una procedura basata su regole funziona per questa serie di bu che ha esaminato i dati di serie temporali per quasi42 anni potrebbe non funzionare in generale. Considerare una serie semplice che ha un processo auto-proiettivo, ad esempio 1,9,1,9,1,9,5,9, 1,9,1,9 dove il 7o valore è eccezionale O in generale una serie che ha una forte struttura autoproiettiva di qualche forma sconosciuta OPPURE una serie che ha 1,2,1,1,1,2,1,1,1, 2,1,20,1,2,1,2,1,1,1,2,1,2,2,19,2,1,1,2,1,2,1,1,2,2, 2,21 una serie mensile che non ha impulsi MA ha un DUMMY STAGIONALE non specificato. Rilevare 12,24 e 36 come CATTIVO avrebbe gettato il bambino con l'acqua del bagno.
IrishStat,

Tutto ciò che dici è vero, cioè stavi fornendo un cerotto che avrebbe aiutato con la ferita se 1) la serie fosse stazionaria, il che presuppone tra l'altro nessun cambiamento di livello, nessuna tendenza e niente, nessuna struttura ARIMA; e 2) le serie devono essere non stagionali o sono state precedentemente destagionalizzate; . È la mia esperienza che tali assunzioni non sono quasi mai valide e gli utenti ignorano i tuoi avvertimenti mentre cercano di lottare con serie temporali che hanno "imperfezioni". I miei commenti qui non sono pensati per essere
polemici

@IrishStat l'OP ha aggiornato la sua domanda e ha dichiarato che non c'è stagionalità.
user603

Sei Christophe?
IrishStat

2

Esiste una considerevole letteratura sui modelli robusti di serie storiche. Martin e Yohai sono tra i principali collaboratori. Il loro lavoro risale agli anni '80. Ho fatto un po 'di lavoro sul rilevamento di valori anomali nelle serie temporali, ma Martin è stato davvero uno dei molti fattori che hanno contribuito sia al rilevamento dei valori anomali sia alla stima dei parametri in presenza di valori anomali o residui di coda pesante nelle serie temporali.

  • Ecco un link a un articolo di indagine sull'argomento con un elenco di oltre 100 riferimenti. Include anche il mio documento JASA del 1982.
  • Ecco una tesi di dottorato del 2000 (pdf) che copre la teoria, i metodi e le applicazioni della solida analisi delle serie temporali e include una bella bibliografia.
  • Ecco un link al software che include alcuni robusti strumenti per le serie storiche.

Qual è il software utilizzato per la previsione robusta? È adatto per le serie univariate?
Anthony,

@Anthony Questa è un'ottima domanda. Non ho eseguito modelli di serie temporali robusti. dug Martin fondò la compagnia Insightful (in realtà avevano diversi nomi di chnage) che commercializzava SPlus. Sono abbastanza sicuro che abbia incluso metidi robusti nel software SPlus. Probabilmente ora c'è una versione in R. Verificherò. Ecco un articolo di Wikipedia che include la storia di SPlus. en.wikipedia.org/wiki/S-PLUS
Michael R. Chernick il

@Anthony Ecco una fonte fornita da Rob Hyndman su ciò che è disponibile in R sull'analisi delle serie temporali. Include ciò che è in CRAN e copre un'ampia varietà di metodi, incluso un filtraggio efficace. cran.r-project.org/web/views/TimeSeries.html
Michael R. Chernick,

2

lo scopo del tuo modello è prevedere o analizzare la cronologia? se questo non è per la previsione e sai che si tratta di valori anomali, aggiungi semplicemente la variabile fittizia, che è 1 in quelle date e 0 in altre date. in questo modo i coefficienti fittizi si prenderanno cura degli outlier e sarete in grado di interpretare gli altri coefficienti nel modello.

se questo è per la previsione, allora ti devi porre due domande: questi valori anomali si ripeteranno? se lo facessero, devo renderne conto?

Ad esempio, supponiamo che le tue serie di dati presentino valori anomali quando i fratelli Lehman sono andati giù. è un evento che non hai modo di prevedere, ovviamente, ma non puoi semplicemente ignorarlo perché qualcosa del genere è destinato a succedere in futuro. se si lancia nel manichino per i valori anomali, si rimuove efficacemente l'incertezza di questo evento dalla varianza dell'errore. le tue previsioni sottostimeranno il rischio di coda, forse non una buona cosa per la gestione del rischio. tuttavia, se si deve produrre la previsione di base delle vendite, il manichino funzionerà, poiché non sei interessato alla coda, sei interessato agli scenari più probabili, quindi non devi tenere conto dell'evento imprevedibile per questo scopo.

Pertanto, lo scopo del modello influisce sul modo in cui gestisci i valori anomali.

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.