Vogliamo esserti sempre vicino e il nostro Customer Care risponde 24 ore 365 giorni l'anno. Per i tuoi quesiti di Cultura Finanziaria o per raccontarci la tua esperienza di trader o investitore chiama 0230332800 oppure manda un sms o un whatsapp al 3208756444 o manda una email a info@traders-mag.it

Applicazione del modello ARIMA in ambiente Python

Ultima ora

Scelti per te

L’acronimo ARIMA sta per Auto-Regressive Integrated Moving Average. È uno degli strumenti più comuni per la previsione di una serie temporale nell’ambiente dei data scientist. ARIMA è utilizzato ai fini previsionali nei più svariati ambiti. In questo documento viene trattata la codifica in linguaggio Python del modello, lasciando libero il lettore di approfondire in maniera autonoma la già vasta documentazione teorica disponibile.

Per l’esecuzione ho utilizzato un notebook jupiter (file .ipynb) ma può essere utilizzato qualsiasi ambiente di sviluppo Python (file .py).

Descrizione e codifica del modello
Per prima cosa carichiamo le librerie utili allo sviluppo del nostro algoritmo

Con le seguenti istruzioni importiamo il set di dati e lo visualizziamo. Per questa operazione utilizziamo la funzione di pandas: “read_csv”. All’interno dei due apici va inserito il percorso che consente di accedere al file. Il file deve essere di tipo CSV (Comma-separated values), un file di testo con un formato specifico che consente di salvare i dati in maniera strutturata in tabella. I dati all’interno della tabella sono separati da una virgola.

Per acquisire i dati in formato CSV è possibile utilizzare il servizio gratuito di Yahoo Finance (https://it.finance.yahoo.com/), che consente di scaricare le serie storiche dei sottostanti desiderati. Yahoo Finance permette di impostare il periodo storico interessato, e la frequenza dei dati. In alcuni casi i dati devono essere “puliti” eliminando eventuali campi vuoti (null), per farlo basta semplicemente aprire il file con un editor di testo e eliminare la riga. Certamente eliminare il record non è la strada migliore, l’informazione mancante andrebbe trattata in modo diverso ma non è lo scopo di questo lavoro.

Il file contiene nella prima colonna il campo “date” nel formato ISO 8601 cioè yyyy-mm-dd, i dati OHLC (open, High, Low, Close), il prezzo di chiusura rettificato Adj Close (Adjusted Closing Price) e infine il volume. I dati riportati nella tabella riguardano il future della commody Cocoa.

Con le seguenti istruzioni impostiamo il frame di dati sulla “data” e sul “prezzo di chiusura”, ovviamente questi valori possono essere sostituiti da altri che si desiderano analizzare.

Per tracciare il grafico a linea utilizzando la funzione plot().

Ottenendo la rappresentazione grezza dei valori.

Quando si adatta un modello ARIMA, bisogna impostare i valori dei parametri P, D e Q che ottimizzano o minimizzano una certa metrica di interesse. Esistono molti metodi per trovare i giusti valori per la corretta parametrizzazione dei modelli ARIMA. Questo processo può essere noioso e richiede tempo e competenza statistica.

In questo documento, cerchiamo di superare questo problema scrivendo un algoritmo di ricerca a griglia in Python, che permette di selezionare i valori dei parametri ottimali per il nostro modello in modo automatico.

L’uso di una “ricerca a griglia” consiste nell’esplorare in modo iterativo diverse combinazioni di parametri. Per ogni combinazione, adattiamo un modello ARIMA con la funzione SARIMAX (), e ne valutiamo le prestazioni complessive. Dopo aver esplorato l’intero dominio dei parametri, il nostro insieme ottimale sarà quello che fornisce le migliori prestazioni per i nostri criteri di interesse. In questo scenario, il nostro criterio di interesse è l’informazione Akaike (AIC). L’AIC misura quanto un modello si adatta ai dati tenendo conto della complessità complessiva del modello. Noi ovviamente siamo interessati a trovare un modello che restituisca il valore AIC più basso.

Nel codice seguente definiamo i parametri e generiamo tutte le possibili combinazioni.

Applichiamo la funzione SARIMAX () a tutte le combinazioni di parametri, infine viene stampato il modello con l’AIC più basso.

Il passaggio successivo consiste nell’adattare il modello ARIMA (0,2,1) alla nostra serie temporale in modo automatico.

Stampiamo il report con l’istruzione print().

Infine, settiamo i parametri per creare un grafico con la previsione del prossimo periodo, impostando la dimensione grafica.

 

Tracciamo e salviamo il grafico in formato png.

Nelle immagini vediamo alcuni plottaggi ottenuti.
L’obbiettivo di questo articolo è di fornire spunti pratici nella applicazione di metodi statistici in Python. Per maggiori informazioni sul linguaggio rimando alla ricca comunità italiana per lo sviluppo: https://www.python.it/

F1) Cocoa_5Y.png

Cocoa serie storia 5 anni.
Fonte: dati Yahoo finance elaborazione e plottaggio grafico Maurizio Michele Zuzzaro

F2) Copper_5Y.png

Copper serie storia 5 anni.
Fonte: dati Yahoo finance elaborazione e plottaggio grafico Maurizio Michele Zuzzaro

3) Cotton_5Y.png

Cotton serie storia 5 anni.
Fonte: dati Yahoo finance elaborazione e plottaggio grafico Maurizio Michele Zuzzaro

F4) CrudeOil_5Y.png

Crude Oil serie storia 5 anni.
Fonte: dati Yahoo finance elaborazione e plottaggio grafico Maurizio Michele Zuzzaro

5) NaturalGas_5Y.png

Natural Gas serie storia 5 anni.
Fonte: dati Yahoo finance elaborazione e plottaggio grafico Maurizio Michele Zuzzaro

F6) Soybean_5Y.png

Soybean serie storia 5 anni.
Fonte: dati Yahoo finance elaborazione e plottaggio grafico Maurizio Michele Zuzzaro

 

Maurizio Michele Zuzzaro

Maurizio Michele Zuzzaro è il fondatore del sito finanziario www.performancetrading.it. Ha oltre 18 anni di esperienza come analista finanziario nel mercato delle valute e delle materie prime energetiche. È membro della SIAT (Società Italiana per Analista Tecnica) e dell’Associazione dei mercati finanziari italiani (Assiom Forex).

 

Articoli dello stesso numero

Abbonati a Traders' Magazine Italia

A partire da 63€/10 mesi

Riceverai ogni settimana la versione digitale, di TRADERS’ Magazine