Metodi di previsione delle serie temporali | Arima in Python e R

Contenuti

introduzione

Immagina questo: sei stato incaricato di prevedere il prezzo del prossimo iPhone e ti sono stati forniti i dati storici. Ciò include funzionalità come le vendite trimestrali, spese mensili e una miriade di altre cose che accompagnano il bilancio di Apple. Come scienziato dei dati, In che tipo di problema lo classificheresti? Modellazione di serie temporali, Certo.

Dalla previsione delle vendite dei prodotti alla stima del consumo elettrico domestico, La previsione delle serie temporali è una delle competenze fondamentali che ogni data scientist dovrebbe conoscere, se non quello domina. Ci sono una miriade di tecniche diverse che puoi usare, e in questo articolo tratteremo uno dei più efficaci, chiamato Auto ARIMA.

autoarimafeat-6048464

Capiremo prima il concetto di ARIMA che ci porterà al nostro argomento principale: Auto ARIMA. Per consolidare i nostri concetti, prenderemo un set di dati e lo implementeremo sia in Python che in R.

Sommario

  1. Che cos'è una serie temporale??
  2. Metodi per la previsione delle serie temporali
  3. Introduzione ad ARIMA
  4. Passi per implementare ARIMA
  5. Perché abbiamo bisogno di AutoARIMA?
  6. Implementazione automatica ARIMA (nel set di dati dei passeggeri aerei)
  7. Come si selezionano i parametri ARIMA automatici??

Se hai familiarità con le serie temporali e le loro tecniche (come media mobile, livellamento esponenziale e ARIMA), puoi andare direttamente alla sezione 4. Per i principianti, inizia dalla sezione sottostante, che è una breve introduzione alle serie temporali e alle varie tecniche di previsione. .

1. Che cos'è una serie temporale??

Prima di conoscere le tecniche per lavorare con i dati delle serie temporali, dobbiamo prima capire cos'è veramente una serie temporale e come si differenzia da qualsiasi altro tipo di dati. Ecco la definizione formale di serie temporali: è una serie di punti dati misurato in intervalli di tempo coerenti. Questo significa semplicemente che particolari valori vengono registrati ad un intervallo costante che può essere orario., quotidiano, settimanalmente, ogni 10 giorni, eccetera. Ciò che rende le serie temporali diverse è che ogni punto dati nella serie dipende dai punti dati precedenti. Comprendiamo più chiaramente la differenza facendo un paio di esempi.

Esempio 1:

Supponiamo di avere un insieme di dati di persone che hanno ottenuto un prestito da una determinata azienda (come mostrato nella tabella seguente). Pensi che ogni riga sarà correlata alle righe precedenti?? Certamente no! Il prestito preso da una persona sarà basato sulle sue condizioni finanziarie e sui suoi bisogni (potrebbero esserci altri fattori come la dimensione della famiglia, eccetera., ma per semplificare stiamo considerando solo il reddito e il tipo di prestito). Cosa c'è di più, i dati non sono stati raccolti in nessun intervallo di tempo specifico. Dipende da quando l'azienda ha ricevuto una richiesta di prestito.

autoarima1-2590281

Esempio 2:

Facciamo un altro esempio. Supponiamo di avere un set di dati che contiene il livello di CO2 nell'aria al giorno (screenshot qui sotto). Puoi prevedere la quantità approssimativa di CO2 per il giorno successivo guardando i valori degli ultimi giorni?? Bene, Certo. Se noti, i dati sono stati registrati giornalmente, vale a dire, l'intervallo di tempo è costante (24 ore).

auto-arima-4681520

Devi aver avuto un'intuizione su questo ormai: il primo caso è un semplice problema di regressione e il secondo è un problema di serie temporali. Sebbene il puzzle delle serie temporali qui possa essere risolto anche utilizzando la regressione lineare, non è proprio l'approccio migliore, poiché trascura la relazione dei valori con tutti i relativi valori passati. Diamo ora un'occhiata ad alcune delle tecniche comuni utilizzate per risolvere problemi di serie temporali..

2. Metodi per la previsione delle serie temporali

