IA generativa per serie temporali

Generative AI for time series

Generazione di dati sintetici a serie temporale con un GAN: DoppelGANger

I dati a serie temporale – dati di traffico, prezzi delle azioni, misurazioni meteorologiche ed energetiche, segnali sanitari – sono essenzialmente dati che vengono generati continuamente nel tempo.

Questa dipendenza dal tempo introduce nuovi livelli di complessità al processo di generazione di dati sintetici: mantenere le tendenze e le correlazioni nel tempo è altrettanto importante quanto mantenere le correlazioni tra le caratteristiche o attributi (come siamo abituati a fare con i dati tabulari). E più lunga è la storia temporale, più difficile è preservare tali relazioni.

Nel corso degli anni, i team di scienze dei dati hanno cercato di definire modi adatti per generare dati a serie temporale sintetici di alta qualità, tra i quali i Generative Adversarial Networks (GAN) sono attualmente estremamente popolari.

In questo articolo, approfondiremo le peculiarità di un’architettura ben umoristica, DoppelGANger – sì, il gioco di parole è intenzionale – recentemente aggiunta al pacchetto ydata-synthetic e esploreremo come possiamo utilizzarla per generare dati sintetici da complessi dataset a serie temporale.

Come generi il tuo doppio di dati a serie temporale?

Anche per un data scientist esperto, il tema della generazione di dati sintetici può essere un po’ complicato perché ci sono molti dettagli da considerare. Infatti, determinare come regolare al meglio la preparazione dei dati e scegliere modelli di apprendimento automatico appropriati per la sintetizzazione dei dati è uno dei principali argomenti che abbiamo discusso nella Data-Centric AI Community.

A fini educativi, ydata-synthetic è stata la nostra scelta principale e l’abbiamo testata abbondantemente con dati tabulari. Questa volta, stiamo sperimentando con dati a serie temporale, utilizzando il modello più recente per la generazione di dati sintetici a serie temporale – DoppelGANger.

Come puoi intuire dal nome (fantastico), DoppelGANger fa un gioco di parole con “Doppelganger” – una parola tedesca che si riferisce a un sosia o a un doppio di una persona – e “GAN”, il modello di intelligenza artificiale.

Essendo basato su GAN, gli stessi principi generali dei GAN si applicano a DoppleGANger: il generatore e il discriminatore sono continuamente ottimizzati confrontando i dati sintetici (creati dal generatore) con i dati reali (che il discriminatore o il critico cerca di distinguere dal sintetico). Tuttavia, come accennato in precedenza, i GAN tradizionalmente hanno avuto difficoltà con le peculiarità dei dati a serie temporale:

  • I GAN faticano a catturare relazioni temporali a lungo termine. Un approccio comune è considerare un approccio a finestre, cioè definire segmenti più brevi di dati e valutare i modelli solo su questi segmenti. Questo è l’approccio adottato da TimeGAN. Tuttavia, per casi d’uso in cui è necessario replicare un’intera serie temporale, che richiede il mantenimento di correlazioni a lungo termine, ciò purtroppo non è fattibile;
  • I GAN faticano con il collasso delle modalità. Se i dati hanno distribuzioni multimodali, quelle meno rappresentate alla fine scompariranno. I dati a serie temporale sono particolarmente soggetti a ciò poiché l’intervallo delle misurazioni è spesso altamente variabile;
  • I GAN faticano a mappare relazioni complesse tra misurazioni e attributi. Così come tra diverse misurazioni. Se ricordi la struttura dei dati a serie temporale, questo sarebbe il caso in cui sarebbe difficile mappare la relazione tra il saldo del conto e il tipo di transazione (attributo), e tra il saldo del conto e altre misurazioni come l’importo delle commissioni.

