Negli ultimi mesi abbiamo descritto su DataTrading molti aspetti del trading quantitativo quali i modelli di machine learning, l’analisi delle serie temporali e l’implementazione di un’ambiente di backtesting. A questo punto è utile introdurre le moderne tecniche matematiche che sono alla base non solo della finanza quantitativa e del trading algoritmico, ma anche dei campi emergenti della scienza dei dati e dell’apprendimento statistico delle macchine.

Le competenze quantitative sono ora molto richieste non solo nel settore finanziario, ma anche nelle startup tecnologiche, e per l’analisi dati delle grandi aziende.

Prima di iniziare a discutere le moderne tecniche di “bleeding edge”, è necessario avere una solida comprensione delle sottostanti teorie matematiche e statistiche, che sono alla base di questi modelli. Una tecnica fondamentale è quella delle statistiche bayesiane. Fino ad oggi in questo sito non è stato pubblicato nessun articolo relativo ai metodi bayesiani. Questo articolo è stato scritto per aiutare a capire la “filosofia” dell’approccio bayesiano, come si confronta con l’approccio tradizionale / classico alle statistiche e le potenziali applicazioni nella finanza quantitativa e scienza dei dati.

In particole in questo articolo si:

  • Definisce le statistiche bayesiane (o inferenza bayesiana)
  • Confronta le statistiche classiche con le statistiche bayesiane
  • Descrive la famosa regola di Bayes, uno strumento essenziale per l’inferenza bayesiana
  • Interpreta e applica la regola di Bayes per eseguire l’inferenza bayesiana
  • Descrive un concreto esempio di coin-flip probabilistico di inferenza bayesiana

Che cos'è la Statistica Bayesiana?

Le statistiche bayesiane rappresentano un particolare approccio all’applicazione della probabilità ai problemi statistici. Fornisce gli strumenti matematici per avere evidenza su stati o eventi casuali in termini di gradi di credibilità o più specificamente di probabilità bayesiana

In particolare l’inferenza bayesiana interpreta la probabilità come una misura della credibilità o della fiducia che un individuo può avere sul reale verificarsi di un particolare evento.

Si può avere una precedente convinzione su un evento, ma è probabile che le convinzioni cambino quando nuove prove vengono portate alla luce. Le statistiche bayesiane forniscono un solido mezzo matematico per incorporare le precedenti credenze e prove per produrre nuove credenze a posteriori.

Le statistiche bayesiane ci forniscono strumenti matematici per aggiornare razionalmente le nostre convinzioni soggettive alla luce di nuovi dati o prove.

Questo è in contrasto con un’altra forma di inferenza statistica, nota come statistica classica o frequentista, che presuppone che le probabilità siano la frequenza di particolari eventi casuali che si verificano in una lunga serie di prove ripetute.

Per esempio, mentre si lancia ripetutamente un dado equo a sei facce (cioè non pesato), si ha che che ogni numero sul dado tende ad uscire per circa un 1/6 volte.

La statistica frequentista presuppone che le probabilità siano la frequenza di lungo periodo di eventi casuali in prove ripetute.

Quando si effettuano inferenze statistiche, cioè inferendo informazioni statistiche da sistemi probabilistici, i due approcci – frequentista e bayesiano – hanno filosofie molto diverse.

La statistica frequentista cerca di eliminare l’incertezza fornendo stime. La statistica bayesiana cerca di preservare e perfezionare l’incertezza adeguando le credenze individuali alla luce di nuove prove.

Frequentista (o Empirica) vs Bayesiana

Per chiarire la distinzione tra le due diverse filosofie statistiche, si considerano due esempi di sistemi probabilistici:

  • Coin flip – Qual è la probabilità che esca testa per una moneta truccata?
  • Elezione di un particolare candidato per il Primo Ministro – Qual è la probabilità di vedere vincere un singolo candidato, che non è mai stato candidato in precedenza?

 

La seguente tabella descrive le filosofie alternative dell’approccio frequentista e bayesiano:

