Utilizzo del pacchetto di previsioni R con valori mancanti e / o serie temporali irregolari


16

Sono impressionato dal forecastpacchetto R , come ad esempio il zoopacchetto per le serie temporali irregolari e l'interpolazione dei valori mancanti.

La mia applicazione è nell'area delle previsioni sul traffico del call center, quindi i dati nei fine settimana mancano (quasi) sempre, che possono essere gestiti in modo corretto zoo. Inoltre, alcuni punti discreti potrebbero mancare, mi basta usare R NAper questo.

Il fatto è che tutta la bella magia del pacchetto di previsione, come eta(), auto.arima()ecc., Sembra aspettarsi tsoggetti semplici , ovvero serie temporali affiancate che non contengono dati mancanti. Penso che le applicazioni del mondo reale per le serie temporali dedicate siano assolutamente esistenti, ma - a mio avviso - molto limitate.

Il problema di alcuni NAvalori discreti può essere facilmente risolto utilizzando una qualsiasi delle funzioni di interpolazione offerte zoooltre che da forecast::interp. Successivamente, eseguo la previsione.

Le mie domande:

  1. Qualcuno suggerisce una soluzione migliore?
  2. (la mia domanda principale) Almeno nel mio dominio di applicazione, nelle previsioni del traffico del call center (e per quanto posso immaginare la maggior parte degli altri domini problematici), le serie temporali non sono equi. Almeno abbiamo schemi di "giorni lavorativi" ricorrenti o qualcosa del genere. Qual è il modo migliore per gestirlo e utilizzare ancora tutta la magia del pacchetto di previsioni?

    Dovrei semplicemente "comprimere" le serie temporali per riempire i fine settimana, fare le previsioni e quindi "gonfiare" nuovamente i dati per reinserire i valori NA nei fine settimana? (Sarebbe un peccato, penso?)

    Ci sono piani per rendere il pacchetto di previsioni pienamente compatibile con pacchetti di serie temporali irregolari come zoo o suoi? Se sì, quando e se no, perché no?

Sono abbastanza nuovo nelle previsioni (e nelle statistiche in generale), quindi potrei trascurare qualcosa di importante.


Benvenuti nel sito e nelle previsioni! Le applicazioni del mondo reale per le serie temporali a destinazione unica non sono sicuramente molto limitate. Mi capita di conoscere un po 'le previsioni che arrivano nel tuo supermercato con abbastanza prodotto a portata di mano per far fronte alla domanda promozionale, e credimi, quei milioni di serie temporali (20.000 SKU in 1.000 negozi è molto comune) sono davvero molto equilibrate. (Mi dispiace, ma in qualche modo l'hai chiesto ...) Ma proverò a trovare qualcosa di più utile tra un minuto.
Stephan Kolassa,

2
Potresti essere più esplicito sul perché i dati del call center non sono forniti? (Forse sto fraintendendo cosa intendi per "equispaziato".) I metodi di previsione del call center che ho visto di solito eseguono il bucket delle chiamate in arrivo in intervalli di 15 minuti, il che soddisfa la mia definizione di "equispaziato". Dobbiamo quindi affrontare la stagionalità complessa (intra-giornaliera, intra-settimanale, annuale), per quale argomento questo può esserti utile: stats.stackexchange.com/questions/44704/… Questo risponde alla tua domanda? In caso contrario, dicci cos'altro ti serve.
Stephan Kolassa,

5
auto.arimapuò gestire valori mancanti.
Rob Hyndman,

1
Grazie per tutti i commenti costruttivi! Stephan, i miei dati non sono forniti in due modi: 1. Molti call center sono chiusi il sabato e la domenica. Alcuni sono chiusi solo la domenica. Quindi lo spazio "normale" tra due punti dati adiacenti è di un giorno, tranne da Ven a Lun, che è di tre giorni. Quindi lo spazio non è uguale, cioè non equivoco. In secondo luogo, ci possono essere dati casuali mancanti da qualche parte perché hanno appena dimenticato di accendere il loro dispositivo di misurazione quel giorno o qualsiasi altra cosa. Spero che questo chiarisca il mio punto.
entreprogreur

1
Solo un pensiero (provocatorio). Se dici che i call center sono chiusi nei fine settimana. Quindi non hai dati mancanti. Le serie temporali si svolgono dal lunedì al venerdì. 5 giorni. abbastanza equidistante. Interpolare i fine settimana mi sembra formalmente sbagliato, poiché sai che non si verificano chiamate e che qualsiasi informazione che imputi è falsa. Direi che non puoi mai migliorare una stima inventando i dati ...
significa significato

Risposte:


1

Non sono un esperto di R, quindi forse c'è un modo più semplice ma l'ho già visto prima. Ciò che ho fatto prima è implementare una funzione che misura la distanza (in unità di tempo) tra le date effettive e la salva in una nuova colonna nelle serie temporali esistenti. Quindi abbiamo qualcosa come:

