Come gestire più serie temporali contemporaneamente?


14

Ho un set di dati che include la domanda di diversi prodotti (1200 prodotti) per 25 periodi e devo prevedere la domanda di ciascun prodotto per il periodo successivo. All'inizio, volevo usare ARIMA e formare un modello per ogni prodotto, ma a causa del numero di prodotti e del tuning dei parametri (p, d, q), è così lungo e non pratico. Si consiglia di utilizzare una regressione in cui le richieste precedenti sono variabili indipendenti (Autoregressive)?

Posso sapere se esiste un metodo per addestrare un singolo modello per la previsione della domanda di tutti i 1200 prodotti? Sarei grato se potessi suggerire qualche libreria in Python perché sto usando Python.


3
Il pacchetto più avanzato per l'analisi delle serie storiche ad alta dimensione di cui sono a conoscenza è bigtimein R. Forse potresti chiamare R da Python per poterlo usare.
Richard Hardy,

Risposte:


11

Generalmente quando si hanno più serie temporali, si userebbe una sorta di modello basato su vettori per modellarli tutti contemporaneamente. La naturale estensione del modello ARIMA a questo scopo è il modello VARIMA (Vector ARIMA). Il fatto che tu abbia 1200 serie temporali significa che dovrai specificare alcune pesanti restrizioni parametriche sui termini di correlazione incrociata nel modello, dal momento che non sarai in grado di gestire parametri gratuiti per ogni coppia di variabili delle serie temporali.

Vorrei suggerire di iniziare con alcuni semplici modelli basati su vettori (ad es. VAR, VMA, VARMA) con basso grado e alcune semplici restrizioni dei parametri per la correlazione incrociata. Vedi se riesci a trovare un modello ragionevole che incorpori la correlazione incrociata con almeno un grado di ritardo, e poi vai da lì. Questo esercizio richiederà la lettura di modelli di serie temporali basati su vettori. Il MTSpacchetto e il bigtimepacakage in Rhanno alcune capacità per gestire serie temporali multivariate, quindi varrebbe la pena familiarizzare con questi pacchetti.


Il pacchetto più avanzato per l'analisi delle serie storiche ad alta dimensione di cui sono a conoscenza è bigtimein R. Per quanto ne so MTS, è più una dimostrazione di esempi di libri di testo che un vero strumento di lavoro. Alcuni esempi multivariati possono solo gestire serie tridimensionali prima di soffocare sul carico computazionale.
Richard Hardy,

@Richard Hardy: Grazie --- Ho modificato la mia risposta per includerla.
Ripristina Monica il

1
Un buon modo di procedere sarebbe prendere in considerazione un VAR bayesiano, o più specificamente il grande modello VAR bayesiano.
Graeme Walsh,

6

Come menzionato da Ben, i metodi del libro di testo per più serie temporali sono i modelli VAR e VARIMA. In pratica, tuttavia, non li ho visti usati così spesso nel contesto della previsione della domanda.

Molto più comuni, incluso quello che il mio team attualmente utilizza, sono le previsioni gerarchiche (vedi anche qui ). Le previsioni gerarchiche vengono utilizzate ogni volta che abbiamo gruppi di serie temporali simili: cronologia delle vendite per gruppi di prodotti simili o correlati, dati turistici per le città raggruppate per area geografica, ecc ...

L'idea è quella di avere un elenco gerarchico dei diversi prodotti e quindi fare previsioni sia a livello base (cioè per ogni singola serie temporale) sia a livelli aggregati definiti dalla gerarchia del prodotto (vedere il grafico allegato). Quindi riconciliare le previsioni a diversi livelli (usando Top Down, Botton Up, Riconciliazione ottimale, ecc ...) a seconda degli obiettivi di business e degli obiettivi di previsione desiderati. Nota che in questo caso non inserirai un modello multivariato di grandi dimensioni, ma più modelli in nodi diversi nella gerarchia, che vengono quindi riconciliati utilizzando il metodo di riconciliazione scelto.

inserisci qui la descrizione dell'immagine