Per superare queste limitazioni, DoppelGANger introduce alcune modifiche per gestire meglio la generazione di dati sintetici a serie temporale:

  • Per catturare correlazioni temporali, DoppelGANger utilizza la generazione in batch. Invece di generare un record alla volta, genera un batch di record. Questo è migliore per serie temporali più lunghe e aiuta a preservare le correlazioni temporali che verrebbero dimenticate quando si generano singoli record;
  • Per affrontare il collasso delle modalità, DoppleGANger utilizza l’autonormalizzazione. Invece di normalizzare i dati di input utilizzando i valori minimi e massimi globali delle misurazioni, ogni segnale della serie temporale viene normalizzato individualmente. I valori minimi e massimi di ciascuna serie rispettiva vengono utilizzati come metadati, che il GAN impara a generare anche, alleviando il collasso delle modalità;
  • Per mappare le relazioni tra misurazioni e attributi, DoppleGANger modella la distribuzione congiunta tra misurazioni e attributi e introduce un discriminatore ausiliario. La generazione degli attributi è svincolata dalla generazione delle misurazioni condizionate agli attributi, dove ognuno utilizza un generatore dedicato. Inoltre, viene introdotto un discriminatore ausiliario che discrimina solo sugli attributi.
Panoramica dell'architettura di DoppelGANger. Immagine tratta da Lin et al..

Benefici chiave e quando usarlo

Ora che abbiamo una panoramica completa della sua architettura e di come supera alcune sfide ben note dei dati di serie temporali, è più facile capire perché DoppelGANger è un modello così popolare:

  • Generazione accurata di modelli temporali: DoppelGANger è progettato per affrontare sia modelli a breve termine che a lungo termine nei dati, ed è quindi in grado di imitare certe caratteristiche come i cambiamenti stagionali. Ad esempio, catturare le correlazioni settimanali e annuali in un caso di studio di serie temporali finanziarie;
  • Correlazioni temporali realistiche: DoppelGANger è adatto per casi d’uso in cui mantenere le correlazioni tra misurazioni e attributi è fondamentale. Ad esempio, replicare le tendenze nelle applicazioni di e-commerce in cui i modelli di consumo sono associati ad altri attributi (giorno della settimana, fattori personali come età e genere, o informazioni di marketing e pubblicità);
  • Generazione flessibile: DoppelGANger consente la generazione di dati sintetici in base a diverse distribuzioni di metadati/attributi definite dagli utenti. In questo modo, può adattarsi all’aumento di eventi rari, come quelli comunemente presenti in dispositivi sanitari o transazioni di rilevamento delle frodi.

Guardiamo un caso d’uso pratico, che ne dici?

Esempio pratico: Misurare la banda larga in America

Per esplorare l’applicazione di DoppelGANger, utilizzeremo il dataset Measuring Broadband America (MBA), disponibile gratuitamente sul sito della Federal Communications Commission (FCC) (Informazioni sulla licenza). Questo è uno dei dataset utilizzati per mostrare il modello DoppelGANger nel paper originale e riporta diverse misurazioni come tempi di andata e ritorno e tassi di perdita di pacchetti da diverse case negli Stati Uniti, come dettaglieremo tra poco. Puoi seguire il tutorial utilizzando questo notebook che contiene il flusso completo.

Per iniziare il tutorial, dovremo prima creare un ambiente virtuale per il nostro progetto e installare il pacchetto ydata-synthetic:

Installa ydata-synthetic. ydata-synthetic si basa su Tensorflow

Poi, possiamo importare i moduli necessari, ovvero i ben noti pandas e matplotlib, insieme ai moduli synthesizers che contengono il modello e i parametri di addestramento, e l’implementazione di DoppelGANger:

Importa i pacchetti necessari per lo sviluppo

Ora possiamo leggere i dati. Vediamo che il nostro dataset contiene 5 caratteristiche con comportamenti diversi: traffic_byte_counter e ping_loss_rate sono caratteristiche continue, che consistono nelle misurazioni di interesse. Ogni misurazione è associata a 3 caratteristiche categoriali, o metadati, ovvero isp, technology e state.

Ecco una breve anteprima del nostro dataset:

FCC MBA Dataset: Una anteprima delle misurazioni e dei metadati.

Ora, possiamo passare a definire il nostro modello e i parametri di addestramento:

Impostazione dei parametri del modello e dei parametri di addestramento del modello

