• Home
  • Chi sono
  • Risorse
  • Contatti
  • Approfondimenti
  • Cerca nel sito

Lorenzo Govoni

Business e Tecnologia

  • Big Data
  • Business
  • Excel
  • Intelligenza Artificiale

Modello ARIMA: come prevedere le serie temporali

arima

 

Quando si cerca di prevedere un andamento futuro si fanno delle stime o pianificazioni. 

Ad esempio decidere se costruire un altro impianto di generazione di energia nei prossimi cinque anni richiede previsioni sulla domanda futura; programmare il personale in un call center la prossima settimana richiede previsioni sui volumi di chiamate; o ancora, immagazzinare un inventario richiede previsioni del fabbisogno di scorte.

Queste stime possono essere più o meno corrette. In questo articolo andremo a vedere come poter pianificare un fenomeno che viene descritto da delle serie temporali, tramite il modello ARIMA.

Prima di vedere il modello, capiamo cosa sono le serie temporali.

 

Serie temporale

La previsione di serie temporali è l’uso di un modello per prevedere valori futuri in base a valori osservati in precedenza.

Questo viene applicato in tutti i settori: dall’inventario ai visitatori del sito web, dalla pianificazione delle risorse ai dati finanziari, i dati delle serie temporali sono ovunque intorno a noi.

Mentre i modelli standard di machine learning considerano le previsioni temporali passate eque e di pari grado rispetto a quelle future, i modelli che si basano sulle serie temporali le cui osservazioni variano nel tempo aggiungono un’esplicita dipendenza dall’ordine tra le osservazioni: una dimensione temporale.

Questa dimensione aggiuntiva è sia un vincolo che una struttura che fornisce una fonte di informazioni aggiuntive.

Una serie temporale può essere suddivisa in 3 componenti.

  • Tendenza (Trend): movimento verso l’alto e verso il basso dei dati nel tempo per un lungo periodo di tempo (ad es. Apprezzamento della casa);
  • Stagionalità: varianza stagionale (ovvero un aumento della domanda di gelato durante l’estate);
  • Rumore: picchi e avvallamenti a intervalli casuali.

 

Serie temporale stazionaria

Prima di applicare qualsiasi modello statistico su una serie temporale, vogliamo assicurarci che sia stazionaria, o per lo meno il più possibile.

Questo perché diventa più semplice la previsione della serie temporale e meno volatile. Se i dati sono stazionari significa che la media della serie temporale non aumenta nel tempo, cosa che non è affatto vera per una serie non stazionaria.

Nell’immagine successiva, la serie a sinistra in verde si può considerare stazionaria, a differenza di quella di destra rossa che non lo è:

Oltre alla media di una serie stazionaria, anche la varianza di una serie stazionaria non varia in funzione del tempo (questo concetto viene detto Omoschedasticità). Allo stesso modo la serie di sinistra dell’immagine successiva può considerarsi stazionaria, a differenza di quella di destra:

Infine, la covarianza dell’i-esimo termine e quella dell’i-esimo più uno termine non deve dipendere dal tempo.

Se una serie temporale è stazionaria e ha un comportamento particolare in un dato intervallo di tempo, è lecito ritenere che avrà lo stesso comportamento in un momento successivo.

La maggior parte dei metodi di modellazione statistica presuppone o richiede che le serie temporali siano stazionarie, e così presuppone pure il modello Arima.

Cos’è il modello ARIMA?

ARIMA è un acronimo che sta per AutoRegressive Integrated Moving Average. ARIMA comprende due modelli al suo interno: quello autoregressivo detto AR (AutoRegressive) e quello sulle medie mobili MA (Moving Average), che vedremo brevemente nel proseguo dell’articolo.

La parte auto regressiva (AR) utilizza la relazione di dipendenza tra un’osservazione e un certo numero di osservazioni ritardate e viene definita nel modello dal parametro p.

Ci permette di incorporare l’effetto dei valori passati nel nostro modello. Intuitivamente, questo sarebbe simile ad affermare che è probabile che domani sia caldo se è stato caldo negli ultimi 3 giorni.

Invece la parte di media mobile (MA) utilizza la dipendenza tra un’osservazione e un errore residuo da un modello a media mobile applicato alle osservazioni ritardate. Questo valore è rappresentato dal modello ARIMA con il parametro q.

Esso consente di impostare l’errore del modello come una combinazione lineare dei valori di errore osservati in punti temporali precedenti in passato. Rappresenta una parte della serie temporale non spiegata dalla tendenza o dalla stagionalità.

All’unione di questi due modelli si aggiunge una parte integrata, che permette di gestire la differenziazione di una serie, ossia la differenza di un’osservazione da un’osservazione nella fase temporale precedente.