Il vantaggio di questo approccio è che raggruppando insieme serie temporali simili, è possibile sfruttare le correlazioni e le somiglianze tra loro per trovare modelli (tali variazioni stagionali) che potrebbero essere difficili da individuare con una singola serie temporale. Poiché genererai un gran numero di previsioni impossibili da sintonizzare manualmente, dovrai automatizzare la procedura di previsione delle serie temporali, ma ciò non è troppo difficile, vedi qui per i dettagli .

Un approccio più avanzato, ma simile nello spirito, viene utilizzato da Amazon e Uber, dove una grande rete neurale RNN / LSTM è addestrata su tutte le serie temporali contemporaneamente. È simile nello spirito alla previsione gerarchica perché cerca anche di apprendere modelli da somiglianze e correlazioni tra serie temporali correlate. È diverso dalla previsione gerarchica perché cerca di apprendere le relazioni tra le serie temporali stesse, al contrario di avere questa relazione predeterminata e fissata prima di fare la previsione. In questo caso, non è più necessario occuparsi della generazione automatica delle previsioni, poiché si sta sintonizzando solo un modello, ma poiché il modello è molto complesso, la procedura di ottimizzazione non è più una semplice attività di minimizzazione AIC / BIC e occorre per esaminare le più avanzate procedure di ottimizzazione dell'iperparametro,

Vedi questa risposta (e commenti) per ulteriori dettagli.

Per i pacchetti Python, PyAF è disponibile ma non molto popolare. Molte persone usano il pacchetto HTS in R, per il quale c'è molto più supporto da parte della comunità. Per gli approcci basati su LSTM, ci sono i modelli DeepAR e MQRNN di Amazon che fanno parte di un servizio che devi pagare. Diverse persone hanno anche implementato LSTM per la previsione della domanda utilizzando Keras, puoi cercarle.


1
A parte. AUTOBOX implementa il tipo di modellazione gerarchica a cui hai fatto riferimento durante l'utilizzo dei totali di GRUPPO come possibile serie guida al fine di AIUTARE la previsione dei BAMBINI utilizzando i modelli SARMAX. L'incertezza nelle previsioni del bambino è quindi anche una funzione cumulativa dell'incertezza nel genitore mentre incorpora la possibilità di impulsi futuri in entrambi. Felicissimo di vedere qualcun altro impiegare questo approccio.
IrishStat,

Amazon ha recentemente aperto l'algoritmo DeepAR di provenienza nell'ambito del framework GluonTS che sfrutta il framework MxNet, anche se a questo punto trovo un po 'carente la documentazione. aws.amazon.com/blogs/opensource/…
hardikudeshi,

5

Il problema con i pacchetti di adattamento di massa che sono stati suggeriti è che non riescono in modo uniforme a gestire la struttura deterministica latente come impulsi, spostamenti di livello / passo, impulsi stagionali e tendenze temporali o gestire in modo efficiente i causali suggeriti dall'utente secondo https: // autobox.com/pdfs/SARMAX.pdf

Inoltre, il tempo di calcolo può essere una grave complicazione. AUTOBOX (che ho aiutato a sviluppare) ha una fase di costruzione del modello molto sofisticata che archivia i modelli e un'opzione di previsione molto rapida che riutilizza il modello precedentemente sviluppato riducendo il tempo di previsione a una piccola frazione del rigoroso tempo di sviluppo del modello mentre aggiusta la nuova previsione per recente dati osservati dopo che il modello è stato sviluppato e memorizzato. Ciò è stato implementato per il progetto previsionale di 600.000 negozi di Annheuser-Busch per oltre 50 articoli tenendo conto del prezzo e del tempo.

I modelli possono essere aggiornati in modo continuo, sostituendo i modelli precedenti, se necessario.

Non sono necessarie restrizioni parametriche O omettere l'effetto simultaneo di variabili causali come in VAR e VARIMA, basandosi esclusivamente sul passato di tutte le serie alla ARIMA.

Non è necessario avere solo 1 modello con 1 set di parametri poiché i modelli possono e devono essere personalizzati / ottimizzati per le singole serie.

