Analizzare un disallineamento dell'addestramento con la convalida dei dati TensorFlow

Questo documento è il terzo di una serie che mostra come monitorare i modelli di machine learning (ML) di cui è stato eseguito il deployment in AI Platform Prediction per il rilevamento di disallineamenti dei dati. Questa guida si concentra sui concetti e sui metodi di implementazione per individuare il disallineamento dei dati di addestramento e pubblicazione utilizzando TensorFlow Data Validation (TFDV).

Questa guida è rivolta ai data scientist e agli ingegneri del machine learning che vogliono monitorare come cambiano la pubblicazione dei dati nel tempo e vogliono identificare eventuali disallineamenti e anomalie nei dati. Si presume che tu abbia esperienza con Google Cloud, BigQuery e i blocchi note Jupyter.

La serie è composta dalle seguenti guide:

Il codice per il processo descritto in questo documento è incorporato nei blocchi note Jupyter. I blocchi note sono in un GitHub Repository.

Informazioni sulla deviazione dei dati e sulla deviazione dei concetti

Il monitoraggio delle prestazioni predittive di un modello ML in produzione è emerso come area cruciale delle MLOps. Le due cause più comuni di decadimento del rendimento predittivo di un modello nel tempo sono le seguenti:

  • Cresce dissolvenza tra i dati di addestramento e i dati di pubblicazione. Questo problema è noto come deviazione dati.
  • L'interpretazione della relazione tra i predittori di input e la funzionalità di destinazione si evolve. Questo problema è noto come deviazione dal concetto.

Nella deviazione dei dati, i dati di produzione ricevuti da un modello per il punteggio sono diversi dal set di dati utilizzato per addestrare, ottimizzare e valutare il modello. Le discrepanze tra i dati di addestramento e i dati di pubblicazione possono in genere essere classificati come disallineamenti dello schema o disallineamenti della distribuzione:

  • Disallineamento schema si verifica quando i dati di addestramento e di pubblicazione non sono conformi allo stesso schema. Il disallineamento dello schema è spesso causato da errori o modifiche nel processo upstream che genera i dati di pubblicazione. Le deviazioni dello schema tra i dati di addestramento e di pubblicazione possono includere i seguenti:

    • Funzionalità incoerenti: ad esempio, viene aggiunta una nuova funzionalità ai dati di pubblicazione.
    • I tipi di caratteristiche incoerenti, ad esempio una caratteristica numerica che era un numero intero nei dati di addestramento è un numero reale nei dati di pubblicazione.
    • Domini di funzionalità incoerenti, ad esempio un valore in una caratteristica della categoria scompare o un cambiamento nell'intervallo di caratteristiche numeriche.
  • Il disallineamento della distribuzione si verifica quando la distribuzione dei valori delle caratteristiche per i dati di addestramento è significativamente diversa da quella della pubblicazione dei dati. Il disallineamento può essere il risultato della scelta di un set di dati di addestramento errato per rappresentare i dati reali. Questo disallineamento può verificarsi anche naturale con l'emergere di nuovi dati e tendenze a causa dei cambiamenti nelle dinamiche dell'ambiente. Alcuni esempi sono le variazioni dei prezzi del settore immobiliare o una variazione della popolarità degli articoli di moda.

La deviazione del concetto indica che la tua interpretazione dei dati è cambiata. Spesso, la deviazione del concetto implica che la mappatura delle caratteristiche di input alle etichette utilizzate durante l'addestramento non è più valida oppure che è apparsa una nuova classe o un intervallo di valori delle etichette. La deviazione dal concetto spesso è il risultato di un cambiamento nel processo che stai cercando di modellare. Può anche essere un'evoluzione della comprensione di questo processo.

Questo documento è incentrato sullo scenario di deviazione dei dati, in particolare sul rilevamento di disallineamenti dello schema e disallineamenti delle distribuzione tra i dati di addestramento e i dati di pubblicazione.

Panoramica dell'architettura

Il seguente diagramma mostra l'ambiente descritto in questo documento.

Architettura per il flusso creato in questa serie di tutorial.