index/date | value | distance  
01.01.2011 |  15   |   1  
02.01.2011 |  17   |   3  
05.01.2011 |  22   |   ..   

In questo modo, se le tue serie temporali non sono ancora associate a una serie reale di punti nel tempo (o formato errato o altro), puoi comunque lavorare con essa.

Successivamente, scrivi una funzione che crea una nuova serie temporale per te, in questo modo:

Innanzitutto, calcoli quante unità di tempo le serie temporali avrebbero effettivamente tra le date della tua scelta e crei quella sequenza temporale in zoo o ts o qualunque sia la scelta con valori vuoti.

In secondo luogo, prendi la tua serie di serie temporali incompleta e, usando un ciclo, riempi i valori nella sequenza temporale corretta, in base ai limiti di tua scelta. Quando ti imbatti in una riga in cui la distanza unitaria non è una (mancano giorni (unità)), inserisci i valori interpolati.

Ora, poiché questa è la tua funzione, puoi effettivamente scegliere come interpolare. Ad esempio, decidi che se la distanza è inferiore a due unità, usi un'interpolazione lineare standard. Se manca una settimana, fai qualcos'altro e se viene raggiunta una determinata soglia di date mancanti, dai un avvertimento sui dati, davvero qualunque cosa tu voglia immaginare.

Se il ciclo raggiunge la data di fine, si restituiscono i nuovi ts.

Il vantaggio di tale funzione è che è possibile utilizzare diverse interpolazioni o procedure di gestione a seconda della lunghezza del divario e restituire una serie creata in modo pulito nel formato desiderato. Una volta scritto, ti consente di ottenere dati chiari e piacevoli da qualsiasi tipo di dati tabulari. Spero che questo ti aiuti in qualche modo.


Grazie, IMA, per la risposta utile! Quindi, quello che sto facendo ora: per valori discreti mancanti, utilizzo l'interpolazione (nonché "aggiustamenti" forniti dall'utente) per riempire i dati mancanti. IMA, la tua risposta per migliorare ulteriormente è molto utile. Per i dati mancanti "regolari" come il fine settimana, trasformo i miei dati in un secondo, "pseudo" ts solo a scopo di previsione, e poi trasformo il risultato in serie temporali "corrette", in modo che anche la previsione abbia valori mancanti nei fine settimana. Sarei ancora grato per un suggerimento più elegante su come gestire i "vuoti" regolari nei fine settimana.
entreprogreur

@entreprogreur, non ho risposto, l'IMA ha fatto. L'IMA ottiene il credito completo qui. Ho appena modificato la formattazione in modo che venisse visualizzata bene.
gung - Ripristina Monica

1

Dovresti stare molto attento quando applichi l'interpolazione prima di ulteriori trattamenti statistici. La scelta che fai per la tua interpolazione introduce una distorsione nei tuoi dati. Questo è qualcosa che vorresti assolutamente evitare, poiché potrebbe alterare la qualità delle tue previsioni. A mio avviso per valori mancanti come quelli che hai menzionato, che sono regolarmente distanziati nel tempo e che corrispondono a un arresto nelle attività, potrebbe essere più corretto lasciare questi giorni fuori dal tuo modello. Nel piccolo mondo del tuo call center (il modello che stai costruendo su di esso), potrebbe essere meglio considerare che il tempo si è semplicemente fermato quando è chiuso invece di inventare misurazioni di un'attività inesistente. D'altra parte, il modello ARIMA è stato statisticamente basato sul presupposto che i dati siano equidistanti. Per quanto ne so non c'è adattamento di ARIMA al tuo caso. Se ti mancano solo alcune misurazioni nei giorni lavorativi effettivi, potresti essere costretto a utilizzare l'interpolazione.


0

Non interpolerei i dati prima di stimare il modello su questi dati, come notato da @Remi. È una cattiva idea. Un esempio estremo: immagina di avere due punti dati gennaio 2013 e gennaio 2014. Ora interpola 10 punti mensili tra: febbraio e dicembre 2013 ed esegui la regressione alla data mensile. In realtà non sarà così male, ma è la stessa idea: gonfierete al massimo le vostre statistiche.

La strada da percorrere è quella di utilizzare i metodi delle serie temporali che gestiscono i dati mancanti. Ad esempio, metodi dello spazio degli stati. Dai un'occhiata al pacchetto astsa R. Viene fornito con un libro eccellente sull'analisi delle serie storiche. Questo gestirà bene i dati mancanti. Matlab ora ha una funzionalità simile nel pacchetto ssm . Devi imparare a convertire i tuoi modelli in forma di spazio statale, ma devi comunque imparare questo se vuoi allontanarti dalla auto.arima"magia".

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.