Esistono diversi metodi per la previsione delle serie temporali e li tratteremo brevemente in questa sezione.. Spiegazioni dettagliate e codici Python per tutte le tecniche menzionate di seguito possono essere trovate in questo articolo: 7 tecniche per la previsione delle serie temporali (con codici Python).

  1. Approccio ingenuo: In questa tecnica di previsione, si prevede che il valore del nuovo punto dati sia uguale al punto dati precedente. Il risultato sarebbe una linea piatta, poiché tutti i nuovi valori assumono i valori precedenti.ingenuo-2432706
  2. Media semplice: Il seguente valore viene preso come media di tutti i valori precedenti. Le previsioni qui sono migliori dell'"Approccio ingenuo", in quanto non risulta in una linea piatta, ma qui, tutti i valori passati sono presi in considerazione, ciò che potrebbe non essere sempre utile. Ad esempio, quando gli viene chiesto di prevedere la temperatura odierna, Prenderei in considerazione la temperatura dell'ultimo 7 giorni invece della temperatura di un mese fa.semplicemedia-5477497
  3. Media mobile : Questo è un miglioramento rispetto alla tecnica precedente. Invece di prendere la media di tutti i punti precedenti, la media di 'n’ i punti precedenti sono presi come valore previsto.media mobile-7801970
  4. Media mobile ponderata: Una media mobile ponderata è una media mobile in cui i valori 'n’ al passato vengono dati pesi diversi.wmovingavg-5287626
  5. Livellamento esponenziale semplice: In questa tecnica, alle osservazioni più recenti vengono assegnati pesi maggiori rispetto a quelle del lontano passato.ses-3692119
  6. Modello di tendenza lineare di Holt: Questo metodo tiene conto dell'andamento del set di dati. Per tendenza, intendiamo la natura crescente o decrescente della serie. Supponiamo che il numero di prenotazioni alberghiere aumenti ogni anno, quindi possiamo dire che il numero di prenotazioni mostra un trend in aumento. La funzione di previsione in questo metodo è una funzione di livello e trend.holttrend-3015737
  7. Metodo Holt Winters: Questo algoritmo tiene conto sia dell'andamento che della stagionalità della serie. Ad esempio, il numero di prenotazioni alberghiere è alto nei fine settimana e basso nei giorni feriali, e aumenta ogni anno; c'è una stagionalità settimanale e un trend in crescita.holtwinter-3922820
  8. ARIMA: ARIMA è una tecnica molto popolare per la modellazione di serie temporali. Descrive la correlazione tra i punti dati e tiene conto della differenza di valori. Un miglioramento rispetto ad ARIMA è SARIMA (o ARIMA . stagionale). Vedremo ARIMA in modo un po' più dettagliato nella prossima sezione..

3. Introduzione ad ARIMA

In questa sezione faremo una rapida introduzione ad ARIMA che sarà utile per capire Auto Arima. Una spiegazione dettagliata di Arima è inclusa in questo articolo, parametri (P, Q, D), grafica (ACF PACF) e implementazione: Tutorial completo sulle serie temporali.

ARIMA è un metodo statistico molto popolare per la previsione delle serie temporali. ARIMA significa Medie mobili auto-regressive integrate. I modelli ARIMA funzionano con le seguenti ipotesi:

  • La serie di dati è stazionaria, il che significa che la media e la varianza non dovrebbero variare nel tempo. Una serie può essere resa stazionaria usando la trasformazione logaritmica o differenziando la serie.
  • I dati forniti come input devono essere una serie univariata, poiché arima usa i valori passati per prevedere i valori futuri.

ARIMA ha tre componenti: INSIEME A (termine autoregressivo), io (termine di differenziazione) y MA (termine medio mobile). Comprendiamo ciascuno di questi componenti:

  • Il termine AR si riferisce ai valori passati utilizzati per prevedere il valore successivo. Il termine AR è definito dal parametro 'p’ in arima. Il valore di 'p’ determinato utilizzando il grafico PACF.
  • Il termine MA viene utilizzato per definire il numero di errori di previsione passati utilizzati per prevedere i valori futuri. Il "parametro q"’ in arima rappresenta il termine MA. Il grafico ACF viene utilizzato per identificare il valore 'q’ Destra.
  • L'ordine di differenziazione specifica il numero di volte in cui viene eseguita l'operazione di differenziazione seriale per renderla stazionaria. È possibile utilizzare test come ADF e KPSS per determinare se la serie è stazionaria e aiutare a identificare il valore d.

4. Passi per implementare ARIMA

I passaggi generali per implementare un modello ARIMA sono:

  1. Carica i dati: Il primo passo nella costruzione del modello è, Certo, caricare il set di dati.
  2. Pre-elaborazione: A seconda del set di dati, verranno definiti i passaggi di pre-elaborazione. Ciò includerà la creazione di timestamp, converti il ​​tipo di colonna della data / ora, rendere la serie univariata, eccetera.
  3. Rendi la serie stazionaria: Per soddisfare l'ipotesi, è necessario rendere stazionaria la serie. Ciò includerebbe il controllo della stazionarietà della serie e l'esecuzione delle necessarie trasformazioni.
  4. Determina il valore d: Per rendere stazionaria la serie, il numero di volte in cui è stata eseguita l'operazione di differenza sarà preso come valore d
  5. Crea grafici ACF e PACF: Questo è il passo più importante nell'implementazione di ARIMA. I grafici ACF PACF vengono utilizzati per determinare i parametri di input per il nostro modello ARIMA.
  6. Determinare i valori di p e q: Leggi i valori p e q dai grafici del passaggio precedente
  7. Monta il modello ARIMA: Utilizzando i dati elaborati e i valori dei parametri che abbiamo calcolato dai passaggi precedenti, montare il modello ARIMA
  8. Prevedere i valori nel set di convalida: Prevedere i valori futuri
  9. Calcola RMSE: Per verificare le prestazioni del modello, controlla il valore RMSE utilizzando previsioni e valori effettivi nel set di convalida.

5. Perché abbiamo bisogno di Auto ARIMA?