L’uso della differenziazione delle osservazioni grezze aiuta a rendere stazionarie le serie temporali ed è definita dal parametro d.

Questo parametro rappresenta il numero di trasformazioni differenziali per rendere la serie stazionaria.

Il primo valore differenziale è la differenza tra il periodo di tempo corrente e il periodo di tempo precedente. Se questi valori non riescono a ruotare attorno a una media e una varianza costanti, troviamo la seconda differenza utilizzando i valori della prima differenza. Lo ripetiamo fino a ottenere una serie stazionaria.

Intuitivamente, sarebbe simile ad affermare che è probabile che domani sarà la stessa temperatura se la differenza di temperatura negli ultimi tre giorni è stata molto piccola.

 

Esempio modello Arima

Vediamo ora un esempio, cercando di prevedere il prezzo di chiusura delle Azioni Amazon.

I dati sono estrapolati da yahoo finance, negli ultimi 5 anni del colosso dell’e-commerce. Il dataset è composto dalle seguenti caratteristiche:

  • Date: indica la data di negoziazione in borsa;
  • Open: Indica il prezzo di apertura del titolo;
  • High: indica il prezzo più alto raggiunto nella data di riferimento dal titolo;
  • Low: indica il prezzo più basso raggiunto nella data di riferimento dal titolo;
  • Close: indica il prezzo di chiusura raggiunto nella data di riferimento dal titolo;
  • Adj Close: indica il prezzo di chiusura modificato nella data di riferimento del titolo;
  • Volume: indica il quantitativo di azioni Amazon scambiate durante l’arco della giornata.

 

Installare la libreria Statsmodels

Prima di importare le librerie ci serve controllare di avere installato statsmodels, la libreria per eseguire calcoli statistici e richiamare il modello ARIMA.

Il modo più veloce per installarla in Windows è aprire il prompt dei comandi, posizionarsi nella cartella dove è installato python e digitare:

pip install -U statsmodels

Per altre informazioni puoi vedere direttamente la pagina di statsmodels.

Allo stesso modo se hai già installato anaconda, puoi installarlo direttamente dall’anaconda Prompt utilizzando il comando

conda install -c conda-forge statsmodels

Maggiori informazioni puoi trovarli al seguente link.

 

Importare le librerie

Oltre alle librerie standard (Pandas, Numpy e Matplotlib), importiamo le librerie che utilizzeremo per creare il modello ARIMA.

Abbiamo:

  • Warnings: la classe per impedire di visualizzare i messaggi di avviso;
  • AdFuller: per verificare il test Adfuller e capire se la serie è stazionaria o meno;
  • Plot_acf: la classe per graficare il grafico ACF, e capire il valore del parametro q del modello arima;
  • Plot_pacf: la classe per graficare il grafico PACF e capire quale valore assegnare al parametro p del modello;
  • Arima: la classe per poter creare il modello ARIMA.

Importare il dataset

Importiamo i dati in formato csv da yahoo finance. Carichiamo il dataset, utilizzando il metodo read_csv. I due puntini stanno ad indicare che si deve specificare il percorso corretto dove è salvato il file:

Di seguito sono visualizzati i dati estratti dal file:

Il seguente codice permette di creare il grafico successivo negli ultimi 5 anni partendo dal 29/10/15 e arrivando al 28/10/20. Sull’asse delle ascisse impostiamo la data mentre sulle ordinate il prezzo.

Utilizziamo poi “ignore” della classe warnings per fare in modo di non ricevere messaggio di avvertimento durante l’esecuzione del codice:

 

Verificare la stazionarietà della serie di dati

Come anticipato in precedenza, per applicare ARIMA, non ci resta che capire quando la serie è stazionaria. Esistono due modi principali per determinare se una determinata serie temporale è stazionaria. Essi sono:

Statistiche a rotazione: permettono di tracciare la media mobile e la deviazione standard mobile, per vedere se rimangono costanti nel tempo.

Test Dickey-Fuller aumentato: è un test statistico che ci permette di verificare la stazionarietà o meno di una serie temporale. La serie temporale è considerata stazionaria se il valore p è basso (secondo l’ipotesi nulla) e i valori critici a intervalli di confidenza dell’1%, 5%, 10% sono il più vicini possibile alle statistiche ADF.

Detta in altri termini, l’ipotesi nulla del test ADF è che la serie temporale non sia stazionaria. Quindi, se il valore p del test è inferiore al livello di significatività (0,05), si rifiuta l’ipotesi nulla e si deduce che la serie temporale è effettivamente stazionaria.

Calcoliamo le statistiche a rotazione e salviamo i risultati della media mobile dentro la variabile rolling_mean, e della deviazione standard mobile dentro rolling_std. Verifichiamo in seguito il test adfuller e rappresentiamo i risultati in un grafico.

