Vai al contenuto principale

Facebook Prophet: un approccio moderno al forecasting delle serie temporali

Scopri come Facebook Prophet modella trend, stagionalità ed eventi speciali per previsioni accurate e interpretabili.
· 10 min leggi

Scopri con l'IA

Le aziende si affidano alla previsione dei trend futuri per prendere decisioni strategiche, come stimare le vendite di un prodotto o valutare la variabilità della domanda. Un modo efficace per fare previsioni è il forecasting di serie temporali. Un principio chiave del forecasting di serie temporali è la dipendenza dai valori storici dei dati per prevedere i risultati futuri. Questo richiede attenzione ai dati, perché quelli reali tendono a essere rumorosi o mancanti e quindi difficili da prevedere.

Sebbene esistano molti strumenti per il forecasting di serie temporali, Facebook Prophet è progettato specificamente per gestire le complessità del mondo reale, che vanno dai trend non lineari e dalla stagionalità all’impatto di eventi speciali come festività, campagne marketing o picchi di traffico. Se non hai alcuna familiarità con il forecasting di serie temporali, ti consiglio i nostri corsi Time Series Analysis in Python e/o Forecasting in R.

Che cos’è Facebook Prophet?

Prophet è una libreria open source per il forecasting sviluppata dal team Core Data Science di Facebook. È disponibile sia in Python che in R. Una delle ragioni per cui data analyst e data scientist la apprezzano è che automatizza molti passaggi ripetitivi dei metodi tradizionali di previsione. Grazie a questa flessibilità, aiuta a produrre rapidamente previsioni interpretabili e di buona qualità.

Il framework di modellazione alla base di Facebook Prophet

L’approccio di modellazione di Facebook Prophet è strutturato ma flessibile. Scompone una serie temporale in quattro componenti chiave: trend, stagionalità, festività ed errore. Il terzo componente, quello delle festività, non è così standard. La decomposizione classica e quella STL ne specificano tre: trend, stagionalità ed errore.

Chiarendo come trend, stagionalità e festività contribuiscono alla previsione finale, la decomposizione aiuta a validare il ragionamento del modello mentre cerchiamo di prendere decisioni informate.

Decomposizione delle serie temporali

Prophet usa un modello additivo in cui la serie temporale y(t) è espressa come:

Equazione di decomposizione delle serie temporali di Facebook Prophet

Dove 

  • Trend (g(t)) indica la crescita o il calo di lungo periodo.

  • Stagionalità (s(t)) include pattern ricorrenti come fluttuazioni settimanali, mensili o annuali.

  • Effetti delle festività (h(t)) tengono conto di eventi irregolari ma prevedibili, come il Black Friday o le festività nazionali.

  • Errore (et) è il rumore residuo non spiegato dagli altri componenti.

Oltre a fornire interpretabilità mostrando quali fattori guidano le previsioni, automatizza anche gran parte del processo di previsione delle serie temporali, come il rilevamento della stagionalità e il trattamento dei valori mancanti.

Gestendo queste operazioni di pre-processing complesse, Prophet riduce la necessità di una vasta competenza statistica, spesso richiesta nei metodi statistici convenzionali. ARIMA, ad esempio, richiede che valgano ipotesi di stazionarietà e non considera ufficialmente fattori esterni, mentre Prophet modella esplicitamente stagionalità e impatti delle festività, risultando quindi considerato più semplice per il forecasting in ambito business.

Specificazione del componente trend

Prophet offre due modelli di trend:

  1. Il modello a crescita logistica è utile quando una serie temporale satura a una capacità massima, come accade con l’adozione di una nuova app da parte degli utenti.
  2. Il modello lineare a tratti suddivide il trend in segmenti con punti di cambiamento, facilitando la modellazione di variazioni improvvise nella crescita.

Modellazione della stagionalità

La stagionalità è modellata tramite una serie di Fourier che consente funzioni periodiche lisce nei dati di serie temporali. Prevede due principali forme di comportamento stagionale:

  • La stagionalità additiva è necessaria quando le variazioni stagionali restano costanti in ampiezza nel tempo.
  • La stagionalità moltiplicativa è appropriata quando le fluttuazioni stagionali crescono con il trend, ad esempio un volume di vendite che aumenta con la crescita del mercato.

Inoltre, è possibile definire stagionalità personalizzate per rappresentare pattern unici e specifici del dominio, ad esempio promozioni trimestrali.

Integrazione di festività ed eventi

Prophet consente anche di incorporare sia festività predefinite sia elenchi arbitrari di eventi. Ciò è particolarmente utile per modellare cicli di business, festività culturali o eventi una tantum come lanci di prodotto. Si possono aggiungere anche eventi inattesi come il COVID-19 come regressori aggiuntivi per aggiornare dinamicamente le previsioni. La modellazione esplicita di tali eventi migliora l’accuratezza e fornisce insight sull’impatto delle date speciali sui trend sottostanti.

Gestione del rumore e degli outlier

I dati reali spesso contengono rumore e outlier, che possono distorcere le previsioni del modello. Prophet dispone di funzioni di perdita robuste e componenti di trend non parametrici che rendono la previsione più resistente agli outlier nei dati.

Per migliorare ulteriormente la stabilità delle previsioni, è utile analizzare i grafici dei residui e pre-processare i dati con tecniche come winsorizing o rimozione delle anomalie. Questi passaggi assicurano che il modello apprenda i trend reali, e non il rumore casuale.

Quando usare Facebook Prophet (e quando no)

Come la maggior parte dei modelli e delle tecniche di machine learning, Prophet non è una soluzione valida per ogni caso. Capire dove eccelle e dove no è fondamentale per usarlo in modo efficace.

Punti di forza e scenari ideali

Prophet è particolarmente efficace quando:

  • i dati presentano una chiara stagionalità giornaliera, settimanale o annuale;
  • i dataset sono incompleti e richiedono una gestione automatica di valori mancanti e outlier;
  • gli utenti hanno bisogno di analisi esplorative rapide e di uno sviluppo iniziale del modello.

La sua semplicità lo rende accessibile anche a chi ha una competenza statistica limitata, mentre la sua interpretabilità aiuta analisti e data scientist a comunicare efficacemente i risultati a stakeholder non tecnici.

Limitazioni e possibili insidie

Prophet può essere meno adatto nei seguenti scenari:

  • dati altamente volatili o non stagionali, privi di pattern periodici regolari;
  • previsioni di lungo periodo quando i trend sono imprevedibili;
  • trend non lineari non catturati dai modelli lineare a tratti o logistico.

Una regola d’oro nell’uso di Prophet, o di qualsiasi modello di forecasting, è evitare di adottarlo ciecamente. Senza una corretta validazione, i modelli possono facilmente produrre previsioni troppo sicure o fuorvianti, come si è visto in varie discussioni della community e in fallimenti di forecasting di alto profilo.

Lavorare con Prophet in Python

Passo 1: Importa le librerie

Per prima cosa, carica tutti i pacchetti Python necessari:

  • pandas per la manipolazione dei dati

  • prophet per costruire il modello di forecasting

  • matplotlib per la visualizzazione

  • sklearn.metrics – per calcolare la MAPE, la metrica di errore

import pandas as pd
from prophet import Prophet
import matplotlib.pyplot as plt
from sklearn.metrics import mean_absolute_percentage_error

Passo 2:  Carica il dataset

Ora leggiamo il file CSV che contiene i prezzi storici dei future sull’oro. Qui c’è un collegamento al dataset Kaggle che sto usando.

file_path = "future-gc00-daily-prices.csv"
gold_ts = pd.read_csv(file_path)

Passo 3: Pulisci i dati

Ora dobbiamo pulire i dati. Questo significa che:

  • Rimuoviamo le virgole dalle colonne numeriche e le convertiamo in float.

  • Convertiamo la colonna Date da stringa a datetime.

Questo garantisce che Prophet possa interpretare e ordinare correttamente le date.

for col in ["Open", "High", "Low", "Close"]:
    gold_ts[col] = gold_ts[col].str.replace(",", "").astype(float)
gold_ts["Date"] = pd.to_datetime(gold_ts["Date"], format="%m/%d/%Y")

Passo 4: Ordina i dati per data

Disporre i dati in ordine cronologico. È un passaggio importante che può sfuggire.

gold_ts = gold_ts.sort_values("Date")

Passo 5: Prepara i dati per Prophet

Dobbiamo anche preparare i dati per Prophet, che si aspetta colonne di input denominate:

  • ds → datestamp

  • y → valore da prevedere (qui, il prezzo di Close)

gold_ts = gold_ts[["Date", "Close"]].rename(columns={"Date": "ds", "Close": "y"})

Passo 6: Suddividi in training e test set

Ora dividiamo i dati in versioni di training e di test. 

  • Mantieni la maggior parte dei dati per il training.
  • Riserva le ultime 180 righe (o il 10% se inferiore) per testare l’accuratezza del modello.