Sfortunatamente non esiste ancora una soluzione Python ma la speranza è eterna.


1
Sembra interessante. Solo un piccolo cavillo: anche in qualcosa di semplice come un VAR, ogni serie ha la sua equazione, quindi la necessità di avere solo 1 modello con 1 set di parametri non è un problema. A meno che tu non suggerisca diversi modelli per la stessa serie, il che potrebbe essere una buona idea dal punto di vista delle combinazioni di previsioni.
Richard Hardy,

obiettivo: "addestrare un singolo modello per la previsione della domanda di tutti i 1200 prodotti?" L'ho preso letteralmente come 1 equazione di tipo con 1 set di parametri fissi / globali stimati da tutte le 1200 serie temporali ". Forse l'ho letto
troppo

O forse ho sbagliato.
Richard Hardy,

3

1200 prodotti sono il principale motore della dimensionalità del tuo problema. Ora hai solo 25 periodi. Questi sono pochissimi dati, insufficienti per fare qualsiasi tipo di analisi di correlazione generale. In altre parole non hai dati per avere una previsione simultanea di tutti i prodotti senza ridurre la dimensionalità. Questo praticamente elimina tutti i VARMA e altri simpatici modelli teorici. È impossibile affrontare i coefficienti di questi modelli, ce ne sono troppi da stimare.

Considera una semplice analisi di correlazione. Avresti bisogno (1200x1200 + 1200) / 2 cellule nella matrice di covarianza / correlazione. Hai solo 25 punti dati. La matrice sarà classificabile deumibilmente a un livello enorme. Che cosa hai intenzione di fare? In generale, hai due semplici approcci: previsioni separate e modello fattoriale.

Il primo approccio è ovvio: si esegue ogni prodotto in modo indipendente. La variazione consiste nel raggrupparli per alcune caratteristiche, ad esempio settori come "chiusura uomo".

dio=ΣjFjβjio+eioFj

Se è un fattore esogeno, allora dovresti ottenere i beta regredendo individualmente la serie su questi fattori. Per PCA, potresti fare un PCA robusto e ottenere i primi fattori con i loro pesi quali sono i beta.

F^j


Vedo il tuo punto circa 25 periodi per una serie temporale molto breve, ma se fossero valori mensili? Quindi l'OP ha due anni di dati mensili, che sono sufficienti per acquisire un po 'di stagionalità o almeno per usare un semplice livellamento esponenziale, no?
Skander H.

@SkanderH., 25 punti possono essere sufficienti per eseguire una serie (ovvero ciascuna serie per conto proprio) o l'aggregato. Il mio punto è che non è sufficiente eseguirlo come sistema.
Aksakal,

Oppure potrebbero essere fattori esogeni, ad esempio quelli ottenuti con l'analisi PCA. Forse endogeno ?
Richard Hardy,

1

Non sono sicuro che tu sia interessato a soluzioni basate su cloud, ma Amazon rende disponibile un algoritmo che chiamano "DeepAR" tramite AWS SageMaker, come mostrato qui .

Questo algoritmo ha lo scopo specifico di essere in grado di apprendere da più serie temporali di input al fine di creare previsioni, comprese funzionalità statiche e dinamiche; come visto in questo estratto dalla pagina collegata sopra:

L'input di training per l'algoritmo DeepAR è una o, preferibilmente, più serie temporali target che sono state generate dallo stesso processo o processi simili. Sulla base di questo set di dati di input, l'algoritmo addestra un modello che apprende un'approssimazione di questo processo / processi e lo utilizza per prevedere l'evoluzione delle serie temporali target. Ogni serie temporale target può essere facoltativamente associata a un vettore di caratteristiche categoriche statiche (indipendenti dal tempo) fornite dal campo cat e a un vettore di serie temporali dinamiche (dipendenti dal tempo) fornite dal campo dynamic_feat.

Sfortunatamente, per quanto ne so, non rendono questo algoritmo disponibile per l'utilizzo offline / autonomo.

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.