Analisi della complessità delle serie temporali utilizzando l’entropia

Analisi complessità serie temporal entropia

Qui c’è un metodo per capire quanto complesse sono le tue serie temporali, in poche linee di codice

Immagine dell'autore, generata utilizzando Midjourney

Ogni data scientist lo sa: il primo passo per la soluzione di un problema di Machine Learning è l’esplorazione dei dati.

E non si tratta solo di capire quali caratteristiche possono aiutarti a risolvere il problema. Questo è qualcosa che richiede conoscenza del dominio, molto sforzo, molte domande e tentativi per scoprire. È un passaggio necessario, ma secondo me è il passaggio numero due.

Il primo passo è in qualche modo basato sull’analisi di quanto complessi siano i tuoi dati. Ti chiedono di trovare dettagli e modelli in qualcosa che è sempre più o meno lo stesso, o gli output sono completamente diversi l’uno dall’altro? Vogliono che tu trovi la distanza tra 0.0001 e 0.0002 o vogliono che tu trovi la distanza tra 0 e 10?

Lascia che mi spieghi meglio.

Ad esempio, sono un esperto di elaborazione del segnale. Ho studiato la Trasformata di Fourier, la Trasformata di Chirplet, la Trasformata Wavelet, la Trasformata di Hilbert, la previsione delle serie temporali, il clustering delle serie temporali, il 1D CNN, il RNN e molti altri nomi spaventosi.

Un problema molto comune nel dominio delle serie temporali è passare da un input (che potrebbe essere un’altra serie temporale) a un output di serie temporali. Ad esempio:

  • Hai una proprietà di un setup sperimentale e vuoi simulare il tuo esperimento usando il Machine Learning: questo è effettivamente il mio PhD Thesis ed è chiamato surrogate modelling
  • Hai i valori del mercato azionario fino al giorno 300 e vuoi prevedere il giorno 301: questo è molto conosciuto ed è chiamato time series forecasting
  • Hai un segnale molto sporco o rumoroso e vuoi pulirlo: questo è chiamato encoder-decoder signal denoising, ed è anche molto conosciuto.

E in questi problemi, la prima cosa a cui guardo, sorprendentemente, è la serie temporale di output (non l’input).

Supponiamo che prenda una serie temporale casuale nel mio dataset. È la serie temporale una combinazione delicata e liscia di seni e coseni? È una funzione polinomiale? È una funzione logaritmica? È una funzione che nemmeno riesco a nominare?

E se prendo un’altra serie temporale casuale, come cambia? La sfida si basa su piccoli cambiamenti rispetto a una base ovvia o la sfida consiste nell’identificare comportamenti completamente diversi in tutto il dataset?

In una sola parola, stiamo cercando di capire quanto sia complesso il nostro compito: stiamo stimando la complessità delle nostre serie temporali. Ora, la parola “complesso” può significare qualcosa di diverso per ognuno di noi.

Quando mia moglie mi mostra le sue lezioni di anatomia le trovo estremamente complesse, ma per lei è solo un altro martedì 🙂

La buona notizia è che c’è un modo per descrivere la complessità in modo più scientifico e univoco: il concetto di Entropia

1. L’Entropia di una serie temporale 1/0 (Teoria)

Definiamo l’entropia a partire da un esempio molto semplice: una serie temporale che può avere solo valori 1 e 0. So che non è esattamente il tipo di serie temporali che siamo abituati a trattare, ma puoi immaginarla come se ogni minuto che entri nella tua stanza lanciassi una moneta: se esce testa hai misurato 1, se esce croce hai misurato 0 (o viceversa, non ho una preferenza specifica che 1 sia testa, ad essere onesti…)

Immagine realizzata dall'autore

Ora, se ci pensi, qualcosa è più “complesso” quando non ti suona familiare nel nostro cervello quando non lo capisci appieno, o quando non ti fornisce una grande quantità di informazioni.

Smetto di prenderti in giro e ti darò l’equazione di questa maledetta entropia:

Equazione 1

Scomponiamola:

  • X è il dominio della nostra serie temporale, nel nostro caso X = {0,1}
  • p(x) è la probabilità di verificare il valore x che è in X

Perché c’è un logaritmo lì? Cosa significa? Perché c’è quel segno meno?

Impariamo con un esempio.

Immagina che la probabilità che X sia 0 (coda) sia 0 e la probabilità che X sia 1 (testa) sia 1. Questo non è nemmeno davvero una serie temporale, poiché è sempre 1. Qual è il valore dell’entropia?

Ora, p(x=0)=0, quindi il primo contributo è 0. p(x=1)=1, ma il logaritmo di 1 è 0. Questo significa che anche il secondo contributo è 0, e l’entropia è, infatti, 0.

Cosa significa che l’entropia è 0? Che la serie temporale non è affatto complessa, ed ha senso perché assomiglia a questa:

Immagine di autore

In questa serie temporale non c’è “complessità” vero? Ecco perché la sua entropia è 0.

Facciamo lo stesso esempio se sappiamo che p(x=0)=p(x=1)=0.5, che significa la stessa identica probabilità di avere 1 e 0 (testa o coda)

Immagine di autore

Questo è sicuramente più complesso, vero? L’entropia diventa ora:

Questo valore è più alto di 0. Questo valore non ha un significato di per sé, ma è il valore più alto che puoi ottenere. Ciò significa che se modifichi p(x=0) in modo diverso da 0.5, l’entropia sarà più bassa*.