Questi parametri corrispondono alle varie impostazioni utilizzate nell’implementazione di DoppelGANger:

  • batch_size specifica il numero di campioni (punti dati) che vengono elaborati insieme in ogni iterazione di addestramento;
  • lr sta per “learning rate” e determina quanto i pesi del modello vengono aggiornati in risposta all’errore stimato durante l’addestramento;
  • betas sono coefficienti di regolarizzazione del modello e definiscono come il modello adatta i suoi tassi di apprendimento nel tempo;
  • latent_dim specifica la dimensione dello spazio latente, che è uno spazio di dimensione inferiore in cui opera il generatore;
  • gp_lambda controlla la forza del termine di penalizzazione del gradiente nella funzione di perdita, che aiuta a stabilizzare l’addestramento;
  • pac è il grado di imballaggio progettato per alleviare il collasso delle modalità;
  • epochs sono il numero di iterazioni di addestramento;
  • sequence_lenght è la lunghezza di ogni sequenza temporale;
  • sample_lenght si riferisce alla dimensione del batch delle serie temporali, ovvero il numero di passaggi temporali generati in ogni rollout di RNN (parametro S nel paper originale);
  • rounds è il numero di passaggi per batch;
  • measument_cols si riferisce alle misurazioni esistenti nel dataset.

Con i parametri definiti, possiamo addestrare il modello e infine sintetizzare nuovi dati:

Addestramento del modello e generazione di campioni

Ora che abbiamo i nostri dati sintetici appena creati, possiamo ricorrere alla visualizzazione dei dati per determinare rapidamente se i dati sintetici riproducono generalmente il comportamento dei dati originali. Possiamo rappresentare l’intera sequenza o una finestra temporale più breve di 56 punti per controllare i risultati preliminari in modo più dettagliato e decidere se la parametrizzazione iper richiede qualche aggiustamento:

Dati Reali vs. Dati Sintetici: Una lunghezza della sequenza considerando il traffico e la sintetizzazione di ping.

Complessivamente, i risultati sono molto promettenti e DoppelGANger è in grado di replicare completamente l’intera sequenza temporale, comprese le caratteristiche a breve e lungo termine. Questo è un semplice dataset a scopo esemplificativo, con bassa dimensionalità e senza problemi critici come i valori mancanti: per scenari più complessi, potrebbe essere saggio esplorare approfonditamente il dataset in anticipo.

Conclusioni

Come abbiamo discusso in tutto questo articolo, i dati delle serie temporali aggiungono una complessità aggiuntiva al processo di generazione di dati sintetici che è difficile da mappare utilizzando approcci GAN convenzionali.

DoppelGANger si pone la sfida di superare parte di questa complessità, e offre vantaggi estremamente promettenti che lo rendono così popolare tra i praticanti dei dati al giorno d’oggi:

  • Sintetizzazione robusta dei dati: Gestendo sia le relazioni a breve che a lungo termine, DoppelGANger è in grado di creare nuovi dataset realistici che riflettono da vicino i dati originali. Questo è forse il caso d’uso più interessante dell’approccio, che consente ai data scientist di creare una copia dei loro dataset per una sperimentazione sicura e personalizzabile durante i cicli di sviluppo;
  • Flessibilità e generalizzazione: Essendo in grado di gestire contesti complessi che comprendono dati eterogenei (dataset categorici, continui, multidimensionali), DoppelGANger può gestire le caratteristiche generali dei dati del mondo reale senza richiedere uno sforzo umano estensivo nel processo di trasformazione, accelerando naturalmente anche lo sviluppo;
  • Un’ampia gamma di applicazioni e settori: Dalla condivisione dei dati, alla preservazione della privacy e alla generazione di dati sintetici ad alta fedeltà, DoppelGANger è applicabile a una vasta gamma di casi d’uso. Ciò lo rende estremamente interessante in molti settori diversi, come reti, finanza, sicurezza e molto altro ancora.

In un mondo con una fame infinita di informazioni basate sui dati, DoppelGANger si presenta come un approccio inestimabile, fornendo ai data scientist i dati di cui hanno bisogno, senza compromettere la privacy o la qualità, e consentendo loro di prendere decisioni intelligenti doppie!

Come al solito, tutto il codice utilizzato in questo tutorial è disponibile nel nostro repository, e puoi sempre consultare la documentazione per sperimentare con altri modelli attualmente supportati dal pacchetto.

Chi sono

Appassionato di dati. Sostenitore dello sviluppo di soluzioni di qualità dei dati per aiutare i data scientist ad adottare l’IA incentrata sui dati.

CDO @ YData | LinkedIn