L’analisi delle serie temporali è una branca cruciale della scienza dei dati che si concentra sull’interpretazione di dati sequenziali registrati a intervalli regolari di tempo.

Il trattamento di tali dati è essenziale in molteplici settori, come la finanza, la meteorologia, l’economia, e la gestione della catena di approvvigionamento, per citarne alcuni.

I dati di serie temporali possiedono caratteristiche uniche che li distinguono da altri tipi di dati analitici, tra cui la stagionalità, la tendenza, la ciclicità e il rumore.

Queste caratteristiche possono complicare la modellazione ma, allo stesso tempo, offrono opportunità dettagliate per il prevedere eventi futuri con un alto grado di precisione.

Negli ultimi decenni, con l’evoluzione delle tecniche di machine learning e la crescente disponibilità di grandi quantità di dati temporali, sono stati sviluppati numerosi algoritmi per migliorare la previsione e la comprensione delle dinamiche temporali.

Tra questi, due degli approcci più influenti e ampiamente adottati sono l’ARIMA (AutoRegressive Integrated Moving Average) e Prophet. Questi modelli si distinguono per la loro capacità di incorporare diverse dinamiche temporali e sono stati applicati con successo in una vasta gamma di scenari pratici.

L’applicazione di questi modelli non solo aiuta le organizzazioni a prevedere futuri sviluppi ma consente anche una comprensione più profonda delle forze sottostanti che guidano le variazioni nei dati.

In questo articolo, esamineremo più da vicino come questi modelli possono essere implementati per risolvere problemi reali attraverso esempi pratici in Python, fornendo agli analisti gli strumenti per utilizzare efficacemente le serie temporali nei loro campi di interesse.

ARIMA: AutoRegressive Integrated Moving Average

ARIMA è uno degli approcci più tradizionali e robusti per la modellazione delle serie temporali. È particolarmente efficace per dati storici ben definiti e stazionari, dove le osservazioni successive sono correlate tra loro.

Arima

Arima

ARIMA è un modello classico e robusto che si concentra sulla descrizione delle autocorrelazioni nei dati.

Questo modello è particolarmente adatto per dati storici che mostrano livelli di stazionarietà, ovvero dati le cui proprietà statistiche come la media e la varianza non cambiano nel tempo.

D’altro canto, Prophet è un modello più recente sviluppato da Facebook, progettato specificamente per affrontare sfide legate a dati con forti stagionalità e tendenze che cambiano nel tempo, comuni in contesti aziendali moderni.

Caso d’uso specifico: Previsione del prezzo delle azioni

Supponiamo di voler prevedere il prezzo delle azioni di una società basandoci su dati storici.

Per questo esempio, utilizzeremo un dataset fittizio che rappresenta i prezzi delle azioni giornalieri per semplificare l’implementazione.

Esempio in Python con ARIMA:

import pandas as pd
import numpy as np
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt

# Creazione di un dataset fittizio
np.random.seed(0)
data = pd.Series(100 + np.random.normal(0, 1, 100).cumsum(),
index=pd.date_range('20200101', periods=100))

# Fit del modello ARIMA
model = ARIMA(data, order=(1, 1, 1))
model_fit = model.fit()

# Previsione
forecast = model_fit.forecast(steps=5)
print(forecast)

# Plot dei risultati
plt.figure(figsize=(10,5))
plt.plot(data, label='Dati Originali')
plt.plot(pd.date_range('20200410', periods=5, freq='D'), forecast, label='Previsione')
plt.title('Previsione del Prezzo delle Azioni con ARIMA')
plt.legend()
plt.show()

Prophet: Previsione con stagionalità e Tendenze

Sviluppato da Facebook, Prophet è progettato per gestire serie temporali con forti stagionalità e cambiamenti nelle tendenze, comuni in molti contesti aziendali e industriali.

prophet

prophet

È stato progettato per essere accessibile e utilizzabile da persone con una vasta gamma di esperienze in analisi di dati, facilitando l’analisi di serie temporali complesse con poche linee di codice.

Questo modello è particolarmente utile in contesti aziendali dove le serie temporali presentano forti componenti stagionali e dove le tendenze possono cambiare radicalmente a causa di nuovi prodotti e interventi di mercato.

Caratteristiche principali di Prophet:

  1. Flessibilità: A differenza di modelli più rigidi come ARIMA, Prophet si adatta facilmente a cambiamenti stagionali e tendenze non lineari nei dati, rendendolo ideale per dati con cicli stagionali annuali, settimanali e giornalieri.
  2. Gestione di dati mancanti e outlier: Prophet gestisce efficacemente i dati mancanti e può essere robusto agli outlier, il che è spesso una sfida nelle serie temporali reali.
  3. Componenti di stagionalità multiple: Il modello permette di incorporare stagionalità personalizzate oltre a quelle automatiche, come stagionalità annuali, settimanali e giornaliere. Gli utenti possono aggiungere anche effetti di vacanze o eventi speciali che possono influenzare i modelli di comportamento temporale.
  4. Facilità d’uso: Prophet è implementato sia in Python che in R, e può essere utilizzato con poche righe di codice. Questa facilità d’uso apre la modellazione di serie temporali a un pubblico più ampio, non limitato a statistici o ingegneri.
  5. Componenti del modello: Il modello include termini per la tendenza che possono cambiare nel tempo in modo lineare o logistico, la stagionalità che è rappresentata come somma di funzioni sinusoidali e termini di vacanza che possono incorporare effetti irregolari dovuti a vacanze o eventi.

Caso d’uso specifico: previsione della domanda turistica

Consideriamo il caso di un’azienda turistica che vuole prevedere la domanda futura. Questo esempio utilizza un dataset simulato che rappresenta il numero mensile di visitatori.

Esempio in Python con Prophet:

from fbprophet import Prophet
import pandas as pd

# Creazione di un dataset fittizio
df = pd.DataFrame({
'ds': pd.date_range('20190101', periods=24, freq='M'),
'y': 100 + np.random.normal(0, 10, 24).cumsum()
})

# Fit del modello Prophet
model = Prophet()
model.fit(df)

# Previsione futura
future = model.make_future_dataframe(periods=12, freq='M')
forecast = model.predict(future)

# Visualizzazione dei risultati
fig = model.plot(forecast)
plt.title('Previsione della Domanda Turistica con Prophet')
plt.show()

Conclusioni

L’uso di ARIMA e Prophet nella modellazione delle serie temporali offre agli analisti e ai ricercatori strumenti potenti per la previsione accurata e l’analisi delle tendenze.

Mentre ARIMA è ideale per serie stazionarie con dipendenze temporali strette, Prophet offre una maggiore flessibilità per dati con variazioni stagionali evidenti e trend non lineari.

L’applicazione di questi modelli a casi d’uso reali può significativamente migliorare la capacità di previsione e decisionale nelle organizzazioni.