Modello SARIMA per la previsione dei tassi di cambio valuta.

SARIMA model for currency exchange rate forecasting.

Introduzione

La previsione dei tassi di cambio valutari è la pratica di anticipare i futuri cambiamenti nel valore di una valuta rispetto ad un’altra. La previsione dei cambi valutari può aiutare persone, aziende e organizzazioni finanziarie a prendere decisioni finanziarie informate. Una delle tecniche di previsione che può essere utilizzata è SARIMA. SARIMA è un’ottima tecnica di previsione delle serie temporali per stimare i dati delle serie temporali con modelli stagionali.

Funziona modellando il collegamento tra i valori passati e attuali di una serie temporale e riconoscendo i modelli nei dati. SARIMA utilizza una varietà di modelli di auto-regressione (AR) e media mobile (MA), nonché di differenziazione, per catturare le tendenze e la stagionalità dei dati. “Stagionalità” si riferisce alle variazioni dei dati che si verificano regolarmente e in modo prevedibile durante un periodo specifico, come cicli giornalieri, settimanali o annuali. Possiamo essere meglio informati sui cambiamenti nei valori delle valute anticipando i tassi di cambio. Ora, passiamo alla previsione attraverso i passaggi nell’articolo.

Obiettivi di apprendimento

  1. Aiutare individui, aziende e istituzioni finanziarie a prevedere le tendenze di mercato identificando modelli e tendenze nei dati storici.
  2. Ridurre il rischio identificando i potenziali rischi associati alle fluttuazioni valutarie.
  3. Per ottimizzare le conversioni di valuta identificando il momento migliore per convertire le valute.
  4. Migliorare la presa di decisioni fornendo alle imprese e ai singoli informazioni sulla direzione futura dei tassi di cambio valutari.

In base a questi obiettivi, utilizzeremo SARIMA per sviluppare un modello per stimare i tassi di cambio valutari aggregando modelli di dati stagionali per effettuare previsioni più accurate dei valori futuri.

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Passaggio 1: Importazione della libreria

!pip install pmdarima
from pmdarima.arima import auto_arima
from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.seasonal import seasonal_decompose
import pandas as pd
import matplotlib.pyplot as plt
import plotly.express as px
import plotly.graph_objs as go
import plotly.io as pio

Dobbiamo installare la libreria ‘pmdarima’ per utilizzare la funzione auto_arima. Questa funzione adatta un modello ARIMA con dati di serie temporale e determina automaticamente i parametri del modello appropriati in base ai dati forniti.

Passaggio 2: Lettura dei dati

Abbiamo bisogno di dati storici sui tassi di cambio tra due valute per prevedere i tassi di cambio. Possiamo quindi scaricare dati storici contenenti tassi di cambio settimanali tra INR e USD sul sito web di Yahoo Finance. E possiamo utilizzare un periodo dal 1 dicembre 2003 al 15 giugno 2023. Fortunatamente, l’ho reso pubblico su GitHub.

alamat = 'https://raw.githubusercontent.com/ataislucky/Data-Science/main/dataset/USD-INR_Weekly.csv'
data = pd.read_csv(alamat)
print(data.sample(11))

Verifichiamo se il dataset include valori mancanti prima di procedere ulteriormente. È essenziale verificare.

print(data.isna().sum())

Sono stati identificati diversi valori mancanti nel dataset. Pertanto, dobbiamo eliminarli.

data = data.dropna()

Esaminiamo le statistiche descrittive per acquisire una migliore comprensione del dataset e dei fattori che lo sostengono. Possiamo ottenere informazioni essenziali sulle caratteristiche del dataset, individuare potenziali valori anomali, comprendere gli elementi di distribuzione dei dati e stabilire il quadro per futuri sforzi di analisi dei dati esplorativi e di modellizzazione. Vediamo le statistiche descrittive per questa raccolta di dati.

print(data.describe())

Il dataset contiene il valore di INR per 1 USD per un dato tempo. Di seguito sono riportate tutte le caratteristiche del dataset:

  1. La data rappresenta il giorno specifico dei dati sui tassi di cambio.
  2. Open si riferisce al tasso di cambio all’inizio di un periodo di trading specifico, come il prezzo di apertura per il giorno o la settimana.
  3. High rappresenta il tasso di cambio più alto osservato durante un periodo di trading specifico.
  4. Low rappresenta il tasso di cambio più basso osservato durante un periodo di trading specifico.
  5. Close mostra il tasso di valuta alla fine di un determinato periodo di trading.
  6. Adjusted Closing considera qualsiasi attività commerciale che possa influire sul prezzo di chiusura, come divisioni o dividendi azionari.
  7. Volume si riferisce al numero di coppie di valute USD-INR scambiate durante un periodo specifico.

Passo 3: Analisi del tasso di conversione

Analizziamo i tassi di conversione tra le due valute nel corso degli anni. Esaminando le tendenze storiche, possiamo acquisire preziose informazioni sulla dinamica dei tassi di cambio e potenzialmente scoprire importanti modelli o eventi che influenzano questi tassi di cambio. Per visualizzare questa analisi, utilizzeremo un grafico a linea per illustrare la tendenza del tasso di conversione USD-INR nel tempo.

figure = px.line(data, x="Date",
                 y="Close",
                 title='Tasso di conversione nel corso degli anni (USD/INR)')
figure.show()

Agregar i campi di anno e mese ai dati in modo da poter abilitare un’analisi temporale più approfondita.

data["Date"] = pd.to_datetime(data["Date"], format = '%Y-%m-%d')
data['Year'] = data['Date'].dt.year
data["Month"] = data["Date"].dt.month
print(data.head())

