Come dividere il set di dati per la previsione delle serie temporali?


22

Ho dati storici sulle vendite di una panetteria (ogni giorno, oltre 3 anni). Ora voglio costruire un modello per prevedere le vendite future (utilizzando funzionalità come giorni feriali, variabili meteorologiche, ecc.).

Come devo dividere il set di dati per adattare e valutare i modelli?

  1. Deve essere un treno cronologico / convalida / prova divisa?
  2. Dovrei quindi eseguire la sintonizzazione dell'iperparametro con il treno e il set di convalida?
  3. La convalida incrociata (nidificata) è una strategia errata per un problema relativo alle serie temporali?


EDIT

Ecco alcuni link che ho trovato dopo aver seguito l'URL suggerito da @ ene100:

  • Rob Hyndman descrive "l'origine di previsione mobile" in teoria e in pratica (con codice R)
  • altri termini per l' origine della previsione mobile sono "ottimizzazione dell'andamento in avanti" ( qui o qui ), "orizzonte mobile" o "origine in movimento"
  • sembra che queste tecniche non saranno integrate in scikit-learn nel prossimo futuro, perché "la domanda e la seminalità di queste tecniche non sono chiare" (dichiarate qui ).

E questo è un altro suggerimento per la validazione incrociata di serie storiche.

Risposte:


8

Questo link dal blog di Rob Hyndman contiene alcune informazioni che potrebbero essere utili: http://robjhyndman.com/hyndsight/crossvalidation/

Nella mia esperienza, dividere i dati in insiemi cronologici (anno 1, anno 2, ecc.) E verificare la stabilità dei parametri nel tempo è molto utile per costruire qualcosa di robusto. Inoltre, se i tuoi dati sono stagionali o hanno un altro modo ovvio di suddividere in gruppi (ad es. Aree geografiche), verificare la stabilità dei parametri in questi sottogruppi può anche aiutare a determinare la solidità del modello e se ha senso adattarsi modelli separati per categorie separate di dati.

Penso che i test statistici possano essere utili, ma il risultato finale dovrebbe anche superare il "test dell'olfatto".


3

1) Tecnicamente parlando, non è necessario eseguire il test del campione se si utilizzano AIC e criteri simili perché aiutano a evitare un eccesso di adattamento.

3) Non vedo come si possa fare il CV standard perché implica l'addestramento di un modello di serie temporale con alcuni valori mancanti. Invece, prova a utilizzare una finestra mobile per l'allenamento e prevedi la risposta in uno o più punti che seguono la finestra.


3
L'AIC nelle serie temporali si basa spesso su un errore di previsione in anticipo di un periodo. Non dice molto sulle prestazioni dinamiche delle previsioni anticipate del periodo n. Quindi, non è assolutamente sufficiente.
Aksakal

Potresti fornire un riferimento?
James,

1

Mi capita spesso di affrontare i problemi da una prospettiva bayesiana. In questo caso, prenderei in considerazione l'uso della sovrimputazione come strategia. Ciò significa impostare una probabilità per i tuoi dati, ma omettere alcuni dei tuoi risultati. Tratta quei valori come mancanti e modella quei risultati mancanti usando le loro corrispondenti covariate. Quindi ruotare attraverso il quale vengono omessi i dati. Puoi farlo all'interno, ad esempio, di una procedura CV 10 volte.

Se implementato all'interno di un programma di campionamento, ciò significa che ad ogni passaggio si disegna un valore candidato del valore di dati omesso (insieme ai parametri) e si valuta la sua probabilità rispetto al modello proposto. Dopo aver raggiunto la stazionarietà, hai dati campionati controfattuali dati il ​​tuo modello che puoi usare per valutare l'errore di predizione: questi esempi rispondono alla domanda "come sarebbe stato il mio modello in assenza di questi valori?" Si noti che queste previsioni erediteranno anche l'incertezza dall'incertezza presente nelle stime dei coefficienti, quindi quando si raccolgono tutti i valori previsti per, ad esempio, il 1 ° marzo 2010, si avrà una distribuzione delle previsioni per quella data.