Con la seguente funzione vediamo i valori appena definiti, creiamo un grafico che a vista d’occhio ci mostra la media e la varianza della serie temporale e i risultati del test statistico.

Associamo il valore del prezzo di chiusura a una variabile test1, e poi richiamiamo la funzione appena creata passandogli la nuova variabile:

Notiamo che la media non è costante; potremmo già assumere che la serie non è stazionaria.

In secondo luogo possiamo notare che il p-value è piuttosto maggiore rispetto a 0,05, e quindi concludere che la serie non è stazionaria:

Vediamo ora di differenziare la serie. Ciò significa sottrarre il valore precedente dal valore corrente, per ogni valore della serie. Quindi il prezzo di chiusura di oggi è sottratto dal prezzo di chiusura di ieri, e così via. Andiamo poi ad associare questa differenza alla variabile shift, e cancellare i valori nulli che potrebbero crearsi:

A volte, a seconda della complessità della serie, potrebbe essere necessaria più di una differenziazione. Ad ogni differenziazione comunque, si incrementa di 1 il parametro d, utilizzato dal modello ARIMA.

Il valore di d, quindi, è il numero minimo di differenze necessarie per rendere stazionaria la serie. E se la serie temporale è già stazionaria, allora d = 0.

Nel nostro caso siamo obbligati a differenziare almeno una volta la serie temporale. In questo modo rendiamo più piatta la media, meno la deviazione standard, mentre otteniamo un valore più basso del p-value:

Ci fermiamo qua perché il valore di ADF è diventato minore dei valori critici e il p-value è inferiore allo 0,05. Possiamo considerare questa serie stazionaria e quindi ci fermiamo.

 

Grafico ACF

Verificata la stazionarietà della serie non ci resta che determinare i parametri p e q della serie (d abbiamo visto che possiamo ritenerlo pari a 1). Per trovare questi valori in genere si utilizzano le funzioni di autocorrelazione (AutoCorrelation Function o ACF in breve) e funzioni parziali di autocorrelazione (Partial AutoCorrelation Function o PACF).

A seconda del valore di questi due grafici si può comprendere se utilizzare il modello MA o il modello AR, o entrambi.

Per capire se è necessario utilizzare il modello MA possiamo usare il grafico ACF.

Un modello di media mobile puro (solo MA) è quello in cui Yt dipende solo dagli errori di previsione ritardati.

dove i termini di errore sono gli errori dei modelli auto regressivi dei rispettivi ritardi.

Il modello della media mobile appena presentato è un modello di serie temporale che tiene conto dell’autocorrelazione di breve periodo.

Fondamentalmente afferma che l’osservazione successiva è la media di ogni osservazione passata. L’ordine del modello della media mobile, q, di solito può essere stimato guardando il grafico ACF delle serie temporali.

In questo grafico, il coefficiente di correlazione è nell’asse y mentre il numero di ritardi è mostrato nell’asse x. In Python si può richiamare la funzione plot_acf (dopo averla precedentemente importata):

Un buon valore del grafico è quello che esce dall’intervallo di confidenza in blu. Il picco allo 0 non conta e i picchi al di fuori del blu più avanti nel grafico sono probabilmente dovuti a un errore casuale.

Di conseguenza, scegliamo il primo valore negativo 1, come valore per il parametro q.

Grafico PACF

Un modello auto regressivo puro (solo AR) è quello in cui Yt dipende solo dai propri ritardi.

dove, Y {t-1} è il lag1 della serie, beta1 è il coefficiente di lag1 stimato dal modello e alpha è il termine di intercetta, anch’esso stimato dal modello.

Il modello auto regressivo utilizza le osservazioni delle fasi temporali precedenti come input per un’equazione di regressione per prevedere il valore nella fase successiva. Il modello AR accetta un argomento, p, che determina quanti passaggi temporali precedenti verranno immessi.

L’ordine, p, del modello auto regressivo può essere determinato osservando la funzione di autocorrelazione parziale (PACF), che fornisce la correlazione parziale di una serie temporale stazionaria con i propri valori ritardati, regrediti rispetto alle serie temporali a tutti i ritardi più brevi.

Similmente a come abbiamo visto per il grafico ACF, si può richiamare la funzione plot_pacf dopo averla importata:

Un buon valore del grafico è quello che esce dall’intervallo di confidenza in blu. Come visto per il modello di media mobile, prendiamo il primo valore di MA che esce dall’intervallo di confidenza, anche se negativo, come valore del parametro p.

Di conseguenza, scegliamo 1 come valore di p.

 

Creazione del modello Arima