In questa architettura, il logging delle richieste di risposta di AI Platform registra un campione di richieste online in una tabella BigQuery. Puoi quindi analizzare questi dati, calcolare statistiche descrittive e visualizzare l'inclinazione dei dati e la deviazione dei dati utilizzando i blocchi note gestiti dall'utente e i TFDV di Vertex AI.

Acquisizione dei dati di pubblicazione

Un documento precedente di questa serie, Logging di richieste di utilizzo usando AI Platform Prediction, mostra come utilizzare AI Platform Prediction per il deployment di un modello Keras per la previsione online. Mostra anche come attivare il log di richiesta-risposta, che registra un campione di richieste di previsione online e risposte a una tabella BigQuery.

Le istanze della richiesta registrate e le previsioni di risposta vengono archiviate in formato non elaborato. Il documento precedente in questa serie mostra come analizzare questi log non elaborati e creare una visualizzazione strutturata per analizzare le caratteristiche di input e le previsioni di output. Questo documento spiega anche come utilizzare Google Data Studio per visualizzare come cambiano alcuni valori delle funzionalità nel tempo. La visualizzazione ti aiuta inoltre a individuare eventuali anomalie nei dati che potrebbero causare disallineamenti delle previsioni.

Rilevamento dell'alterazione dei dati di pubblicazione

Può essere difficile identificare manualmente i potenziali sfasamenti e anomalie nei tuoi dati, semplicemente guardando la visualizzazione. È particolarmente difficile se hai molte funzionalità di input. Pertanto, è necessario un approccio scalabile e automatizzato in produzione per mettere in evidenza in modo proattivo i potenziali problemi nei dati relativi alla pubblicazione.

Questo documento descrive come utilizzare TFDV per rilevare, analizzare e visualizzare disallineamenti di dati. TFDV aiuta ad analizzare i log dei dati di pubblicazione in base allo schema previsto e in base alle statistiche generate dai dati di addestramento per identificare le anomalie e rilevare gli svantaggi di addestramento. Come mostrato nel diagramma dell'architettura precedente, utilizzi quaderni gestiti dall'utente per l'utilizzo interattivo degli strumenti TFDV.

Utilizzare TFDV per il rilevamento di disallineamento dell'addestramento

Il seguente diagramma illustra il flusso di lavoro per l'utilizzo di TFDV per rilevare e analizzare i disallineamenti nei log di pubblicazione delle richieste in BigQuery.

Flusso di lavoro per il rilevamento di un allineamento del server di addestramento.

Il flusso di lavoro è costituito dalle seguenti fasi:

  1. Generazione di statistiche di riferimento e uno schema di riferimento dai dati di addestramento. Puoi quindi utilizzare le statistiche di riferimento e lo schema di riferimento per convalidare i dati di pubblicazione.
  2. Rilevamento del disallineamento dei dati di pubblicazione. Questo processo produce statistiche sui dati di pubblicazione e identifica eventuali anomalie rilevate durante la convalida dei dati di pubblicazione in base allo schema di riferimento.
  3. Analisi e visualizzazione dell'output di convalida. Le anomalie prodotte vengono quindi visualizzate e analizzate, e le statistiche vengono visualizzate per mostrare disallineamenti della distribuzione.

Obiettivi

  • Genera statistiche di riferimento e uno schema di riferimento.
  • Rilevamento disallineamento del server.
  • Analizza e visualizza gli output di convalida.

Costi

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono beneficiare di una prova gratuita.

Prima di iniziare

Prima di iniziare, devi completare la parte 1 e la parte 2 della serie.

Una volta completate queste parti, avrai a disposizione:

  • Un'istanza di blocchi note gestita dall'utente che utilizza TensorFlow 2.3.
  • Un clone del repository GitHub con il blocco note Jupyter necessario per questa guida.
  • Una tabella BigQuery contenente i log richiesta-risposta e una vista che analizza i punti dati delle richieste e delle risposte non elaborate.

Il blocco note Jupyter per questo scenario

Un processo end-to-end per questo flusso di lavoro viene codificato in un blocco note Jupyter nel repository GitHub associato a questo documento. I passaggi nel blocco note si basano sul set di dati Covertype di UCI Machine Learning Repository, che è lo stesso set di dati utilizzato per i dati di esempio nei documenti precedenti di questa serie.