test_size = min(180, len(gold_ts) // 10)
train = gold_ts.iloc[:-test_size]
test = gold_ts.iloc[-test_size:]

Passo 7: Addestra il modello Prophet

Allena Prophet sui dati storici attivando sia la stagionalità giornaliera che quella annuale.

model = Prophet(daily_seasonality=True, yearly_seasonality=True)
model.fit(train)

Passo 8: Prevedi i valori futuri

Prevediamo per lo stesso numero di giorni presenti nel test set.

La previsione contiene colonne come yhat (predetto), yhat_lower e yhat_upper.

future = model.make_future_dataframe(periods=test_size)
forecast = model.predict(future)

Passo 9: Allinea le previsioni ai valori reali

Unisci i prezzi di chiusura reali con le previsioni del modello sulle date corrispondenti per confrontarli direttamente.

merged = pd.merge(test, forecast[["ds", "yhat"]], on="ds", how="inner")

Passo 10: Calcola la MAPE

Ora misuriamo quanto è accurata la previsione. Se non c’è sovrapposizione di date, viene mostrato un avviso invece di un errore.

if merged.empty:
    print("No overlapping dates between forecast and test set.")
else:
    mape = mean_absolute_percentage_error(merged["y"], merged["yhat"]) * 100
    print(f"Mean Absolute Percentage Error (MAPE): {mape:.2f}%")

Qui, la mean absolute percentage error (MAPE): 5,83%

Equazione MAPE

Passo 11: Traccia il grafico della previsione

Visualizziamo la previsione, gli intervalli di confidenza e la storia reale.

fig1 = model.plot(forecast)
plt.title("Gold Futures (GC00) - Close Price Forecast")
plt.xlabel("Date")
plt.ylabel("Close Price")
plt.show()

Risultato della previsione di Facebook Prophet

Passo 12: Traccia i componenti stagionali

È utile mostrare come trend e pattern di stagionalità giornaliera e annuale contribuiscano alla previsione.

fig2 = model.plot_components(forecast)
plt.show()

Decomposizione stagionale di Facebook Prophet

Passo 13: Rivedi alcuni esempi di previsione

Mostra gli ultimi valori previsti e i relativi intervalli di incertezza.

print(forecast[["ds", "yhat", "yhat_lower", "yhat_upper"]].tail(10))

Valori previsti di esempio:

             ds         yhat   yhat_lower   yhat_upper
3714 2023-11-09  1834.568081  1743.127873  1922.791205
3715 2023-11-10  1833.323500  1749.265678  1937.246093
3716 2023-11-11  1832.818196  1740.941278  1921.772611
3717 2023-11-12  1832.370884  1745.285047  1925.012684
3718 2023-11-13  1832.644350  1736.792708  1919.057042
3719 2023-11-14  1832.017761  1736.229502  1929.786669
3720 2023-11-15  1831.650906  1743.190077  1924.851936
3721 2023-11-16  1831.566521  1738.181184  1933.026740
3722 2023-11-17  1830.427713  1736.038529  1919.505155
3723 2023-11-18  1830.029816  1737.022754  1922.118728

Validazione e test di Facebook Prophet

Metodologia di validazione

La cross-validation per serie temporali è necessaria per simulare scenari di forecasting reali. È importante valutare le prestazioni del modello su più set di validazione consecutivi. Non solo aiuta a evitare il lookahead bias, ma fornisce anche una maggiore generalizzabilità a dati futuri non visti.

Alcune metriche di valutazione standard includono:

  • Mean absolute error (MAE) misura l’ampiezza media degli errori, ignorandone la direzione.
  • Mean absolute percentage error (MAPE) misura la differenza percentuale assoluta media. È facilmente interpretabile su scale diverse. È quella che abbiamo visto nell’esempio in Python.

Analisi comparativa

Rispetto ad ARIMA o LSTM, Prophet è efficace nel:

  • gestire stagionalità irregolari e gli effetti delle festività;
  • dimostrare robustezza a dati mancanti, outlier e irregolarità di business.

Tuttavia, Prophet può performare peggio in scenari con pattern altamente non lineari o dataset con stagionalità debole. 

Applicazioni pratiche e limitazioni

Casi d’uso reali

Prophet è stato ampiamente adottato in vari settori per casi d’uso come:

  • forecasting delle vendite retail, misurazione della domanda e gestione dell’inventario;
  • previsione del traffico web per comprendere il coinvolgimento degli utenti;
  • previsione della domanda energetica per bilanciare in modo efficiente offerta e consumi.

Nonostante i vantaggi, ci sono stati casi in cui i pattern storici sono venuti meno a causa di interruzioni impreviste, come avvenuto durante la pandemia. 

Vincoli di scalabilità

Prophet può gestire dataset moderatamente grandi, il che è adeguato per la maggior parte dei compiti di forecasting aziendale e operativo. Tuttavia, l’uso con dataset estremamente grandi o serie ad alta frequenza è costoso dal punto di vista computazionale a causa del framework di modellazione bayesiano sottostante. Per alleviare il problema, è consigliato prevedere più serie temporali in parallelo. Un altro approccio pratico è aggregare o ridurre la frequenza dei dati. Ciò riduce costi di memoria e tempi di esecuzione senza perdere pattern temporali preziosi.

Limitazioni principali

Prophet assume una singola variabile target e ne modella il trend usando curve di crescita lineari a tratti o logistiche. Tali assunzioni possono limitarne la flessibilità per problemi multivariati o non dominati dal trend. Pertanto, è necessario integrare le previsioni di Prophet con conoscenza del dominio e validazione esterna per garantirne l’affidabilità.

Fallimenti reali e critiche

Fallimenti di previsione di alto profilo, come il crollo del mercato immobiliare di Zillow, evidenziano i rischi di un’eccessiva dipendenza da software di forecasting automatizzati. Riporre troppa fiducia negli output del modello senza alcun controllo umano può portare a errori costosi. Si consiglia quindi di effettuare una validazione approfondita e una pianificazione per scenari quando si interpretano i risultati delle previsioni.

Non esitare a mettere in discussione ogni modello e trend. Promuovi una cultura che incoraggi il pensiero critico e permetta ai team di sfidare lo status quo. Ho visto team del genere costruire costantemente soluzioni di forecasting robuste. 

Infine, consiglio vivamente di adottare un approccio “fidati ma verifica” e di aggiungere un ulteriore strato di conoscenza del tuo dominio per effettuare un controllo di buon senso sui risultati. 

Prospettive di sviluppo futuro

Prophet è in continua evoluzione grazie alla ricerca e ai contributi della community. I miglioramenti in corso includono:

  • Supporto multivariato
  • Scalabilità migliorata per dataset di grandi dimensioni
  • Estensioni guidate dalla community

La ricerca attiva riguarda l’integrazione di nuovi metodi statistici e il miglioramento delle prestazioni su dataset complessi e ad alta frequenza.

Conclusione

Facebook Prophet è uno strumento potente per il forecasting di serie temporali, che offre automazione, interpretabilità e flessibilità. Funziona bene per previsioni esplorative in ambito business e in altri domini con forte stagionalità o eventi speciali.

Ma questo non lo rende una soluzione plug-and-play. Per ottenere previsioni affidabili, è necessario curare con attenzione la validazione, la messa a punto dei parametri e l’apporto della conoscenza del dominio. Bilanciando l’automazione di Prophet con un giudizio umano ponderato, gli analisti possono sviluppare insight azionabili ed evitare le insidie più comuni.

Per un apprendimento pratico, dai un’occhiata ai nostri corsi e ai percorsi di competenze:

Vidhi Chugh

Autore

Vidhi Chugh

Sono una stratega ed eticista dell’AI che lavora all’intersezione tra data science, prodotto e ingegneria per creare sistemi di machine learning scalabili. Inserita tra i "Top 200 Business and Technology Innovators" al mondo, ho la missione di democratizzare il machine learning e di eliminare il gergo tecnico affinché tutti possano partecipare a questa trasformazione.

FAQ

A cosa serve Facebook Prophet?

Facebook Prophet è usato per il forecasting di serie temporali, aiutando a prevedere trend, stagionalità ed effetti degli eventi in dati come vendite, domanda o traffico web.

Come gestisce Prophet festività ed eventi speciali?

Prophet permette di aggiungere eventi predefiniti o personalizzati al modello, tenendo conto di picchi o cali irregolari nella serie temporale.

Perché Prophet è popolare per il forecasting in ambito business?

Prophet è automatizzato, interpretabile e robusto a dati mancanti e outlier, rendendolo ideale per previsioni rapide e affidabili.

Quando è meglio evitare di usare Facebook Prophet?

È meglio evitare Prophet per dati altamente volatili o non stagionali o quando i trend sono troppo imprevedibili.

Quali sono i principali vantaggi di Prophet rispetto ad ARIMA?

A differenza di ARIMA, Prophet non richiede una stretta stazionarietà, gestisce i dati mancanti e rileva automaticamente i punti di cambiamento.

Argomenti

Correlato