Arrivati a questo punto abbiamo un’idea dei parametri del modello p,d,q da utilizzare. Per utilizzare il modello basta richiamare la classe ARIMA di statsmodels, adattare i dati dei prezzi di chiusura al modello e infine verificare i risultati:

Il riepilogo del modello rivela molte informazioni. La prima tabella da una serie generale di informazioni sul tipo di modello ARIMA, il grado dell’ordine, il metodo utilizzato dal modello, la data di esecuzione e altre informazioni che sono utili in fase di confronto tra vari modelli.

Al momento ci concentriamo sulla tabella al centro che rappresenta la tabella dei coefficienti in cui i valori sotto “coef” sono i pesi dei rispettivi termini. 

ar.L1 si riferisce al termine autoregressivo con il ritardo di 1, mentre ma.L1 si riferisce al termine di “media mobile” con ritardo di 1. L’esempio mostrato è un modello di primo ordine.

Come si può immaginare, maggiore è il numero di ritardi utilizzati nel modello, più lunga sarà l’equazione.

Le colonne “std err” sono una stima dell’errore del valore previsto. Ti dice quanto è forte l’effetto dell’errore residuo sui parametri stimati (la prima colonna).

La “z” è uguale ai valori di “coef” diviso per “std err”. È quindi il coefficiente standardizzato.

La colonna P > |z| è il p-value del coefficiente. È molto importante controllare questi p-value prima di continuare a utilizzare il modello. Se uno qualsiasi di questi valori è superiore alla soglia specificata (solitamente 0,05), potresti utilizzare un coefficiente inaffidabile che potrebbe causare risultati fuorvianti. Nel nostro esempio, tutti i p-value sono inferiori a 0,05, quindi questo modello può andare bene.

Le ultime due colonne rappresentano gli intervalli di confidenza. In parole semplici, questi valori sono il valore del coefficiente meno (colonna di sinistra) e più (colonna di destra) il margine di errore specificato.

Per valutare i risultati del modello, vediamo cosa esso prevede rispetto ai dati passati. Infatti, ogni osservazione in una serie temporale può essere prevista utilizzando tutte le osservazioni precedenti (questo concetto viene rappresentato dai fitted.values)

Quindi, vediamo questa differenza e la riportiamo su un grafico (il colore in blu sono effettivamente i dati effettivi dei prezzi dell’azione negli ultimi 5 anni, quelli in arancio sono quelli previsti dal modello):

È poi possibile utilizzare la funzione plot_predict di ARIMA per prevedere il risultato del modello sulla serie temporale. Il primo valore indicato, 1220, è il giorno di partenza per vedere nel grafico anche l’andamento nell’ultimo periodo; 1300 invece è il giorno di fine, per vedere l’andamento futuro (i dati della serie storica si ricorda sono del 29 ottobre, il giorno 1259).

Quindi possiamo visualizzare nel grafico l’andamento nella serie storica nel prossimo mese, con un intervallo di confidenza del 95%.

 

Conclusione

In questo articolo abbiamo visto come funziona il modello ARIMA e un esempio di suo utilizzo nel tentare di prevedere l’andamento del prezzo di chiusura dell’azione Amazon nel tempo.

Non è facile riuscire a prevedere il valore del prezzo di un’azione: ci sono troppe variabili in gioco, come la politica, il management dell’azienda, l’andamento del mercato e quindi i gusti dei consumatori, che cambiano a una velocità sempre maggiore, giusto per citarne alcuni.

L’esempio di modello ARIMA creato può certamente essere migliorato cercando di ottimizzare il range dei differenti parametri di p,q e d.

In ogni modo, il modello ARIMA può essere utilizzato nelle situazioni in cui si hanno delle serie temporali da voler prevedere, per fare pianificazioni e stime di un fenomeno.

Qualunque siano le circostanze o gli orizzonti temporali coinvolti, la previsione è un aiuto importante per una pianificazione efficace ed efficiente e utilizzare ARIMA può permettere di eseguirla correttamente nelle situazioni in cui si vogliano prevedere trend futuri, capire esigenze passate, o pianificare il futuro.

  • La gestione delle scorte tramite il lotto economico
    La gestione delle scorte tramite il lotto economico
  • MRP Case Study: assemblaggio auto
    MRP Case Study: assemblaggio auto
  • Valutazione delle rimanenze di magazzino: 3 metodi principali
    Valutazione delle rimanenze di magazzino: 3 metodi…
  • Material Requirement Planning (MRP): Concetti base
    Material Requirement Planning (MRP): Concetti base
Share
Pin
Share
Tweet

Intelligenza Artificiale Machine Learning, Statistica

  • Home
  • Archivio
  • Risorse
  • Newsletter
  • Cerca nel sito

Copyright © 2021 · Lorenzo Govoni - Privacy Policy