Finora negli articoli di datatrading.info relativi all’analisi delle serie temporali abbiamo considerato alcuni modelli lineari di serie temporali tra cui ARMA, ARIMA e il modello GARCH per l’eteroschedasticità condizionata. In questo articolo descriviamo le basi teoriche dei modelli dello spazio degli stati, il cui principale vantaggio è capacità dei loro parametri di adattarsi nel tempo.
I modelli dello spazio degli stati sono molto generali quindi è possibile descrivere i modelli descritti in precedenza in una formulazione dello spazio degli stati. Tuttavia, per mantenere l’analisi lineare, spesso è meglio utilizzare la rappresentazione più semplice.
La premessa generale di un modello dello spazio degli stati è avere un insieme di stati che si evolvono nel tempo (come il rapporto di copertura tra due coppie di azioni cointegrate). Purtroppo non siamo mai in grado di osservare direttamente i “veri” stati perché le nostre osservazioni di questi stati contengono rumore statistico (come il rumore della microstruttura del mercato).
L’obiettivo del modello dello spazio degli stati è dedurre informazioni sugli stati a partire dalle osservazioni, man mano che arrivano nuove informazioni. Un famoso algoritmo per eseguire questa procedura è il Filtro di Kalman, che descriviamo in questo articolo.
Il filtro Kalman è onnipresente nei problemi di controllo ingegneristico, tra cui guida e navigazione, analisi della traiettoria di veicoli spaziali e produzione, ma è anche ampiamente utilizzato nella finanza quantitativa.
In ingegneria, ad esempio, viene utilizzato un filtro di Kalman per stimare i valori dello stato, che sono utilizzati per controllare il sistema in studio. Questo introduce un ciclo di feedback, spesso in tempo reale.
Un’applicazione estremamente interessante del Filtro di Kalman può essere considerata il recente tentativo dell’azienda spaziale privata, Space Exploration Technologies, che è riuscita a recuperare e far atterrare il primo stadio del loro razzo Falcon 9 nel sito di lancio originale. Il booster del primo stadio era soggetto a un problema di controllo dinamico estremamente preciso, che coinvolgeva una massa asimmetrica variabile nel tempo (sloshing di carburante) da velocità ipersoniche fino a velocità subsoniche.
Forse l’uso più comune di un filtro di Kalman nel trading quantitativo è l’aggiornamento i rapporti di copertura tra gli asset nell’arbitraggio statistico a coppie , ma l’algoritmo è molto più generale e permette molti altri casi d’uso.
In generale, ci sono tre tipi di inferenza che ci interessano quando consideriamo i modelli dello spazio degli stati:
- Previsione – Previsione dei valori successivi dello stato
- Filtraggio – Stima dei valori attuali dello stato da osservazioni passate e attuali
- Smoothing – Stima dei valori passati dello stato in base alle osservazioni
Filtraggio e smoothing sono simili, ma non uguali. La differenza consiste che lo smoothing vuole capire cosa è successo agli stati nel passato tramite le attuali conoscenze, mentre il filtering vuole sapere cosa sta succedendo allo stato in questo momento .
In questo articolo descriviamo la teoria del modello dello spazio degli stati e come possiamo utilizzare il filtro di Kalman per eseguire i vari tipi di inferenza sopra descritti. In successivi articoli applichiamo il filtro di Kalman alle strategie di trading, come le coppie cointegrate, nonché alla previsione del prezzo degli asset.
Utilizziamo un approccio bayesiano al problema, poiché si tratta di un framework statistico naturale che permette di aggiornare prontamente le nostre convinzioni alla luce di nuove informazioni, cioè esattamente il comportamento desiderato del filtro di Kalman.
I modelli dello spazio degli stati e i filtri di Kalman hanno un’abbondanza di notazioni matematiche, anche se le idee concettuali dietro di loro sono relativamente semplici. Proviamo a descrivere in modo completo ma semplice tutta questa notazione, perché può creare confusione a chi non ha confidenza con i problemi di controllo ingegneristico o i modelli dello spazio degli stati in generale.
Modello lineare dello spazio degli stati
Questa sezione segue da vicino la notazione utilizzata sia in Cowpertwait et al [1] che in Pole et al [2]. Non credo sia particolarmente utile descrivere una diversa notazione per il filtro di Kalman. In questo modo è possibile metterla in relazione con altri documenti o testi di ricerca. Iniziamo descrivendo tutti gli elementi del modello lineare dello spazio degli stati. Poiché gli stati del sistema dipendono dal tempo, è necessario inserire \(t\) in pedice. Usiamo \(\theta_t\) per rappresentare un vettore degli stati. In un modello lineare dello spazio degli stati, quest’ultimi possono essere considerati come una combinazione lineare dello stato precedente al tempo \(t-1\), cioè come il rumore del sistema (variazione casuale). Per semplificare l’analisi consideriamo questo rumore come una distribuzione normale multivariata, ma ovviamente possono essere usate anche altre distribuzioni. La dipendenza lineare di \(\theta_t\) sullo stato precedente \(\theta_{t-1}\) è data dalla matrice \(G_t\), che può variare nel tempo (da cui il pedice \(t\)). Il rumore multivariato dipendente dal tempo è dato da \(w_t\). La relazione è riassunta di seguito in quella che viene spesso chiamata equazione di stato:\(\begin{eqnarray}\theta_t = G_t \theta_{t-1} + w_t\end{eqnarray}\)
Tuttavia, questa è solo metà della storia. Dobbiamo anche descrivere le osservazioni , cioè quello che effettivamente vediamo, poiché gli stati sono nascosti dal rumore del sistema. Possiamo denotare le osservazioni (dipendenti dal tempo) con \(y_t\). Le osservazioni sono una combinazione lineare dello stato attuale e di alcune variazioni casuali aggiuntive, denominate come rumore di misurazione, anch’esse caratterizzate da una distribuzione normale multivariata. Consideriamo \(F_t\) (dipendente dal tempo) come la matrice di dipendenza lineare di \(\theta_t\) su \(y_t\), e \(v_t\) come il rumore di misura, allora l’equazione di osservazione è data da:\(\begin{eqnarray}y_t = F^{T}_t \theta_t + v_t \end{eqnarray}\)
Dove \(F^{T}\) è la trasposizione di \(F\). Per completamente il modello è necessario specificare il primo stato \(\theta_0\), le matrici varianza-covarianza per il rumore di sistema e il rumore di misura. Questi termini sono distribuiti come:\(\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}\)
Chiaramente ci sono molte definizioni che descrivono il modello. Per completezza, riassumiamo di seguito tutti i termini per aiutare la comprensione del modello:- \(\theta_t\) – Lo stato del modello al tempo \(t\)
- \(y_t\) – L’ osservazione del modello nel tempo \(t\)
- \(G_t\) – La matrice di transizione dello stato tra gli stati attuali e quelli precedenti, rispettivamente nel tempo \(t\) e \(t-1\)
- \(F_t\) – La matrice di osservazione tra l’osservazione corrente e lo stato attuale al tempo \(t\)
- \(w_t\) – Il rumore di sistema tratto da una distribuzione normale multivariata
- \(v_t\) – Il rumore di misura tratto da una distribuzione normale multivariata
- \(m_0\) – Il valore medio della distribuzione normale multivariata dello stato iniziale, \(\theta_0\)
- \(C_0\) – La matrice varianza-covarianza della distribuzione normale multivariata dello stato iniziale, \(\theta_0\)
- \(W_t\) – La matrice varianza-covarianza per la distribuzione normale multivariata da cui si ricava il rumore di sistema
- \(V_t\) – La matrice varianza-covarianza per la distribuzione normale multivariata da cui si ricava il rumore di misura
Il filtro di Kalman
Un approccio bayesiano
Come descritto nell’articolo sulla statistica bayesiana, la regola di Bayes è data da:
\(\begin{eqnarray}P(H | D) = P(D | H) P(H) / P(D)\end{eqnarray}\)
Dove H si riferisce l’ipotesi (o parametri) e D fa riferimento ai dati, prove o osservazioni.
Vogliamo applicare questa regola all’idea di aggiornare la probabilità di vedere uno stato a partire da tutti i dati precedenti a nostra disposizione e dalla nostra attuale osservazione. Ancora una volta, dobbiamo introdurre più definizioni.
Se siamo nel tempo \(t\), possiamo rappresentare tutti i dati conosciuti sul sistema in base alla quantità \(D_t\), mentre le nostre attuali osservazioni sono date da \(y_t\). Quindi possiamo ricavare \(D_t = (D_{t-1}, y_t)\), la nostra attuale conoscenza è una miscela della conoscenza precedente e dell’osservazione più recente.
Applicando la regola di Bayes a questa situazione si ottiene quanto segue:
\(\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}\)
Da quanto sopra si deduce che, data l’attuale osservazione \(y_t\) e i dati precedenti \(D_{t-t}\), la probabilità, a posteriori o aggiornata, di ottenere uno stato \(\theta_t\) è uguale alla probabilità di vedere un’osservazione \(y_t\), dato lo stato attuale \(\theta_t\)
moltiplicato per la convinzione a priori o precedente dello stato attuale, dati solo i dati precedenti \(D_{t-t}\), normalizzato dalla probabilità di vedere indipendentemente l’osservazione \(y_t\).
Sebbene la definizione può essere alquanto prolissa, è un’affermazione molto naturale. Ci dice che possiamo aggiornare il nostro punto di vista sullo stato, \(\theta_t\), in modo razionale a partire dalle nuove informazioni incluse nella presente osservazione, \(y_t\).
Uno degli aspetti estremamente utili dell’inferenza bayesiana è la possibilità di usare il concetto di priori coniugati, se la vista a priori e la verosimiglianza sono entrambe normalmente distribuite, per affermare che la vista a posteriori (cioè la vista aggiornata di \(\theta_t\)) sarà anch’essa distribuita normalmente.
Abbiamo utilizzato lo stesso concetto, anche se con forme differenti, nell’articolo sull’inferenza delle proporzioni binomiali .
Quindi, in che modo questo ci aiuta a produrre un filtro Kalman?
Bene, specifichiamo i termini che usiamo, dalla regola di Bayes sopra. In primo luogo, specifichiamo la forma distributiva del a priori:
\(\begin{eqnarray}\theta_t | D_{t-1} \sim \mathcal{N}(a_t, R_t)\end{eqnarray}\)
Cioè, la vista a priori di \(\theta\) al tempo\(t\), date le osservazioni al tempo \(t-1\), è distribuita come una distribuzione normale multivariata, con media \(a_t\) e varianza-covarianza \(R_t\). Gli ultimi due parametri verranno definiti di seguito.
Consideriamo ora la probabilità:
\(\begin{eqnarray}y_t | \theta_t \sim \mathcal{N}(F^{T}_t \theta_t, V_t)\end{eqnarray}\)
Cioè, la funzione di verosimiglianza dell’osservazione corrente \(y\) al tempo \(t\) è distribuita come una distribuzione normale multivariata, con media \(F^{T}_t \theta_t\) e varianza-covarianza \(V_t\). Abbiamo già definito questi termini nel precedente elenco.
Infine abbiamo il posteriore di \(\theta_t\):
\(\begin{eqnarray}
\theta_t | D_t \sim \mathcal{N}(m_t, C_t)
\end{eqnarray}\)
Cioè, la vista a posteriori dello stato attuale \(\theta\) al tempo \(t\), date le attuali osservazioni al tempo \(t\), è distribuita come una distribuzione normale multivariata con media \(m_t\) e varianza-covarianza \(C_t\).
Il filtro Kalman collega tutti questi termini insieme per \(t=1,\ldots\). Non approfondiamo come sono calcolati effettivamente questi valori, ma li definiamo in modo semplice. Per fortuna possiamo utilizzare le implementazioni delle librerie di Python per eseguire il “heavy lifting”:
\(\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}\)
Chiaramente sono molte definizioni! Come detto sopra, non dobbiamo preoccuparci dell’eccessiva prolissità del filtro di Kalman, poiché possiamo semplicemente utilizzare le librerie di Python per calcolare l’algoritmo.
Allora come si concilia il tutto? In sintesi, \(f_t\) è il valore previsto dell’osservazione al tempo \(t\), previsione che viene effettuata al tempo \(t-1\). Da \(e_t = y_t – f_t\) vediamo che \(e_t\) è l’errore associato alla previsione (la differenza tra \(f\) e \(y\)).
È importante sottolineare che la media a posteriori è una ponderazione della media precedente e dell’errore di previsione, dato che \(m_t = a_t + A_t e_t = G_t m_{t-1} + A_t e_t\) dove \(G_t\) e \(A_t\) sono le matrici di ponderazione.
Abbiamo quindi definito una procedura algoritmica per aggiornare le nostre opinioni sulle osservazioni e sugli stati, possiamo usarla per fare previsioni, oltre che per raffinare i dati.
Predizione
L’approccio bayesiano al filtro di Kalman permette di definire un meccanismo di previsione. Dal momento che abbiamo la nostra stima a posteriori per lo stato \(\theta_t\), possiamo prevedere i valori del giorno successivo considerando il valore medio dell’osservazione.
Prendiamo il valore atteso dell’osservazione domani , data la nostra conoscenza dei 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}\)
Vediamo come questo viene ricavato.
Dato che la funzione di verosimiglianza per l’osservazione odierna \(y_t\), per lo stato odierno \(\theta_t\), è normalmente distribuita con media \(F^{T}_t \theta_t\) e varianza-covarianza \(V_t\) (vedi sopra), allora l’aspettativa dell’osservazione di domani \(y_{t+1}\), a partire dai dati di oggi, \(D_t\), è precisamente l’aspettativa della normale multivariata per la verosimiglianza, vale a dire \(E[F^{T}_{t+1} \theta_t + v_{t+1} | D_t]\). Una volta effettuata questa conversione, il calcolo si riduce semplicemente ad applicare regole dell’operatore di aspettativa alle matrici e ai vettori rimanenti, ricavando infine \(f_{t+1}\).
Tuttavia non è sufficiente calcolare semplicemente la media , dobbiamo anche conoscere la varianza dell’osservazione di domani a partire dai dati di oggi, altrimenti non possiamo veramente definire la distribuzione da cui estrarre la previsione di domani.
\(\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}\)
Ora che abbiamo l’aspettativa e la varianza dell’osservazione di domani, a partire dai dati di oggi, siamo in grado di fornire la previsione generale per k passi avanti, caratterizzando appieno la distribuzione su cui sono tratte queste previsioni:
\(\begin{eqnarray}y_{t+k} | D_t \sim \mathcal{N}(f_{t+k | t}, Q_{t+k | t})\end{eqnarray}\)
Da notare che abbiamo usato alcune notazioni strane – cosa significa avere un pedice di \({t+k | t}\)? In realtà, ci permette di avere una comoda scorciatoia per quanto segue:
\(\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}\)
Come menzionato più volte in questo articolo, non dobbiamo preoccuparci troppo della complessità del filtro di Kalman e della sua definizione, piuttosto dobbiamo pensare alla procedura generale e alle sue basi bayesiane.
A questo punto abbiamo i mezzi per prevedere i nuovi valori di serie temporale. Questa è un’alternativa alle previsioni prodotte combinando ARIMA e GARCH . Negli articoli successivi descriviamo questo approccio per alcuni dati finanziari reali e lo applichiamo a un modello di trading predittivo.
Possiamo anche utilizzare l’aspetto “filtro” per fornirci viste continuamente aggiornate su un rapporto di copertura lineare tra due coppie di asset cointegrate, che può essere inclusa in una strategia di arbitraggio statistico.