Il fatto che questi valori siano campionati significa che è ancora possibile utilizzare termini di errore che dipendono dalla disponibilità di una serie completa di dati (ad esempio media mobile), poiché si dispone di un valore di risultato campionato ad ogni passaggio.


1

Nel tuo caso non hai molte opzioni. Hai solo un panificio, a quanto pare. Quindi, per eseguire un test fuori campione, l'unica opzione è la separazione temporale, ovvero il campione di allenamento sarebbe dall'inizio fino a qualche momento recente, e il controllo sarebbe da quel punto ad oggi.

yt=f(t)+εt, dove f(t) è una funzione di diverse cose esogene come manichini stagionali, clima ecc. ma non yS<t, quindi questo non è un modello dinamico di serie storiche. In questo caso è possibile creare il campione di controllo in vari modi, ad esempio un sottoinsieme casuale di giorni, un mese da qualsiasi periodo nel passato, ecc.


Sembra promettente. Qual è il pedice "s" in y_s <= t?
Trascina il

Se stai facendo previsioni per il tempo t, quindi non stai usando nessuno dei yS, dove S<t.
Aksakal,

Immagino che le mie vendite di prodotti da forno dipendono piuttosto da fattori esogeni. Non penso che sia un modello di serie temporale strettamente dinamico come, ad esempio, i prezzi delle azioni. Nei miei dati, l'errore medio medio con un normale CV 5 volte è solo leggermente più grande di un CV serie temporale 5 volte che conserva l'ordine cronologico delle pieghe come descritto qui (ad esempio, 30,7 contro 33,8 per un ExtraTreesRegressor) . Non sei sicuro che questo sia un modo valido per testare empiricamente un modello dinamico?
Trascina il

Qualcosa come ARIMA sarebbe un modello dinamico. Le vendite sono generalmente persistenti, vale a dire le vendite di oggi sono come quelle di ieri.
Aksakal,

0

Dichiarazione di non responsabilità: il metodo qui descritto non si basa sulla lettura approfondita della letteratura. È il mio miglior tentativo di improvvisare un metodo CV K-fold per un'analisi di serie temporali multivariata con lunghezze della finestra di input relativamente brevi (presupponendo una dipendenza assente / bassa su intervalli di tempo più lunghi), in cui si è verificato un problema con presenza non omogenea di origini dati su il periodo di raccolta dei dati.

Innanzitutto la serie di osservazioni viene trasformata in una serie di finestre della cronologia delle osservazioni di lunghezza window_length e con il passaggio 1 tra le finestre (nessun passo). Quindi il principio è quello di dividere il set di dati della finestra in "frammenti" molte volte più lungo di window_length (ma molti di più del numero di istanze del modello) e distribuire i frammenti (come le carte da gioco) come dati di convalida per separare le istanze del modello. Per mantenere i modelli più separati, una finestra di quarantena di window_length all'inizio di ogni frammento viene trattenuta da tutto l'allenamento.

I modelli vengono addestrati su tutti i frammenti tranne i propri e la convalida viene eseguita sui propri frammenti. La convalida della raccolta / insieme di modelli viene effettuata sommando l'errore di convalida su tutti i frammenti, in cui ciascun frammento viene gestito dal relativo modello secondario. Il test su dati invisibili può essere eseguito utilizzando una media (o altra combinazione adeguata) delle uscite di tutti i modelli addestrati.

Questo metodo ha lo scopo di ridurre la dipendenza dal sistema (e dalle origini dati) allo stesso modo per l'intero periodo di raccolta dei dati. È inoltre destinato a conferire a ogni parte approssimativa dei dati la stessa influenza sul modello. Si noti che per evitare che le finestre di quarantena danneggino l'allenamento, è un punto che la lunghezza del frammento non si allinea troppo bene con i periodi che (si prevede che) compaiano nei dati, come i cicli (tipicamente) giornalieri, settimanali e annuali.

Il modello di ensemble potrebbe forse gestire malamente dati completamente nuovi. (Non lo so ancora.)

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.