Configurazione delle impostazioni del blocco note

In questa sezione prepari l'ambiente Python e imposti le variabili necessarie per eseguire il codice per lo scenario.

  1. Se non hai ancora aperto l'istanza di blocchi note gestiti dall'utente dalla parte 1, procedi come segue:

    1. Nella console, vai alla pagina Blocchi.

      Vai a Blocchi note

    2. Nella scheda Blocco note gestito dall'utente, seleziona il blocco note, quindi fai clic su Apri Jupyterlab. L'ambiente JupyterLab si apre nel browser.

    3. Nel browser del file, apri il file mlops-on-gcp, quindi vai alla directory skew-detection.

  2. Apri il blocco note 03-covertype-drift-detection_tfdv.ipynb.

  3. Nel blocco note, in Configurazione, esegui la cella Installa pacchetti e dipendenze per installare i pacchetti Python richiesti e configurare le variabili di ambiente.

  4. In Configura impostazioni di ambiente Google Cloud, imposta le seguenti variabili:

    • PROJECT_ID: l'ID del progetto Google Cloud in cui viene registrato il set di dati BigQuery per i dati di richiesta-risposta.
    • BUCKET: il nome del bucket Cloud Storage in cui sono archiviati gli artefatti prodotti.
    • BQ_DATASET_NAME: il nome del set di dati BigQuery in cui sono archiviati i log richiesta-risposta.
    • BQ_VIEW_NAME: il nome della vista BigQuery che hai creato nella parte 2 della serie.
    • MODEL_NAME: il nome del modello di cui è stato eseguito il deployment in AI Platform Prediction.
    • VERSION_NAME: il nome di versione del modello di cui è stato eseguito il deployment in AI Platform Prediction. La versione è in formato vN, ad esempio v1.
  5. Esegui le celle rimanenti in Configurazione per completare la configurazione dell'ambiente:

    1. Autentica il tuo account GCP
    2. Importa librerie
    3. Creare un'area di lavoro locale

Generazione di statistiche di riferimento e uno schema di riferimento

Esegui le attività nella prima sezione del blocco note affinché i dati di addestramento generino statistiche di riferimento e schema di riferimento. Scarica i dati come file CSV, quindi utilizza il metodo tfdv.generate_statistics_from_csv per calcolare le statistiche di riferimento e inseriscili nella variabile baseline_stats. Il codice utilizza il metodo tfdv.infer_schema per dedurre lo schema di riferimento dei dati di addestramento e inserirlo nella variabile reference_schema.

Puoi modificare lo schema dedotto, come illustrato nel seguente snippet di codice:

baseline_stats = tfdv.generate_statistics_from_csv(
   data_location=TRAIN_DATA,
   stats_options=tfdv.StatsOptions(schema=reference_schema,
       sample_count=10000))

reference_schema = tfdv.infer_schema(baseline_stats)

# Set Soil_Type to be categorical
tfdv.set_domain(reference_schema, 'Soil_Type', schema_pb2.IntDomain(
   name='Soil_Type', is_categorical=True))

# Set Cover_Type to be categorical
tfdv.set_domain(reference_schema, 'Cover_Type', schema_pb2.IntDomain(
   name='Cover_Type', is_categorical=True))

# Set max and min values for Elevation
tfdv.set_domain(reference_schema,
   'Elevation',
   tfdv.utils.schema_util.schema_pb2.IntDomain(min=1000, max=5000))

# Allow no missing values
tfdv.get_feature(reference_schema,
   'Slope').presence.min_fraction = 1.0

# Set distribution skew detector for Wilderness_Area
tfdv.get_feature(reference_schema,
   'Wilderness_Area').skew_comparator.infinity_norm.threshold = 0.05

Puoi visualizzare lo schema di riferimento generato utilizzando il metodo tfdv.display_schema. Quando lo fai, viene visualizzata una scheda simile alla seguente:

Elenco dello schema generato.

Rilevamento dell'asimposizione dei dati di pubblicazione