EsempioApproccio FrequentistaApproccio Bayesiano
Lancio di una moneta truccataLa probabilità di vedere il risultato “testa” nei lanci di una moneta truccata corrisponde alla frequenza dei risultati “testa” dopo un elevato numero di lanci indipendenti della moneta. Cioè, mentre si esegue più lanci di monete il numero di teste ottenute, come proporzione dei lanci totali, tende alla probabilità “vera” o “fisica” che il lancio della della moneta produca una testa. In particolare, l’individuo che esegue l’esperimento non incorpora le proprie convinzioni sulla correttezza delle altre monete.Prima di ogni lancio della moneta, un individuo può considerare che la moneta non sia truccata. Dopo pochi lanci la moneta esce continuamente teste. Quindi la precedente convinzione sulla correttezza della moneta viene modificata per tenere conto del fatto che sono uscite tre teste di fila e quindi la moneta potrebbe essere truccata. Dopo 500 lanci, con 400 teste, l’individuo crede che la moneta sia molto probabile truccata. La credenza a posteriori è fortemente modificata rispetto alle ipotesi di partenza.
Elezioni del canditatoIl candidato si candida per la prima volta per questa particolare elezione e quindi non si possono eseguire “prove ripetute”. In un contesto frequentista si costruisco prove “virtuali” del processo elettorale. La probabilità di vittoria del candidato è definita come la frequenza relativa di vittorie del candidato nelle prove “virtuali”, come frazione di tutte le prove.Un individuo ha una precedente convinzione sulle possibilità di un candidato di vincere un’elezione e la sua fiducia può essere quantificata come probabilità. Tuttavia, un altro individuo potrebbe anche avere una credenza anteriore diversa e quindi una diversa sulla probabilità dello stesso candidato. Quando arrivano nuovi dati, entrambe le convinzioni sono (razionalmente) aggiornate dalla procedura bayesiana.
Quindi nell’interpretazione bayesiana la probabilità è la sintesi dell’opinione di un individuo. Un punto chiave è che diversi individui (intelligenti) possono avere opinioni diverse (e quindi diverse credenze), poiché hanno un diverso accesso ai dati e diverso modi di interpretarli. Tuttavia, poiché entrambi questi individui incontrano nuovi dati a cui entrambi hanno accesso, le loro credenze precedenti (potenzialmente diverse) porteranno a credenze a posteriori che cominceranno a convergere l’una verso l’altra, sotto la procedura di aggiornamento razionale dell’inferenza bayesiana. Nel contesto bayesiano un individuo applica una probabilità pari a 0 quando non ha fiducia nel verificarsi di un evento, mentre applica una probabilità pari a 1 quando è assolutamente certo del verificarsi di un evento. Se assegnano una probabilità tra 0 e 1, si consente una ponderata confidenza con altri potenziali risultati. Per eseguire l’inferenza bayesiana, si deve utilizzare un famoso teorema di probabilità noto come regola di Bayes e interpretarlo nel modo corretto. Nel riquadro seguente, si deriva la regola di Bayes usando la definizione di probabilità condizionale. Tuttavia, non è essenziale seguire questo procedimento per usare i metodi bayesiani, quindi sentitevi liberi di saltare la prossima sezione se si vuol andare direttamente alla descrizione su come usare la regola di Bayes.

La Regola di Bayes

Si consideri la definizione di probabilità condizionale, che fornisce una regola per determinare la probabilità di un evento A, data l’esistenza di un altro evento B. Un esempio potrebbe essere “Qual è la probabilità che piova quando ci sono nuvole nel cielo ” La definizione matematica della probabilità condizionale è la seguente:

\( \begin{eqnarray} P(A|B) = \frac{P(A \cap B)}{P(B)} \end{eqnarray} \)

Questo formula afferma che la probabilità che si verifichi A, sapendo che si è verificato B, cioè esprime una “correzione” delle aspettative per A dettata dall’osservazione di B, corrisponde alla la probabilità congiunta dei due eventi, ovvero la probabilità che si verifichino entrambi, in rapporto alla probabilità di B. Nell’esempio precedente significa la probabilità che piova dato che ci sono le nuvole è uguale alla probabilità che la pioggia e la presenza di nuvole si verificano insieme, in relazione alla probabilità di avere nuvole in cielo. Se si moltiplica entrambi i fattori di questa equazione per P(B) si ottiene:

\( \begin{eqnarray} P(B) P(A|B) = P(A \cap B) \end{eqnarray} \)

Ma, si può semplicemente fare lo stesso ragionamento per P(B|A), che è simile a chiedere “Qual è la probabilità di vedere le nuvole, dato che sta piovendo?”:

\( \begin{eqnarray} P(B|A) = \frac{P(B \cap A)}{P(A)} \end{eqnarray} \)

