Filtro di Kalman e Modelli dello spazio degli stati

Filtro di Kalman e Modelli dello spazio degli stati

In questa lezione esploriamo il Filtro di Kalman e le basi teoriche dei modelli dello spazio degli stati, apprezzati per la capacità dei parametri di adattarsi nel tempo.

I modelli dello spazio degli stati sono molto versatili, quindi possiamo includere i modelli lineari ARIMA e GARCH nella loro formulazione. Tuttavia, per mantenere l’analisi lineare, preferiamo usare rappresentazioni più semplici.

Introduzione

Alla base di un modello dello spazio degli stati c’è un insieme di stati che evolvono nel tempo (come il rapporto di copertura tra due azioni cointegrate). Non possiamo osservare direttamente questi stati perché le osservazioni che otteniamo includono rumore statistico (come quello causato dalla microstruttura del mercato).

Con i modelli dello spazio degli stati cerchiamo di estrarre informazioni dagli stati partendo dalle osservazioni, aggiornandole con l’arrivo di nuovi dati. Usiamo spesso il famoso Filtro di Kalman, che approfondiamo in questa lezione.

Il filtro di Kalman è molto usato nel controllo ingegneristico per applicazioni come guida, navigazione, analisi di traiettorie spaziali e produzione, ma ha anche un ruolo chiave nella finanza quantitativa.

In ingegneria, ad esempio, stimiamo gli stati con il filtro di Kalman per regolare un sistema, attivando un ciclo di feedback, spesso in tempo reale.

Un’applicazione affascinante del Filtro di Kalman è il recupero e l’atterraggio del primo stadio del razzo Falcon 9 da parte di SpaceX. Il controllo richiedeva una precisione estrema per gestire una massa asimmetrica che cambiava nel tempo (sloshing del carburante) dalle velocità ipersoniche a quelle subsoniche.

Nella finanza quantitativa, usiamo spesso il filtro di Kalman per aggiornare i rapporti di copertura tra asset nell’arbitraggio statistico a coppie, ma l’algoritmo è molto più flessibile e applicabile in numerosi contesti.

Applicazioni

In generale, affrontiamo tre tipi di inferenza quando lavoriamo con i modelli dello spazio degli stati:

  • Previsione – stimiamo i valori futuri dello stato
  • Filtraggio – stimiamo i valori attuali dello stato da osservazioni passate e presenti
  • Smoothing – stimiamo i valori passati dello stato in base alle osservazioni future

Filtraggio e smoothing si assomigliano, ma non sono equivalenti. Con lo smoothing cerchiamo di ricostruire il passato sfruttando le conoscenze attuali, mentre con il filtering vogliamo sapere cosa accade nello stato presente.

In questa lezione spieghiamo la teoria dei modelli dello spazio degli stati e il modo in cui applichiamo il filtro di Kalman per ottenere i tre tipi di inferenza. Nelle lezioni successive, usiamo questo filtro nelle strategie di trading, come le coppie cointegrate, e nella previsione del prezzo degli asset.

Adottiamo un approccio bayesiano perché ci offre un quadro statistico naturale per aggiornare continuamente le nostre convinzioni alla luce di nuovi dati, proprio come richiede il funzionamento del filtro di Kalman.

I modelli dello spazio degli stati e il filtro di Kalman implicano una notazione matematica ricca, anche se i concetti alla base restano relativamente semplici. Cerchiamo di spiegare in modo chiaro tutta questa notazione, per aiutare chi non ha familiarità con il controllo ingegneristico o con questi modelli in generale.

Modello lineare dello spazio degli stati

In questa lezione seguiamo da vicino la notazione usata da Cowpertwait et al [1] e Pole et al [2]. Preferiamo non introdurre una notazione alternativa per il filtro di Kalman, così possiamo confrontarla facilmente con altri testi e articoli di ricerca.

Iniziamo presentando tutti gli elementi che compongono il modello lineare dello spazio degli stati. Poiché gli stati del sistema cambiano nel tempo, inseriamo \(t\) come pedice. Usiamo \(\theta_t\) per rappresentare un vettore di stati.