Nella sezione successiva del blocco note eseguirai le attività per rilevare gli errori di pubblicazione dei dati. La procedura è costituita dai seguenti passaggi:

  1. I dati di pubblicazione richiesta-risposta vengono letti dalla visualizzazione vw_covertype_classifier_logs_v1 in BigQuery. La visualizzazione presenta valori e previsioni delle caratteristiche analizzate e registrati nella tabella covertype_classifier_logs. La tabella contiene richieste di istanze e risposte di previsione non elaborate del modello covertype_classifier di cui è stato eseguito il deployment in precedenza su AI Platform Prediction.
  2. I dati di pubblicazione registrati vengono salvati in un file CSV da utilizzare per TFDV.
  3. TFDV elabora le statistiche di pubblicazione dal file di dati CSV per le diverse sezioni dei dati di pubblicazione utilizzando il metodo tfdv.experimental_get_feature_value_slicer, come mostrato nel seguente snippet di codice:

    slice_fn = tfdv.experimental_get_feature_value_slicer(features={'time': None})
    
    serving_stats_list = tfdv.generate_statistics_from_csv(
    data_location=serving_data_file,
    stats_options=tfdv.StatsOptions(
        slice_functions=[slice_fn],
        schema=reference_schema))
    
  4. TFDV convalida ogni porzione serving_stats in base allo schema di riferimento (nella variabile reference_schema) utilizzando il metodo tfdv.validate_statistics. Questo processo genera anomalie, come mostrato nel seguente snippet di codice:

    anomalies_list = []
    
    for slice_key in slice_keys[1:]:
      serving_stats = tfdv.get_slice_stats(serving_stats_list, slice_key)
      anomalies = tfdv.validate_statistics(
           serving_stats, schema=reference_schema,
           previous_statistics=baseline_stats)
      anomalies_list.append(anomalies)
    

TFDV verifica la presenza di anomalie confrontando uno schema e il buffer di protocollo statistiche. Per informazioni sui tipi di anomalie che TFDV può rilevare, consulta la sezione Riferimento alle anomalie di dati TensorFlow. I campi schema e statistiche vengono utilizzati per rilevare ciascun tipo di anomalia, nonché le condizioni di rilevamento di ciascun tipo di anomalia.

Analizzare e visualizzare gli output di convalida

Nella terza sezione del blocco note puoi visualizzare le anomalie. Il codice utilizza il metodo tfdv.visualize_statistics per visualizzare una sezione serving_stats rispetto alle statistiche di riferimento dei dati di addestramento, in modo da evidenziare gli sfasamenti di distribuzione.

Il seguente screenshot mostra un esempio di una visualizzazione per le distribuzioni per le funzionalità numeriche Elevation e Aspect.

Grafici che mostrano anomalie di altitudine e aspetto.

I seguenti screenshot mostrano esempi di visualizzazioni per le funzionalità categoriche Wildness_Area e Cover_Type. Nota che nella visualizzazione delle categorie, Cover_Type è la funzionalità di destinazione e che la distribuzione mostra un disallineamento della previsione.

Visualizzazione dell'area incontaminata.

Visualizzazione tipo di copertina.

Per esaminare le anomalie generate in ogni sezione serving_stats, puoi chiamare il metodo tfdv.display_anomalies. La seguente scheda mostra un esempio di anomalie rilevate.

Elenco di anomalie rilevate dal metodo "display_anomalies".

Oltre a creare visualizzazioni utilizzando l'API di visualizzazione TFDV, puoi utilizzare una libreria di tracciamento Python per visualizzare le statistiche nel tuo blocco note.

I seguenti grafici mostrano come i valori medi della caratteristica numerica nelle statistiche di pubblicazione si spostano in porzioni temporali e come vengono confrontati i valori medi con le statistiche di riferimento:

Grafico dei valori medi per l'elevazione.

Grafico dei valori medi per aspetto.

Grafico dei valori medi per la pendenza.

Il seguente diagramma mostra in che modo la distribuzione del valore della caratteristica categorica nelle statistiche di pubblicazione si suddivide in diverse fasce temporali:

Grafici a barre che mostrano la distribuzione del valore delle funzionalità nel tempo.

Esegui la pulizia

Se prevedi di continuare con il resto di questa serie, mantieni le risorse che hai già creato. In caso contrario, elimina il progetto che contiene le risorse o mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

  1. Nella console, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto da eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi