Convalida dei dati TensorFlow: controllo e analisi dei dati

Una volta che i tuoi dati sono in una pipeline TFX, puoi utilizzare i componenti TFX per analizzarli e trasformarli. Puoi utilizzare questi strumenti anche prima di addestrare un modello.

Ci sono molte ragioni per analizzare e trasformare i tuoi dati:

  • Per trovare problemi nei tuoi dati. I problemi comuni includono:
    • Dati mancanti, ad esempio funzioni con valori vuoti.
    • Etichette trattate come caratteristiche, in modo che il tuo modello possa dare un'occhiata alla risposta giusta durante l'allenamento.
    • Funzionalità con valori al di fuori dell'intervallo previsto.
    • Anomalie dei dati.
    • Il modello di trasferimento appreso ha una preelaborazione che non corrisponde ai dati di addestramento.
  • Per progettare set di funzionalità più efficaci. Ad esempio, puoi identificare:
    • Funzionalità particolarmente informative.
    • Funzionalità ridondanti.
    • Caratteristiche che variano così ampiamente in scala da poter rallentare l'apprendimento.
    • Funzionalità con poche o nessuna informazione predittiva univoca.

Gli strumenti TFX possono sia aiutare a trovare bug di dati, sia aiutare con l'ingegneria delle funzionalità.

Convalida dei dati di TensorFlow

Panoramica

TensorFlow Data Validation identifica le anomalie nell'addestramento e nell'elaborazione dei dati e può creare automaticamente uno schema esaminando i dati. Il componente può essere configurato per rilevare diverse classi di anomalie nei dati. Può

  1. Esegui controlli di validità confrontando le statistiche dei dati con uno schema che codifica le aspettative dell'utente.
  2. Rileva lo sfasamento tra formazione e servizio confrontando esempi nei dati di formazione e pubblicazione.
  3. Rileva la deriva dei dati osservando una serie di dati.

Documentiamo ciascuna di queste funzionalità in modo indipendente:

Convalida di esempio basata su schema

TensorFlow Data Validation identifica eventuali anomalie nei dati di input confrontando le statistiche dei dati con uno schema. Lo schema codifica le proprietà che i dati di input dovrebbero soddisfare, come i tipi di dati oi valori categoriali, e possono essere modificate o sostituite dall'utente.

La convalida dei dati di Tensorflow viene in genere invocata più volte nel contesto della pipeline TFX: (i) per ogni suddivisione ottenuta da ExampleGen, (ii) per tutti i dati pre-trasformati utilizzati da Transform e (iii) per tutti i dati post-trasformazione generati da Trasformare. Quando invocato nel contesto di Transform (ii-iii), le opzioni statistiche e i vincoli basati sullo schema possono essere impostati definendo stats_options_updater_fn . Ciò è particolarmente utile quando si convalidano dati non strutturati (ad es. elementi di testo). Vedere il codice utente per un esempio.

Funzionalità avanzate dello schema

Questa sezione tratta la configurazione dello schema più avanzata che può aiutare con configurazioni speciali.

Caratteristiche scarse

La codifica di funzionalità sparse negli esempi di solito introduce più funzionalità che dovrebbero avere la stessa valenza per tutti gli esempi. Ad esempio, la funzione sparsa:


WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
verrebbe codificata utilizzando Funzioni separate per l'indice e il valore:

WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
con la restrizione che la valenza della funzione dell'indice e del valore deve corrispondere per tutti gli esempi. Questa restrizione può essere resa esplicita nello schema definendo una funzionalità_sparsa:

sparse_feature {
  name: 'WeightedCategories'
  index_feature { name: 'WeightedCategoriesIndex' }
  value_feature { name: 'WeightedCategoriesValue' }
}

La definizione di funzionalità sparse richiede una o più funzionalità di indice e un valore che fanno riferimento a funzionalità esistenti nello schema. La definizione esplicita delle funzionalità sparse consente a TFDV di verificare che le valenze di tutte le funzionalità riferite corrispondano.

Alcuni casi d'uso introducono restrizioni di valenza simili tra le funzionalità, ma non codificano necessariamente una funzionalità sparsa. L'utilizzo di funzionalità sparse dovrebbe sbloccarti, ma non è l'ideale.

Ambienti dello schema