Dato che P(A∩B)=P(B∩A), sostituendo il precedente e moltiplicando per P(A), si ottiene:

\( \begin{eqnarray} P(A) P(B|A) = P(A \cap B) \end{eqnarray} \)

Ora si può confrontare tra loro le due espressioni per P(A∩B):

\( \begin{eqnarray} P(B) P(A|B) = P(A) P(B|A) \end{eqnarray} \)

Se ora si divide entrambi i lati per P(B) si ottiene la famosa regola di Bayes:

\( \begin{eqnarray} P(A|B) = \frac{P(B|A) P(A)}{P(B)} \end{eqnarray} \)

Tuttavia, per il successivo utilizzo della regola di Bayes è utile scrivere il denominare, P(B) in termini di P(B|A). Si può considerare P(B) come:

\( \begin{eqnarray} P(B) = \sum_{a \in A} P(B \cap A) \end{eqnarray} \)

Questo è possibile perché gli eventi A sono una partizione sufficiente ampio dello spazio campione. In questo modo sostituendo la definizione della probabilità condizionata si ottiene:

\( \begin{eqnarray} P(B) = \sum_{a \in A} P(B \cap A) = \sum_{a \in A} P(B|A) P(A) \end{eqnarray} \)

Infine, si può sostituire P(B) nella regola di Bayes e si ottiene una versione alternativa della stessa regola di Bayes, che è ampiamente usata nell’inferenza bayesiana:

\( \begin{eqnarray} P(A|B) = \frac{P(B|A) P(A)}{\sum_{a \in A} P(B|A) P(A)} \end{eqnarray} \)

Ora che si è definita la regola di Bayes, si è in grado di applicarla all’inferenza statistica.

Applicazione della Regola di Bayes per l'Inferenza Bayesiana

Come affermato all’inizio di questo articolo, l’idea di base dell’inferenza bayesiana consiste nell’aggiornare continuamente le convinzioni precedenti sugli eventi quando vengono presentate nuove prove. Questo è un modo molto naturale per studiare gli eventi probabilistici. Man mano che si accumulano sempre più prove, le precedenti convinzioni sono costantemente “sbiadite” da qualsiasi nuovo dato. Si consideri l’evento (piuttosto privo di senso) che la Luna sta andando a scontrarsi con la Terra. Per ogni notte che passa, l’applicazione dell’inferenza bayesiana tenderà a correggere la nostra precedente credenza in una credenza a posteriori secondo cui la Luna ha sempre meno probabilità di entrare in collisione con la Terra, poiché rimane in orbita. Per dimostrare un concreto esempio numerico di inferenza bayesiana è necessario introdurre qualche nuova notazione. In primo luogo, si deve considerare il concetto di parametri e modelli. Un parametro potrebbe essere l’osservazione della una moneta truccata, che si può etichettare come \(\theta\). Quindi \(\theta = P(H)\) descriverebbe la distribuzione di probabilità delle convinzioni che uscirà testa dopo il lancio della moneta. Il modello è il mezzo effettivo per codificare matematicamente questo lancio. In questo caso, il lancio della moneta può essere modellato come una prova di Bernoulli.

La Prova di Bernoulli

La prova di Bernoulli è un esperimento casuale con solo due risultati, di solito etichettati come “successo” o “fallimento”, in cui la probabilità del successo è esattamente la stessa ogni volta che viene eseguita la sperimentazione. La probabilità del successo è data da \(\theta\), che è un numero compreso tra 0 e 1. Quindi \(\theta \in [0,1]\).

Nel corso dell’esperimento di alcuni esperimenti di lancio di una moneta (ripetute prove di Bernoulli) si generano alcuni dati, \(D\), relativamente ai risultati testa o croce.

Una naturale domanda da porsi è “Qual è la probabilità di vedere 3 teste in 8 lanci (8 prove di Bernoulli), data una moneta equa (\(\theta = 0,5\))?”.

Un modello ci aiuta ad accertare la probabilità di vedere questi dati, \(D\), dato un valore del parametro \(\theta\). La probabilità di vedere i dati \(D\) sotto un particolare valore di \(\theta\) è data dalla seguente notazione: \(P(D|\theta)\).

Tuttavia, si può essere interessati anche alla domanda alternativa: “Qual è la probabilità che la moneta sia non truccata, dato che si è verifica una particolare sequenza di teste e croci?”.