Esaminiamo l’aumento annuo composto del tasso di cambio INR-USD per scoprire i periodi di forza o debolezza economica, importanti eventi che influenzano i tassi di cambio o modelli a lungo termine nei tassi di conversione INR-USD.

growth = data.groupby('Year').agg({'Close': lambda x: (x.iloc[-1]-x.iloc[0])/x.iloc[0]*100})

fig = go.Figure()
fig.add_trace(go.Bar(x=growth.index,
                     y=growth['Close'],
                     name='Crescita annua'))

fig.update_layout(title="Crescita annua del tasso di conversione (USD/INR)",
                  xaxis_title="Anno",
                  yaxis_title="Crescita (%)",
                  width=900,
                  height=600)

pio.show(fig)

Ora suddividiamo ulteriormente guardando la crescita mensile combinata del tasso di conversione tra INR e USD.

import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
# Calcola la crescita mensile
data['Growth'] = data.groupby(['Year', 'Month'])['Close'].
transform(lambda x: (x.iloc[-1] - x.iloc[0]) / x.iloc[0] * 100)

# Raggruppa i dati per mese e calcola la crescita media
grouped_data = data.groupby('Month').mean().reset_index()

fig = go.Figure()

fig.add_trace(go.Bar(
    x=grouped_data['Month'],
    y=grouped_data['Growth'],
    marker_color=grouped_data['Growth'],
    hovertemplate='Mese: %{x}<br>Crescita media: %{y:.2f}%<extra></extra>'
))

fig.update_layout(
    title="Crescita mensile aggregata del tasso di conversione (USD/INR)",
    xaxis_title="Mese",
    yaxis_title="Crescita media (%)",
    width=900,
    height=600
)

pio.show(fig)

Il grafico illustra che il valore USD è costantemente diminuito in gennaio e marzo. Questa osservazione mostra che l’INR tende a rafforzarsi contro l’USD in questi mesi, riducendo il tasso di conversione. Nel frattempo, nel secondo trimestre, l’USD è aumentato rispetto all’INR ogni anno. Il valore dell’USD contro l’INR ha raggiunto il suo picco ad agosto ma è diminuito a settembre, è aumentato annualmente nel quarto trimestre e poi è diminuito a dicembre.

Passo 4: Costruire un modello SARIMA e fare una previsione

Dobbiamo eseguire una decomposizione stagionale dei dati del tasso di cambio USD – INR. Questo metodo separa le diverse componenti dei dati: tendenze, stagionalità e fluttuazioni residue o casuali.

result = seasonal_decompose(data["Close"], model='multiplicative', period=24)
fig = plt.figure()
fig = result.plot()
fig.set_size_inches(8, 6)
fig.show()

Possiamo vedere che c’è un modello stagionale in questi dati. Quindi, usiamo SARIMA come algoritmo più appropriato per questi dati. Prima di usare SARIMA, dobbiamo trovare i valori p, d e q. Possiamo usare la libreria “pmdarima” per trovare questi valori in modo automatico.

model = auto_arima(data['Close'], seasonal=True, m=52, suppress_warnings=True)
print(model.order)

Il parametro seasonal=True determina che la serie temporale mostra un modello stagionale. Nel frattempo, il parametro m=52 mostra la periodicità stagionale dei dati settimanali. E 2, 1, 0 sono i valori p, d, q.

Siamo pronti per addestrare il nostro modello usando SARIMA per stimare i tassi di cambio delle valute.

from statsmodels.tools.sm_exceptions import  ValueWarning
warnings.simplefilter('ignore', ValueWarning)

p, d, q = 2, 1, 0
model = SARIMAX(data["Close"], order=(p, d, q),
                seasonal_order=(p, d, q, 52))
fitted = model.fit()
print(fitted.summary())

Adesso prevediamo i futuri tassi di cambio valutario dal modello ARIMA adattato.

predictions = fitted.predict(len(data), len(data)+90)
print(predictions)

Visualizziamo il valore previsto sul grafico per renderlo più coinvolgente.

fig = go.Figure()

# Aggiungi il grafico della linea dei dati di allenamento
fig.add_trace(go.Scatter(
    x=data.index,
    y=data['Close'],
    mode='lines',
    name='Dati di allenamento',
    line=dict(color='blue')
))

# Aggiungi il grafico della linea delle previsioni
fig.add_trace(go.Scatter(
    x=predictions.index,
    y=predictions,
    mode='lines',
    name='Previsioni',
    line=dict(color='red')
))

fig.update_layout(
    title="Dati di allenamento VS Previsioni",
    xaxis_title="Data",
    yaxis_title="Chiusura",
    legend_title="Dati",
    width=1000,
    height=600
)

pio.show(fig)

Conclusione

Questo articolo inizia controllando se ci sono valori mancanti nel dataset e analizzando i dati con statistiche descrittive. Poi esplora il tasso di conversione tra le due valute aggregato annualmente e mensilmente prima di prevedere il tasso di cambio valutario usando SARIMA. Abbiamo discusso i seguenti punti:

  • Il modello SARIMA è un modello statistico che cattura le tendenze stagionali nei valori passati dei dati per prevedere sconti futuri.
  • Il modello SARIMA può prevedere i tassi di cambio valutario per varie valute.
  • Il modello SARIMA aiuta a prendere decisioni informate relative al trading valutario, alla pianificazione finanziaria o alle operazioni commerciali internazionali.
  • L’accuratezza del modello dipende da diversi fattori, tra cui la qualità dei dati e la stabilità del mercato valutario.

Questo articolo fornisce una guida completa alla previsione del tasso di cambio valutario con SARIMA utilizzando Python.

Domande frequenti

Il media mostrata in questo articolo non è di proprietà di Analytics Vidhya ed è utilizzata a discrezione dell’autore.