Sebbene ARIMA sia un modello molto potente per la previsione dei dati delle serie temporali, i processi di preparazione dei dati e ottimizzazione dei parametri finiscono per richiedere molto tempo. Prima di implementare ARIMA, devi rendere stazionaria la serie e determinare i valori di p e q usando i grafici di cui abbiamo discusso in precedenza. Auto ARIMA rende questo compito davvero facile per noi, poiché elimina i passaggi 3 un 6 che abbiamo visto nella sezione precedente. Prossimo, sono mostrati i passaggi da seguire per implementare ARIMA automatico:

  1. Caricare dati: Questo passaggio sarà lo stesso. Carica i dati sul tuo laptop
  2. Pre-trattamento dei dati: l'input deve essere univariato, così, rimuovi le altre colonne
  3. Adatta Auto ARIMA: si adatta al modello della serie univariata
  4. Prevedere i valori nel set di convalida: fare previsioni sul set di convalida
  5. Calcola RMSE: controllare le prestazioni del modello utilizzando i valori previsti rispetto ai valori effettivi

Ignoriamo completamente la selezione delle funzioni p e q, come potete vedere. Che sollievo! Nella prossima sezione, implementeremo ARIMA automatico utilizzando un set di dati giocattolo.

6. Implementazione in Python e R

Useremo il set di dati International-Air-Passenger. Questo set di dati contiene il numero totale mensile di passeggeri (in migliaia). Ha due colonne: mese e numero di passeggeri. Puoi scaricare il set di dati da questo link.

#caricare i dati
data = pd.read_csv('international-airline-passengers.csv')

#dividere in treno e set di convalida
treno = dati[:int(0.7*(len(dati)))]
valido = dati[int(0.7*(len(dati))):]

#pre-elaborazione (poiché arima accetta serie univariate come input)
train.drop('Mese',asse = 1, posto = vero)
valid.drop('Mese',asse = 1, posto = vero)

#tracciare i dati
treno["Passeggeri delle compagnie aeree internazionali"].complotto()
valido["Passeggeri delle compagnie aeree internazionali"].complotto()

autoarimaplot1-3762053

#costruire il modello
da piramide.arima import auto_arima
modello = auto_arima(treno, trace=Vero, error_action='ignora', sopprimere_avvertimenti=Vero)
model.fit(treno)

forecast = model.predict(n_periodi = solo(valido))
previsione = pd.DataFrame(previsione,indice = valido.indice,colonne=['Predizione'])

#tracciare le previsioni per il set di convalida
plt.trama(treno, etichetta="Treno")
plt.trama(valido, etichetta="Valido")
plt.trama(previsione, etichetta="Predizione")
plt.mostra()

autoarimaplot-4372874

#calcola rmse
from math import sqrt
da sklearn.metrics import mean_squared_error

rms = sqrt(mean_squared_error(valido,previsione))
Stampa(rms)
produzione -
76.51355764316357

Di seguito è riportato il codice R per lo stesso problema:

# caricamento dei pacchi
biblioteca(previsione)
biblioteca(Metrica)

# lettura dei dati
data = read.csv("compagnia-internazionale-passeggeri.csv")

# suddividere i dati in treno e insiemi validi
treno = dati[1:100,]
valido = dati[101:ora(dati),]

# rimuovere "Mese" colonna
treno$Mese = NULL

# modello di allenamento
modello = auto.arima(treno)

# riepilogo del modello
riepilogo(modello)

# previsione
previsione = prevedere(modello,44)

# valutazione
rmse(valido$passeggeri.aerei.internazionali, previsione$pred)

7. In che modo Auto Arima seleziona i parametri migliori??

Nel codice sopra, usiamo solo il .adattarsi() comando per adattare il modello senza dover selezionare la combinazione di p, Q, D. Ma, In che modo il modello ha scoperto la migliore combinazione di questi parametri?? Auto ARIMA tiene conto dei valori AIC e BIC generati (come puoi vedere nel codice) per determinare la migliore combinazione di parametri. Valori AIC (Criterio informativo di Akaike) e BIC (Criterio di informazione bayesiana) sono stimatori per confrontare i modelli. Più bassi sono questi valori, migliore è il modello.

Dai un'occhiata a questi link se sei interessato alla matematica dietro AIC e BIC.

8. Note finali e approfondimenti

Ho scoperto che l'auto ARIMA è la tecnica più semplice per fare previsioni sulle serie temporali. Conoscere una scorciatoia è bene, ma è anche importante avere familiarità con la matematica che c'è dietro. In questo articolo, Ho esaminato i dettagli di come funziona ARIMA, ma assicurati di controllare i link forniti nell'articolo. Per tua facile consultazione, ecco di nuovo i link:

Suggerirei di mettere in pratica ciò che abbiamo imparato qui su questo problema pratico: Problema pratico sulle serie temporali. Puoi anche seguire il nostro corso di formazione creato sullo stesso problema pratico, Serie temporali di previsione, per darti un vantaggio.

Buona fortuna e sentiti libero di inviarci i tuoi commenti e porre domande nella sezione commenti qui sotto..

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.