Immagine di autore

* Nota che quando modifichi p(x=0) modifichi anche p(x=1) poiché p(x=1)=1-p(x=0)

Ora riflettiamo sui nostri risultati.

  • Quando la probabilità è 0, questo significa che non c’è complessità, poiché già sappiamo tutto: hai un solo valore e solo un valore.
  • Quando la probabilità è, diciamo, 0.0001, questo significa che la complessità è molto bassa perché può succedere che x=0, ma la maggior parte delle volte x sarebbe uguale a 1
  • Quando la probabilità è 0.5, ora la complessità è massima perché non hai assolutamente idea di cosa accadrà dopo: può essere 1 o 0 con la stessa probabilità

Questa è l’idea di ciò che è “complesso” per noi. In un modo semplice 1/0, è possibile trovare in modo retrospettivo la probabilità in base alle occorrenze e recuperare l’entropia.

2. L’entropia di una serie temporale 1/0 (pratica)

Nel nostro codice, utilizzeremo Python, e utilizzeremo anche librerie molto semplici:

Scriviamo il codice per trovare la stessa soluzione ma utilizzando la probabilità “retrospettivamente”, o se preferisci, utilizzando la loro definizione di frequenza:

Dove:

  • x è un valore nel dominio: nel nostro caso, abbiamo solo 0 e 1, quindi x è o 0 o 1
  • n(x) è il numero di volte che abbiamo x nella nostra serie temporale
  • N è la lunghezza della nostra serie temporale

Stiamo per trovare p(x=0) e p(x=1) e quindi utilizzare l’equazione 1 sopra… Ok, la riposterò per te:

Equazione 1

In Python, puoi farlo con questo codice molto semplice:

Funziona? Proviamolo!

Generiamo una serie temporale di lunghezza 100, con una probabilità=0.5 di avere 0:

Ben fatto. Quindi abbiamo la nostra serie temporale bilanciata. Il fatto che abbiamo impostato 0.5 come probabilità non significa esattamente 50 e 50 come puoi vedere, quindi ciò ci darà una sorta di errore nella stima della probabilità. Questo è il mondo imperfetto in cui viviamo 🙂

L’equazione per calcolare l’entropia teorica è la seguente:

Vediamo se l’entropia teorica e reale corrispondono:

Bello! Corrispondono!

Ora cambiamo p_0 e vediamo se continuano a corrispondere:

<p.Ci corrispondono con un grado di errore molto piccolo, giusto? E la parte divertente è che se facciamo questo tre volte aumentando la dimensione della nostra serie temporale, l’errore sarà sempre più piccolo:

Dopo la dimensione = 10k abbiamo praticamente 0 differenze tra entropia reale e prevista ❤

3. L’entropia di una qualsiasi serie temporale

Ora, se assumiamo ancora che la nostra serie temporale abbia valori discreti (0,1,2,…) possiamo estendere la nostra definizione di entropia in molto più di solo 2 valori di una serie temporale.

Ad esempio, prendiamo un caso di tre valori. Quindi la nostra serie temporale può essere 0,1 o 2.

Creiamo un nuovo vettore di probabilità p_0,p_1 e p_2. Per farlo genereremo 3 numeri casuali tra 0 e 100, li memorizzeremo in un vettore e poi li divideremo per la somma:

Possiamo applicare la stessa equazione (e lo stesso codice) di prima per trovare l’entropia reale e prevista.

Estendiamo la definizione di entropia nella definizione dell’entropia reale:

Questo funziona anche solo per il caso 0/1:

E come possiamo vedere, l’entropia teorica e prevista corrispondono anche per il caso dei tre valori:

E per dimostrarti che non sto barando, possiamo vedere che funziona per una varietà di casi. Se cambiamo iterativamente il vettore p (e la serie temporale), vediamo ancora che l’entropia reale e prevista corrispondono:

4. Risultati

In questo post del blog:

  • Riflettiamo sull’analisi della complessità delle serie temporali prima di applicare qualsiasi apprendimento automatico
  • Riflettiamo sull’idea di entropia e disordine di una serie temporale
  • Definiamo l’equazione matematica dell’entropia e la spieghiamo tramite esempi
  • Lo applichiamo nella pratica sia per una serie temporale 0/1 che per una serie temporale 0,1,2, mostrando come la definizione teorica corrisponde alla nostra approssimazione computazionale

Ora, il problema (limitazione) con questo approccio è che a volte la serie temporale può essere troppo continua per far funzionare questo metodo. Ma non preoccuparti! Esiste una definizione di entropia continua che risolve l’entropia per una serie temporale.

Tratterò nel prossimo blogpost!

5. Conclusioni

Se ti è piaciuto l’articolo e vuoi saperne di più sul machine learning, o se semplicemente hai qualche domanda da farmi, puoi:

A. Seguirmi su Linkedin, dove pubblico tutte le mie storie.B. Iscriverti alla mia newsletter. Ti terrà aggiornato sulle nuove storie e ti darà la possibilità di scrivermi per ricevere tutte le correzioni o dubbi che potresti avere.C. Diventare un membro affiliato, così non avrai un “numero massimo di storie al mese” e potrai leggere tutto ciò che io (e migliaia di altri autori top di Machine Learning e Data Science) scriviamo sulle più recenti tecnologie disponibili.