Quindi si è interessati alla distribuzione di probabilità che riflette la convinzione su diversi valori possibili di \(\theta\), dato che abbiamo osservato alcuni dati \(D\). Questo è denotato da \(P(\theta|D)\). Si noti che questo è l’opposto di \(P(D|\theta)\). Quindi, come è possibile ottenere un valore reale tra queste due probabilità? Si scopre che la regola di Bayes è il collegamento che consente di passare tra queste due situazioni.

La Regola di Bayes applicata all'Inferenza Bayesiana

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

dove:

  • P(θ) è la probabilità a priori, o probabilità marginale, di θ. Questa è la forza nella nostra convinzione su θ senza considerare le prove D. La nostra precedente opinione sulla probabilità che la moneta sia equa e non truccata.
  • P(θ|D) è la probabilità a posteriori, o probabilità condizionata. Questa è la forza (raffinata) della nostra convinzione di θ una volta che l’evidenza di D è stata presa in considerazione. Dopo aver visto uscire 4 teste su 8 lanci della moneta, si può dire che questa è la nostra visione aggiornata sulla correttezza della moneta.
  • P(D|θ) è la probabilità condizionata di D. Questa è la probabilità di vedere i dati D come generati da un modello con parametro θ. Se si potesse sapere che la moneta era equa e non truccata, la probabilità condizionata di D esprime la probabilità di avere un determinato numero di risultati “testa” per un particolare numero di lanci.
  • P(D) è la prova, cioè la probabilità a priori di D, e funge da costante di normalizzazione. Questa è la probabilità dei dati D, determinata come somma (o integrazione) di tutti i possibili valori di θ, ponderati con un indice del grado di confidenza con cui si crede alla validità di quei particolari valori di θ.

L’obiettivo dell’inferenza bayesiana è fornire una procedura razionale e matematicamente valida per incorporare le nostre credenze precedenti, con qualsiasi prova a portata di mano, al fine di produrre una nuova credenza a posteriori. Ciò che rende questa tecnica così importante è la possibilità che le credenze a posteriori siano usate come credenze precedenti nella generazione di nuovi dati. Quindi l’inferenza bayesiana ci consente di adeguare continuamente le nostre convinzioni con nuovi dati, applicando ripetutamente la regola di Bayes.

In questo articolo è stata introdotta molta teoria da comprendere, quindi è bene vedere un esempio concreto utilizzando l’antico strumento degli statistici: il lancio di una moneta.

Esempio del Lancio di una Moneta

In questo esempio si considera molti lanci di una moneta equa, cioè non truccata. Si utilizza l’inferenza bayesiana per aggiornare le convinzioni sulla correttezza della moneta quando sono disponibili più dati (cioè più lanci di monete). La moneta sarà effettivamente equa, ma non lo si saprà fino a quando non verranno effettuate le prove. All’inizio non si ha una precedente convinzione sulla correttezza della moneta, cioè, si può dire che ogni livello di equità è altrettanto probabile.

Nel linguaggio statistico si eseguono N ripetuti test di Bernoulli con θ = 0.5. Si usa una distribuzione uniforme come mezzo per caratterizzare la precedente convinzione relativa ai dubbi sull’equità. Questo afferma che si considera ogni livello di equità (o ogni valore di θ) ugualmente probabile.

Si usa poi una procedura di aggiornamento bayesiano per passare dalle credenze precedenti alle credenze posteriori osservando nuovi lanci di monete. Questo viene eseiguito utilizzando una particolare procedura matematica che si basa sulla Conjugate Prior, cioè la distribuzione a priori coniugata, che fornisce gli strumenti per spiegare come l’esempio del lancio della moneta viene eseguito nella pratica.

La distribuzione uniforme è in realtà un caso più specifico di un’altra distribuzione di probabilità, nota come distribuzione Beta. Dato che, con il modello binomiale, se si usa una distribuzione Beta per le convinzioni precedenti si ottiene una distribuzione Beta anche per le convinzioni a posteriori. Questo è un risultato matematico estremamente utile, in quanto le distribuzioni Beta sono abbastanza flessibili nelle convinzioni di modellazione. Tuttavia, non voglio soffermarmi troppo su questi dettagli, dato che ne discuteremo nel prossimo articolo. In questa fase, queste distribuzioni consentono di creare facilmente alcune rappresentazioni grafiche che enfatizzano la procedura bayesiana!