Nel modello lineare dello spazio degli stati, rappresentiamo ciascuno stato come una combinazione lineare dello stato precedente al tempo \(t-1\) e del rumore del sistema (cioè una variazione casuale). Per semplificare l’analisi, assumiamo che questo rumore segua una distribuzione normale multivariata, anche se possiamo considerare altre distribuzioni.

Usiamo la matrice \(G_t\), che può variare nel tempo, per modellare la dipendenza lineare di \(\theta_t\) dallo stato \(\theta_{t-1}\). Rappresentiamo il rumore multivariato tempo-dipendente con \(w_t\). Riassumiamo questa relazione nella equazione di stato:

\(\begin{eqnarray}\theta_t = G_t \theta_{t-1} + w_t\end{eqnarray}\)

Tuttavia, questo rappresenta solo metà del modello. Dobbiamo anche descrivere le osservazioni, cioè ciò che rileviamo realmente, dato che il rumore del sistema nasconde gli stati.

Indichiamo le osservazioni con \(y_t\), che dipendono dal tempo. Le consideriamo come una combinazione lineare dello stato attuale con l’aggiunta di un rumore di misurazione, anch’esso distribuito normalmente in modo multivariato.

Attribuiamo a \(F_t\) la matrice che descrive la dipendenza lineare tra \(\theta_t\) e \(y_t\), mentre chiamiamo \(v_t\) il rumore di misura. L’equazione di osservazione diventa:

\(\begin{eqnarray}y_t = F^{T}_t \theta_t + v_t\end{eqnarray}\)

dove \(F^{T}\) rappresenta la trasposizione della matrice \(F\).

Per completare il modello, definiamo lo stato iniziale \(\theta_0\), insieme alle matrici varianza-covarianza del rumore di sistema e di quello di misura. Descriviamo la distribuzione dei termini come segue:

\(\begin{eqnarray}\theta_0 &\sim& \mathcal{N} (m_0, C_0) \\
v_t &\sim& \mathcal{N} (0, V_t) \\
w_t &\sim& \mathcal{N} (0, W_t)\end{eqnarray}\)

Anche se le definizioni possono sembrare tante, le riassumiamo di seguito per chiarire la struttura del modello:

  • \(\theta_t\) – Lo stato del modello al tempo \(t\)
  • \(y_t\) – L’osservazione del modello al tempo \(t\)
  • \(G_t\) – La matrice di transizione dello stato tra lo stato attuale e quello precedente
  • \(F_t\) – La matrice di osservazione tra l’osservazione e lo stato al tempo \(t\)
  • \(w_t\) – Il rumore di sistema con distribuzione normale multivariata
  • \(v_t\) – Il rumore di misura con distribuzione normale multivariata
  • \(m_0\) – Il valore medio della distribuzione dello stato iniziale \(\theta_0\)
  • \(C_0\) – La matrice varianza-covarianza dello stato iniziale \(\theta_0\)
  • \(W_t\) – La matrice varianza-covarianza del rumore di sistema
  • \(V_t\) – La matrice varianza-covarianza del rumore di misura

Ora che abbiamo definito il modello lineare dello spazio degli stati, passiamo alla sua risoluzione. Qui entra in scena il filtro di Kalman: possiamo sfruttare la regola di Bayes e i priori coniugati per derivare l’algoritmo e stimare lo stato nascosto in modo efficace.

Il filtro di Kalman

Un approccio bayesiano

Come spieghiamo nel corso sulla statistica bayesiana, la regola di Bayes si esprime così:

\(\begin{eqnarray}P(H | D) = P(D | H) P(H) / P(D)\end{eqnarray}\)

Dove H rappresenta l’ipotesi (o i parametri) e D indica i dati, cioè prove o osservazioni.

Applichiamo questa regola per aggiornare la probabilità di osservare uno stato, usando i dati disponibili e l’osservazione attuale. Definiamo ora alcuni concetti fondamentali.