Per impostazione predefinita, le convalide presuppongono che tutti gli esempi in una pipeline aderiscano a un unico schema. In alcuni casi è necessaria l'introduzione di lievi variazioni dello schema, ad esempio le funzionalità utilizzate come etichette sono richieste durante l'addestramento (e dovrebbero essere convalidate), ma mancano durante la pubblicazione. Gli ambienti possono essere utilizzati per esprimere tali requisiti, in particolare default_environment() , in_environment() , not_in_environment() .

Ad esempio, si supponga che una funzione denominata "ETICHETTA" sia necessaria per l'addestramento, ma dovrebbe mancare dalla pubblicazione. Questo può essere espresso da:

  • Definire nello schema due ambienti distinti: ["SERVIZIO", "FORMAZIONE"] e associare "ETICHETTA" solo all'ambiente "FORMAZIONE".
  • Associare i dati di allenamento con l'ambiente "TRAINING" e i dati di servizio con l'ambiente "SERVING".
Generazione di schemi

Lo schema dei dati di input viene specificato come un'istanza dello schema TensorFlow.

Invece di costruire uno schema manualmente da zero, uno sviluppatore può fare affidamento sulla costruzione automatica dello schema di TensorFlow Data Validation. In particolare, TensorFlow Data Validation costruisce automaticamente uno schema iniziale basato su statistiche calcolate sui dati di addestramento disponibili nella pipeline. Gli utenti possono semplicemente rivedere questo schema generato automaticamente, modificarlo secondo necessità, controllarlo in un sistema di controllo della versione e inserirlo esplicitamente nella pipeline per un'ulteriore convalida.

TFDV include infer_schema() per generare automaticamente uno schema. Per esempio:

schema = tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)

Ciò avvia una generazione automatica dello schema in base alle seguenti regole:

  • Se uno schema è già stato generato automaticamente, viene utilizzato così com'è.

  • In caso contrario, TensorFlow Data Validation esamina le statistiche dei dati disponibili e calcola uno schema adatto per i dati.

Nota: lo schema generato automaticamente è il massimo sforzo e tenta solo di dedurre le proprietà di base dei dati. Si prevede che gli utenti lo rivedano e lo modifichino secondo necessità.

Rilevamento dell'inclinazione al servizio dell'addestramento

Panoramica

TensorFlow Data Validation è in grado di rilevare l'inclinazione della distribuzione tra l'addestramento e l'elaborazione dei dati. L'inclinazione della distribuzione si verifica quando la distribuzione dei valori delle funzionalità per i dati di addestramento è significativamente diversa dalla distribuzione dei dati. Una delle cause principali dell'inclinazione della distribuzione è l'utilizzo di un corpus completamente diverso per la generazione dei dati di addestramento per superare la mancanza di dati iniziali nel corpus desiderato. Un altro motivo è un meccanismo di campionamento difettoso che sceglie solo un sottocampione dei dati di servizio su cui eseguire l'allenamento.

Scenario di esempio

Consulta la Guida introduttiva alla convalida dei dati di TensorFlow per informazioni sulla configurazione del rilevamento dell'inclinazione del servizio di formazione.

Rilevamento della deriva

Il rilevamento della deriva è supportato tra intervalli di dati consecutivi (ovvero tra l'intervallo N e l'intervallo N+1), ad esempio tra diversi giorni di dati di addestramento. Esprimiamo la deriva in termini di distanza L-infinito per le caratteristiche categoriali e la divergenza approssimata di Jensen-Shannon per le caratteristiche numeriche. È possibile impostare la distanza di soglia in modo da ricevere avvisi quando la deriva è superiore a quella accettabile. L'impostazione della distanza corretta è in genere un processo iterativo che richiede conoscenza e sperimentazione del dominio.

Per informazioni sulla configurazione del rilevamento della deriva, vedere la Guida introduttiva alla convalida dei dati di TensorFlow .

Utilizzo delle visualizzazioni per controllare i tuoi dati

TensorFlow Data Validation fornisce strumenti per visualizzare la distribuzione dei valori delle caratteristiche. Esaminando queste distribuzioni in un notebook Jupyter utilizzando Facets è possibile rilevare problemi comuni con i dati.

Statistiche delle funzioni

Identificazione di distribuzioni sospette