Nella seguente figura si possono vedere 6 casi particolari in cui sono stati effettuato un certo numero di prove di Bernoulli (lancio di moneta). Nella prima sotto-trama non sono state effettuato prove e quindi la funzione di densità di probabilità (in questo caso la densità precedente) è la distribuzione uniforme. Dichiara che si ha la stessa credenza in tutti i valori di θ che rappresentano l’equità della moneta.

Il pannello successivo mostra 2 prove effettuate ed per entrambe è uscito testa. La procedura bayesiana che utilizza le distribuzioni Beta consente ora di aggiornare a posteriori la densità. Da notare come in questo il peso della densità è ora spostato sul lato destro del grafico. Questo indica che la precedente credenza di eguale probabilità di equità della moneta, accoppiata con 2 nuovi punti di dati, porta a credere che la moneta abbia più probabilità di essere truccata (distorta verso le teste).

I successivi due grafici mostrano rispettivamente 10 e 20 prove. Da notare che nonostante aver ottenuto 2 croci in in 10 prove, si crede ancora che la moneta sia ingiusta e distorta nei confronti delle teste. Dopo 20 prove, si è ottenuto qualche croce in più. La densità della probabilità è ora spostata più vicino a θ = P(H) = 0,5. Quindi si sta iniziando a credere che probabilmente moneta sia equa.

Dopo 50 e 500 prove, ora stiamo iniziando a credere che l’equità della moneta sia molto probabilmente intorno a θ = 0,5. Ciò è indicato dalla larghezza restringente della densità di probabilità, che ora è raggruppata strettamente attorno a θ = 0.46 nel pannello finale. Se dovessimo effettuare altre 500 prove (dal momento che la moneta è effettivamente giusta) vedremmo questa densità di probabilità diventare ancora più stretta e centrata più vicino a θ = 0,5.

Fig - Procedura di aggiornamento bayesiano utilizzando il modello beta-binomiale
Quindi si può vedere che l’inferenza bayesiana fornisce una procedura razionale per passare da una situazione incerta con informazioni limitate a una situazione più certa con una quantità significativa di dati. Nel prossimo articolo si descrive la nozione della distribuzione a priori coniugata in modo più approfondito, il che semplifica fortemente la matematica per eseguire l’inferenza bayesiana in questo esempio. Per completezza, si fornisce il codice Python (fortemente commentato) per la produzione di questa trama. Fa uso del modello statistico di SciPy, in particolare, la distribuzione Beta:
                    
if __name__ == "__main__":
    # Create a list of the number of coin tosses ("Bernoulli trials")
    number_of_trials = [0, 2, 10, 20, 50, 500]

    # Conduct 500 coin tosses and output into a list of 0s and 1s
    # where 0 represents a tail and 1 represents a head
    data = stats.bernoulli.rvs(0.5, size=number_of_trials[-1])
    
    # Discretise the x-axis into 100 separate plotting points
    x = np.linspace(0, 1, 100)
    
    # Loops over the number_of_trials list to continually add
    # more coin toss data. For each new set of data, we update
    # our (current) prior belief to be a new posterior. This is
    # carried out using what is known as the Beta-Binomial model.
    # For the time being, we won't worry about this too much. It 
    # will be the subject of a later article!
    for i, N in enumerate(number_of_trials):
        # Accumulate the total number of heads for this 
        # particular Bayesian update
        heads = data[:N].sum()

        # Create an axes subplot for each update 
        ax = plt.subplot(len(number_of_trials) / 2, 2, i + 1)
        ax.set_title("%s trials, %s heads" % (N, heads))

        # Add labels to both axes and hide labels on y-axis
        plt.xlabel("$P(H)$, Probability of Heads")
        plt.ylabel("Density")
        if i == 0:
            plt.ylim([0.0, 2.0])
        plt.setp(ax.get_yticklabels(), visible=False)
                
        # Create and plot a  Beta distribution to represent the 
        # posterior belief in fairness of the coin.
        y = stats.beta.pdf(x, 1 + heads, 1 + N - heads)
        plt.plot(x, y, label="observe %d tosses,\n %d heads" % (N, heads))
        plt.fill_between(x, 0, y, color="#aaaadd", alpha=0.5)

    # Expand plot to cover full width/height and show it
    plt.tight_layout()
    plt.show()                    
                

Recommended Posts