Nel tempo \(t\), indichiamo con \(D_t\) tutti i dati noti sul sistema, mentre \(y_t\) rappresenta l’osservazione corrente. Da ciò deduciamo che \(D_t = (D_{t-1}, y_t)\): la nostra conoscenza attuale unisce l’informazione passata con quella più recente.

Applicando Bayes otteniamo:

\(\begin{eqnarray}P(\theta_t | D_{t-1}, y_t) = \frac{P(y_t | \theta_t) P(\theta_t | D_{t-1})}{P(y_t)}\end{eqnarray}\)

Questo significa che, conoscendo \(y_t\) e i dati precedenti \(D_{t-1}\), calcoliamo la probabilità aggiornata di uno stato \(\theta_t\) moltiplicando la probabilità di osservare \(y_t\) dato lo stato \(\theta_t\), per la nostra convinzione precedente, normalizzata per la probabilità marginale di \(y_t\).

Anche se la definizione può apparire complessa, esprime un concetto intuitivo. Ci permette di aggiornare in modo razionale la nostra opinione sullo stato \(\theta_t\) sulla base della nuova osservazione \(y_t\).

Uno degli aspetti più potenti dell’inferenza bayesiana è l’uso dei priori coniugati. Quando la distribuzione a priori e la verosimiglianza sono entrambe gaussiane, anche la distribuzione a posteriori di \(\theta_t\) segue una normale.

Applichiamo lo stesso concetto, seppur con forme diverse, anche nella lezione sull’inferenza delle proporzioni binomiali.

Definizione

Come ci aiuta questo nel costruire un filtro di Kalman?

Definiamo i termini della regola di Bayes. Partiamo dalla distribuzione a priori:

\(\begin{eqnarray}\theta_t | D_{t-1} \sim \mathcal{N}(a_t, R_t)\end{eqnarray}\)

Ovvero, consideriamo \(\theta\) al tempo \(t\) distribuito normalmente con media \(a_t\) e varianza-covarianza \(R_t\), sulla base dei dati al tempo \(t-1\). Definiamo i parametri più avanti.

Ora specifichiamo la verosimiglianza:

\(\begin{eqnarray}y_t | \theta_t \sim \mathcal{N}(F^{T}_t \theta_t, V_t)\end{eqnarray}\)

Qui, l’osservazione \(y_t\) segue una distribuzione normale con media \(F^{T}_t \theta_t\) e varianza-covarianza \(V_t\), come definito in precedenza.

Infine definiamo la distribuzione a posteriori:

\(\begin{eqnarray}
\theta_t | D_t \sim \mathcal{N}(m_t, C_t)
\end{eqnarray}\)

Otteniamo quindi una distribuzione normale di \(\theta_t\) con media \(m_t\) e varianza-covarianza \(C_t\), date le osservazioni al tempo \(t\).

Il filtro di Kalman collega tutti questi passaggi per ogni \(t=1,\ldots\). Non entriamo nei dettagli del calcolo, ma presentiamo le formule principali. Usiamo librerie Python per semplificare i calcoli complessi:

\(\begin{eqnarray}a_t &=& G_t m_{t-1} \\
R_t &=& G_t C_{t-1} G^{T}_t + W_t \\
e_t &=& y_t – f_t \\
m_t &=& a_t + A_t e_t \\
f_t &=& F^{T}_t a_t \\
Q_t &=& F^{T}_t R_t F_t + V_t \\
A_t &=& R_t F_t Q^{-1}_t \\
C_t &=& R_t – A_t Q_t A^{T}_t\end{eqnarray}\)

Come possiamo vedere, le definizioni sono numerose! Ma, fortunatamente, non dobbiamo eseguirle a mano: ci basta ricorrere a librerie Python per implementare il filtro di Kalman.

Come si integra tutto questo? In sintesi, \(f_t\) rappresenta la previsione di \(y_t\) effettuata al tempo \(t-1\). La differenza \(e_t = y_t – f_t\) misura l’errore tra previsione e osservazione reale.

La media a posteriori combina la previsione precedente con l’errore, ovvero \(m_t = a_t + A_t e_t = G_t m_{t-1} + A_t e_t\). Le matrici \(G_t\) e \(A_t\) pesano rispettivamente la stima precedente e l’errore.

Abbiamo così definito un algoritmo che aggiorna le nostre stime sugli stati e sulle osservazioni. Possiamo usarlo per migliorare le previsioni e per analizzare i dati in modo più efficace.

Predizione

Nel filtro di Kalman adottiamo un approccio bayesiano per costruire un meccanismo di previsione. Ora che stimiamo a posteriori lo stato \(\theta_t\), possiamo prevedere i valori del giorno successivo considerando la media dell’osservazione.

Calcoliamo il valore atteso dell’osservazione di domani, partendo dai dati di oggi:

\(\begin{eqnarray}E[y_{t+1} | D_t] &=& E[F^{T}_{t+1} \theta_t + v_{t+1} | D_t] \\
&=& F^{T}_{t+1} E[\theta_{t+1} | D_t] \\
&=& F^{T}_{t+1} a_{t+1} \\
&=& f_{t+1}\end{eqnarray}\)

Ora spieghiamo come otteniamo questa espressione. La funzione di verosimiglianza per l’osservazione \(y_t\), data dallo stato \(\theta_t\), segue una distribuzione normale con media \(F^{T}_t \theta_t\) e varianza-covarianza \(V_t\) (come visto prima). Quindi l’aspettativa dell’osservazione \(y_{t+1}\), data la nostra informazione \(D_t\), coincide con l’aspettativa della normale multivariata. Applichiamo le regole dell’operatore di aspettativa su matrici e vettori e otteniamo infine \(f_{t+1}\).

Ma non basta conoscere solo la media: dobbiamo anche stimare la varianza dell’osservazione di domani usando i dati di oggi. Solo così possiamo definire correttamente la distribuzione per le nostre previsioni.

\(\begin{eqnarray}\operatorname{Var}[y_{t+1}| D_t] &=& \operatorname{Var} [F^{T}_{t+1} \theta_t + v_{t+1} | D_t] \\
&=& F^{T}_{t+1} \operatorname{Var}[\theta_{t+1} | D_t] F_{t+1} + V_{t+1} \\
&=& F^{T}_{t+1} R_{t+1} F_{t+1} + V_{t+1} \\
&=& Q_{t+1}\end{eqnarray}\)

Con media e varianza dell’osservazione di domani, ricavate dai dati di oggi, possiamo ora definire la previsione per k passi nel futuro, descrivendo completamente la distribuzione da cui estraiamo i valori previsti:

\(\begin{eqnarray}y_{t+k} | D_t \sim \mathcal{N}(f_{t+k | t}, Q_{t+k | t})\end{eqnarray}\)

Facciamo attenzione alla notazione \({t+k | t}\): rappresenta una comoda sintesi che ci consente di scrivere in modo compatto le seguenti espressioni:

\(\begin{eqnarray}f_{t+k | t} &=& F^{T}_{t+k} G^{k-1} a_{t+1} \\
Q_{t+k | t} &=& F^{T}_{t+k} R_{t+k} F_{t+k} + V_{t+k} \\
R_{t+k | t} &=& G^{k-1} R_{t+1} (G^{k-1})^{T} + \sum^{k}_{j=2} G^{k-j} W_{t+j} (G^{k-j})^{T}\end{eqnarray}\)

Conclusione

Come ribadiamo spesso in questa lezione, non ci soffermiamo troppo sulla complessità tecnica del filtro di Kalman, ma seguiamo il suo funzionamento generale e le sue solide basi bayesiane.

Siamo ora in grado di prevedere i valori futuri di una serie temporale. Questo metodo rappresenta una valida alternativa ai modelli ARIMA o GARCH. Nelle prossime lezioni applichiamo questo approccio a dati finanziari reali e lo integriamo in un modello di trading predittivo.

Inoltre, sfruttiamo il lato “filtro” per ottenere stime aggiornate di un rapporto di copertura lineare tra due asset cointegrati, utile all’interno di una strategia di arbitraggio statistico.

Torna in alto