È possibile identificare i bug comuni nei dati utilizzando una visualizzazione Panoramica dei facet per cercare le distribuzioni sospette dei valori delle funzionalità.

Dati sbilanciati

Una caratteristica sbilanciata è una caratteristica per la quale predomina un valore. Le funzionalità sbilanciate possono verificarsi naturalmente, ma se una funzionalità ha sempre lo stesso valore potresti avere un bug di dati. Per rilevare le caratteristiche sbilanciate in una panoramica dei facet, scegli "Non uniformità" dal menu a discesa "Ordina per".

Le funzionalità più sbilanciate verranno elencate in cima a ciascun elenco di tipi di funzionalità. Ad esempio, lo screenshot seguente mostra una caratteristica che è tutti zeri e una seconda che è molto sbilanciata, nella parte superiore dell'elenco "Caratteristiche numeriche":

Visualizzazione di dati sbilanciati

Dati distribuiti uniformemente

Una caratteristica distribuita uniformemente è quella per la quale tutti i valori possibili appaiono con una frequenza vicina alla stessa. Come per i dati sbilanciati, questa distribuzione può verificarsi naturalmente, ma può anche essere prodotta da bug di dati.

Per rilevare le funzionalità distribuite uniformemente in una panoramica dei facet, scegli "Non uniformità" dal menu a discesa "Ordina per" e seleziona la casella di controllo "Ordine inverso":

Istogramma di dati uniformi

I dati stringa vengono rappresentati utilizzando grafici a barre se sono presenti 20 valori univoci o meno e come grafico di distribuzione cumulativa se sono presenti più di 20 valori univoci. Quindi, per i dati stringa, le distribuzioni uniformi possono apparire come grafici a barre piatte come quello sopra o linee rette come quello sotto:

Grafico a linee: distribuzione cumulativa di dati uniformi

Bug che possono produrre dati distribuiti uniformemente

Ecco alcuni bug comuni che possono produrre dati distribuiti uniformemente:

  • Utilizzo di stringhe per rappresentare tipi di dati non stringa come le date. Ad esempio, avrai molti valori univoci per una funzione datetime con rappresentazioni come "2017-03-01-11-45-03". I valori unici saranno distribuiti uniformemente.

  • Includendo indici come "numero di riga" come caratteristiche. Anche in questo caso hai molti valori unici.

Dati mancanti

Per verificare se a una funzione mancano completamente i valori:

  1. Scegli "Importo mancante/zero" dal menu a discesa "Ordina per".
  2. Seleziona la casella di controllo "Ordine inverso".
  3. Guarda la colonna "mancante" per vedere la percentuale di istanze con valori mancanti per una funzione.

Un bug dei dati può anche causare valori di funzionalità incompleti. Ad esempio, potresti aspettarti che la lista dei valori di una funzione contenga sempre tre elementi e scoprire che a volte ne ha solo uno. Per verificare la presenza di valori incompleti o altri casi in cui gli elenchi di valori delle funzioni non hanno il numero di elementi previsto:

  1. Scegli "Lunghezza elenco valori" dal menu a discesa "Grafico da mostrare" sulla destra.

  2. Guarda il grafico a destra di ogni riga di funzionalità. Il grafico mostra l'intervallo di lunghezze dell'elenco valori per la funzione. Ad esempio, la riga evidenziata nello screenshot seguente mostra una funzionalità che ha alcuni elenchi di valori di lunghezza zero:

Visualizzazione panoramica dei facet con feature con elenchi di valori di feature a lunghezza zero

Grandi differenze di scala tra le caratteristiche

Se le tue caratteristiche variano ampiamente in scala, il modello potrebbe avere difficoltà di apprendimento. Ad esempio, se alcune caratteristiche variano da 0 a 1 e altre variano da 0 a 1.000.000.000, hai una grande differenza di scala. Confronta le colonne "max" e "min" tra le funzioni per trovare scale molto diverse.

Prendere in considerazione la normalizzazione dei valori delle caratteristiche per ridurre queste ampie variazioni.

Etichette con etichette non valide

Gli estimatori di TensorFlow hanno restrizioni sul tipo di dati che accettano come etichette. Ad esempio, i classificatori binari in genere funzionano solo con le etichette {0, 1}.

Esaminare i valori dell'etichetta nella Panoramica delle sfaccettature e assicurarsi che siano conformi ai requisiti degli estimatori .