Monitoraggio di disallineamenti e deviazioni delle attribuzioni delle caratteristiche

Questa pagina descrive come utilizzare Vertex AI Model Monitoring con Vertex Explainable AI per rilevare disallineamenti e deviazioni per le attribuzione delle funzionalità di input categoriche e numeriche.

Panoramica del monitoraggio basato sull'attribuzione delle caratteristiche

Le attribuzioni delle caratteristiche indicano in che misura ciascuna caratteristica del modello ha contribuito alle previsioni per ogni istanza specifica. Quando richiedi le previsioni, ricevi i valori previsti in base al tuo modello. Quando richiedi spiegazioni, ricevi le previsioni insieme alle informazioni sull'attribuzione delle funzionalità.

I punteggi di attribuzione sono proporzionali al contributo della caratteristica alla previsione di un modello. In genere sono firmati, il che indica se una funzionalità contribuisce ad aumentare o diminuire la previsione. Le attribuzioni in tutte le funzionalità devono equivalere al punteggio di previsione del modello.

Monitorando le attribuzioni delle funzionalità, il monitoraggio dei modelli monitora le variazioni dei contributi di una funzionalità alle previsioni di un modello nel tempo. Una modifica al punteggio di attribuzione di una funzionalità chiave indica spesso che la funzionalità è stata modificata in modo da influire sull'accuratezza delle previsioni del modello.

Per informazioni su come viene calcolato un punteggio di attribuzione delle caratteristiche, consulta Metodi di attribuzione delle caratteristiche.

Disallineamento addestramento/produzione e deviazione della previsione dell'attribuzione delle caratteristiche

Quando crei un job di monitoraggio per un modello con l'Vertex Explainable AI abilitata, Il monitoraggio dei modelli monitora lo scostamento o la deriva sia per le distribuzioni delle funzionalità sia per le attribuzioni delle funzionalità. Per informazioni su disallineamento e deviazione della distribuzione delle funzionalità, consulta Introduzione a Vertex AI Model Monitoring.

Per le attribuzioni delle funzionalità:

  • Il disallineamento addestramento/produzione si verifica quando il punteggio di attribuzione di una funzionalità in produzione si discosta da quello nei dati di addestramento originali.

  • La deviazione della previsione si verifica quando il punteggio di attribuzione di una funzionalità in produzione cambia in modo significativo nel tempo.

Puoi attivare il rilevamento del disallineamento se fornisci il set di dati di addestramento originale per il tuo modello. In caso contrario, devi attivare il rilevamento della deviazione. Puoi anche attivare il rilevamento sia del disallineamento sia della deriva.

Prerequisiti

Per utilizzare Model Monitoring con Vertex Explainable AI, completa quanto segue:

  1. Se attivi il rilevamento dello scostamento, carica i dati di addestramento o l'output di un job di spiegazione batch per il set di dati di addestramento in Cloud Storage o BigQuery. Ottieni il link URI ai dati. Per il rilevamento della deriva, non sono richiesti dati di addestramento o una base di spiegazione.

  2. Avere un modello disponibile in Vertex AI di tipo AutoML tabulare o addestramento personalizzato tabulare importato:

  3. Configura il modello per utilizzare l'Vertex Explainable AI quando lo crei, lo importi o lo esegui. Il campo ExplanationSpec.ExplanationParameters deve essere compilato per il tuo modello.

  4. (Facoltativo) Per i modelli con addestramento personalizzato, carica lo schema dell'istanza di analisi per il modello su Cloud Storage. Model Monitoring richiede lo schema per avviare la procedura di monitoraggio e calcolare la distribuzione di riferimento per il rilevamento del disallineamento. Se non fornisci lo schema durante la creazione del job, il job rimane in stato pending finché Model Monitoring non riesce ad analizzare automaticamente lo schema dalle prime 1000 richieste di previsione ricevute dal modello.

Attivare il rilevamento di disallineamenti o deviazioni

Per configurare il rilevamento di disallineamento o di deviazione, crea un job di monitoraggio del deployment dei modelli:

Per creare un job di monitoraggio del deployment del modello utilizzando la console Google Cloud, crea un endpoint:

  1. Nella console Google Cloud, vai alla pagina Endpoint Vertex AI.

    Vai a Endpoints

  2. Fai clic su Crea endpoint.

  3. Nel riquadro Nuovo endpoint, assegna un nome all'endpoint e imposta una regione.

  4. Fai clic su Continua.

  5. Nel campo Nome del modello, seleziona un modello AutoML tabulare o con addestramento personalizzato importato.

  6. Nel campo Versione, seleziona una versione per il modello.

  7. Fai clic su Continua.

  8. Nel riquadro Monitoraggio dei modelli, assicurati che l'opzione Attiva il monitoraggio dei modelli per questo endpoint sia attivata. Le impostazioni di monitoraggio configurate si applicano a tutti i modelli di cui è stato eseguito il deployment nell'endpoint.

  9. Inserisci un nome visualizzato del job di monitoraggio.

  10. Inserisci una durata della finestra di monitoraggio.

  11. In Email di notifica, inserisci uno o più indirizzi email separati da virgola per ricevere avvisi quando un modello supera una soglia di avviso.

  12. (Facoltativo) Per Canali di notifica, seleziona i canali Cloud Monitoring per ricevere avvisi quando un modello supera una soglia di avviso. Puoi selezionare i canali di Cloud Monitoring esistenti o crearne uno nuovo facendo clic su Gestisci canali di notifica. La console supporta i canali di notifica PagerDuty, Slack e Pub/Sub.

  13. Inserisci una frequenza di campionamento.

  14. (Facoltativo) Inserisci lo schema di input di previsione e lo schema di input di analisi.

  15. Fai clic su Continua. Si apre il riquadro Obiettivo monitoraggio con le opzioni per il rilevamento di disallineamento o deviazione:

    1. Seleziona Rilevamento del disallineamento addestramento/produzione.
    2. In Origine dati di addestramento, fornisci un'origine dati di addestramento.
    3. In Colonna target, inserisci il nome della colonna nei dati di addestramento che il modello è addestrato a prevedere. Questo campo è escluso dall'analisi di monitoraggio.
    4. (Facoltativo) In Soglie di avviso, specifica le soglie per attivare gli avvisi. Per informazioni su come formattare le soglie, muovi il cursore sopra l'icona Guida.
    5. Fai clic su Crea.
    1. Seleziona Rilevamento della deviazione della previsione.
    2. (Facoltativo) In Soglie di avviso, specifica le soglie per attivare gli avvisi. Per informazioni su come formattare le soglie, muovi il cursore sopra l'icona Guida.
    3. Fai clic su Crea.

Per creare un job di monitoraggio del deployment del modello utilizzando gcloud CLI, esegui prima il deployment del modello in un endpoint.

Una configurazione del job di monitoraggio si applica a tutti i modelli di cui è stato eseguito il deployment in un endpoint.

Esegui il comando gcloud ai model-monitoring-jobs create:

gcloud ai model-monitoring-jobs create \
  --project=PROJECT_ID \
  --region=REGION \
  --display-name=MONITORING_JOB_NAME \
  --emails=EMAIL_ADDRESS_1,EMAIL_ADDRESS_2 \
  --endpoint=ENDPOINT_ID \
  --feature-thresholds=FEATURE_1=THRESHOLD_1,FEATURE_2=THRESHOLD_2 \
  --prediction-sampling-rate=SAMPLING_RATE \
  --monitoring-frequency=MONITORING_FREQUENCY \
  --target-field=TARGET_FIELD \
  --bigquery-uri=BIGQUERY_URI

dove:

  • PROJECT_ID è l'ID del tuo Google Cloud progetto. Ad esempio, my-project.

  • REGION è la posizione del job di monitoraggio. Ad esempio, us-central1.

  • MONITORING_JOB_NAME è il nome del job di monitoraggio. Ad esempio, my-job.

  • EMAIL_ADDRESS è l'indirizzo email su cui vuoi ricevere gli avvisi di Model Monitoring. Ad esempio, example@example.com.

  • ENDPOINT_ID è l'ID dell'endpoint in cui è stato eseguito il deployment del modello. Ad esempio, 1234567890987654321.

  • (Facoltativo) FEATURE_1=THRESHOLD_1 è la soglia di avviso per ogni funzionalità da monitorare. Ad esempio, se specifichi Age=0.4, Model Monitoring registra un avviso quando la [distanza statistica][stat-distance] tra le distribuzioni di input e di riferimento per la funzionalità Age supera 0,4.

  • (Facoltativo) SAMPLING_RATE è la frazione delle richieste di previsione in arrivo che vuoi registrare. Ad esempio, 0.5. Se non specificato, Model Monitoring registra tutte le richieste di previsione.

  • (Facoltativo) MONITORING_FREQUENCY è la frequenza con cui vuoi eseguire il job di monitoraggio sugli input registrati di recente. La granularità minima è 1 ora. Il valore predefinito è 24 ore. Ad esempio, 2.

  • (obbligatorio solo per il rilevamento dei disallineamenti) TARGET_FIELD è il campo previsto dal modello. Questo campo è escluso dall'analisi di monitoraggio. Ad esempio, housing-price.

  • (obbligatorio solo per il rilevamento dell'asimmetria) BIGQUERY_URI è il link al set di dati di addestramento archiviato in BigQuery, utilizzando il seguente formato:

    bq://\PROJECT.\DATASET.\TABLE
    

    Ad esempio, bq://\my-project.\housing-data.\san-francisco.

    Puoi sostituire il flag bigquery-uri con link alternativi al set di dati di addestramento:

    • Per un file CSV archiviato in un bucket Cloud Storage, utilizza --data-format=csv --gcs-uris=gs://BUCKET_NAME/OBJECT_NAME.

    • Per un file TFRecord archiviato in un bucket Cloud Storage, utilizza --data-format=tf-record --gcs-uris=gs://BUCKET_NAME/OBJECT_NAME.

    • Per un [set di dati gestito da AutoML tabulare][dataset-id], utilizza --dataset=DATASET_ID.

Per informazioni sul flusso di lavoro completo dall'inizio alla fine dell'API Model Monitoring, consulta il notebook di esempio.

  1. Se non l'hai ancora fatto, esegui il deployment del modello in un endpoint.

  2. Recupera l'ID modello di cui è stato eseguito il deployment ottenendo le informazioni sull'endpoint. Prendi nota di DEPLOYED_MODEL_ID, che è il valore deployedModels.id nella risposta.

  3. Crea una richiesta di job di monitoraggio del modello. Le istruzioni riportate di seguito mostrano come creare un job di monitoraggio di base per il rilevamento della deriva con le attribuzioni. Per il rilevamento delle distorsioni, aggiungi l'oggetto explanationBaseline al campo explanationConfig nel corpo JSON della richiesta e fornisci uno dei seguenti valori:

    Per ulteriori dettagli, consulta il riferimento al job di monitoraggio.

    Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

    • PROJECT_ID: è l'ID del tuo Google Cloud progetto. Ad esempio my-project.
    • LOCATION: è la posizione del job di monitoraggio. Ad esempio, us-central1.
    • MONITORING_JOB_NAME: il nome del tuo job di monitoraggio. Ad esempio my-job.
    • PROJECT_NUMBER: è il numero del tuo Google Cloud progetto. Ad esempio 1234567890.
    • ENDPOINT_ID è l'ID dell'endpoint in cui è stato eseguito il deployment del modello. Ad esempio 1234567890.
    • DEPLOYED_MODEL_ID: è l'ID del modello di cui è stato eseguito il deployment.
    • FEATURE:VALUE è la soglia di avviso per ogni funzionalità da monitorare. Ad esempio: "housing-latitude": {"value": 0.4}. Viene registrato un avviso quando la distanza statistica tra la distribuzione delle caratteristiche di input e la base di riferimento corrispondente supera la soglia specificata. Per impostazione predefinita, tutte le funzionalità categoriche e numeriche vengono monitorate con valori di soglia pari a 0, 3.
    • EMAIL_ADDRESS: è l'indirizzo email su cui vuoi ricevere gli avvisi da Monitoraggio dei modelli. Ad esempio, example@example.com.
    • NOTIFICATION_CHANNELS: un elenco di canali di notifica di Cloud Monitoring in cui vuoi ricevere avvisi da Model Monitoring. Utilizza i nomi delle risorse per i canali di notifica, che puoi recuperare elencando i canali di notifica nel tuo progetto. Ad esempio: "projects/my-project/notificationChannels/1355376463305411567", "projects/my-project/notificationChannels/1355376463305411568".

    Corpo JSON della richiesta:

    {
      "displayName":"MONITORING_JOB_NAME",
      "endpoint":"projects/PROJECT_NUMBER/locations/LOCATION/endpoints/ENDPOINT_ID",
      "modelDeploymentMonitoringObjectiveConfigs": {
         "deployedModelId": "DEPLOYED_MODEL_ID",
         "objectiveConfig":  {
            "predictionDriftDetectionConfig": {
                "driftThresholds": {
                  "FEATURE_1": {
                    "value": VALUE_1
                   },
                  "FEATURE_2": {
                    "value": VALUE_2
                   }
                }
             },
            "explanationConfig": {
                "enableFeatureAttributes": true
            }
          }
      },
      "loggingSamplingStrategy": {
         "randomSampleConfig":  {
            "sampleRate":  0.5,
         },
      },
      "modelDeploymentMonitoringScheduleConfig": {
         "monitorInterval": {
            "seconds": 3600,
         },
      },
      "modelMonitoringAlertConfig": {
         "emailAlertConfig": {
            "userEmails": ["EMAIL_ADDRESS"],
         },
         "notificationChannels": [NOTIFICATION_CHANNELS]
      }
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:

    cat > request.json << 'EOF'
    {
      "displayName":"MONITORING_JOB_NAME",
      "endpoint":"projects/PROJECT_NUMBER/locations/LOCATION/endpoints/ENDPOINT_ID",
      "modelDeploymentMonitoringObjectiveConfigs": {
         "deployedModelId": "DEPLOYED_MODEL_ID",
         "objectiveConfig":  {
            "predictionDriftDetectionConfig": {
                "driftThresholds": {
                  "FEATURE_1": {
                    "value": VALUE_1
                   },
                  "FEATURE_2": {
                    "value": VALUE_2
                   }
                }
             },
            "explanationConfig": {
                "enableFeatureAttributes": true
            }
          }
      },
      "loggingSamplingStrategy": {
         "randomSampleConfig":  {
            "sampleRate":  0.5,
         },
      },
      "modelDeploymentMonitoringScheduleConfig": {
         "monitorInterval": {
            "seconds": 3600,
         },
      },
      "modelMonitoringAlertConfig": {
         "emailAlertConfig": {
            "userEmails": ["EMAIL_ADDRESS"],
         },
         "notificationChannels": [NOTIFICATION_CHANNELS]
      }
    }
    EOF

    Quindi, esegui il seguente comando per inviare la richiesta REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/modelDeploymentMonitoringJobs"

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:

    @'
    {
      "displayName":"MONITORING_JOB_NAME",
      "endpoint":"projects/PROJECT_NUMBER/locations/LOCATION/endpoints/ENDPOINT_ID",
      "modelDeploymentMonitoringObjectiveConfigs": {
         "deployedModelId": "DEPLOYED_MODEL_ID",
         "objectiveConfig":  {
            "predictionDriftDetectionConfig": {
                "driftThresholds": {
                  "FEATURE_1": {
                    "value": VALUE_1
                   },
                  "FEATURE_2": {
                    "value": VALUE_2
                   }
                }
             },
            "explanationConfig": {
                "enableFeatureAttributes": true
            }
          }
      },
      "loggingSamplingStrategy": {
         "randomSampleConfig":  {
            "sampleRate":  0.5,
         },
      },
      "modelDeploymentMonitoringScheduleConfig": {
         "monitorInterval": {
            "seconds": 3600,
         },
      },
      "modelMonitoringAlertConfig": {
         "emailAlertConfig": {
            "userEmails": ["EMAIL_ADDRESS"],
         },
         "notificationChannels": [NOTIFICATION_CHANNELS]
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Quindi, esegui il seguente comando per inviare la richiesta REST:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/modelDeploymentMonitoringJobs" | Select-Object -Expand Content

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION/modelDeploymentMonitoringJobs/MONITORING_JOB_NUMBER",
      ...
      "state": "JOB_STATE_PENDING",
      "scheduleState": "OFFLINE",
      ...
      "bigqueryTables": [
        {
          "logSource": "SERVING",
          "logType": "PREDICT",
          "bigqueryTablePath": "bq://PROJECT_ID.model_deployment_monitoring_8451189418714202112.serving_predict"
        }
      ],
      ...
    }
    

Una volta creato il job di monitoraggio, Model Monitoring registra le richieste di previsione in arrivo in una tabella BigQuery generata denominata PROJECT_ID.model_deployment_monitoring_ENDPOINT_ID.serving_predict. Se il logging delle richieste e delle risposte è abilitato, monitoring dei modelli registra le richieste in arrivo nella stessa tabella BigQuery utilizzata per il logging delle richieste e delle risposte.

Consulta Utilizzare il monitoraggio del modello per istruzioni su come svolgere le seguenti attività facoltative:

  • Aggiorna un job di monitoraggio del modello.

  • Configura gli avvisi per il job di monitoraggio del modello

  • Configura gli avvisi per le anomalie.

Analizzare i dati su disallineamento e deviazione delle attribuzioni delle caratteristiche

Puoi utilizzare la console Google Cloud per visualizzare le attribuzioni delle funzionalità di ogni funzionalità monitorata e scoprire quali modifiche hanno causato uno scostamento o una deriva. Per informazioni sull'analisi dei dati relativi alla distribuzione delle funzionalità, consulta Analizzare i dati su disallineamento e deviazione.

Scorecard che mostra un esempio di attribuzione delle caratteristiche dei dati di previsione e di attribuzione delle caratteristiche dei dati di addestramento per il rilevamento del disallineamento.

In un sistema di machine learning stabile, l'importanza relativa delle funzionalità rimane in genere relativamente invariata nel tempo. Se l'importanza di una funzionalità diminuisce, potrebbe indicare che qualcosa in merito è cambiato. Le cause comuni di uno slittamento o uno scostamento dell'importanza delle funzionalità includono:

  • Modifiche all'origine dati.
  • Modifiche allo schema dei dati e al logging.
  • Modifiche al comportamento o alla combinazione di utenti finali (ad esempio a causa di variazioni stagionali o eventi outlier).
  • Modifiche a monte delle funzionalità generate da un altro modello di machine learning. Ecco alcuni esempi:
    • Aggiornamenti del modello che causano un aumento o una diminuzione della copertura (complessiva o per un singolo valore di classificazione).
    • Una variazione del rendimento del modello (che cambia il significato della funzionalità).
    • Aggiornamenti alla pipeline di dati, che possono causare una diminuzione della copertura complessiva.

Inoltre, tieni presente quanto segue quando analizzi i dati di disallineamento e deviazione nell'attribuzione delle caratteristiche:

  • Monitora le funzionalità più importanti. Una variazione significativa dell'attribuzione a una caratteristica indica che il contributo della caratteristica alla previsione è cambiato. Poiché il punteggio di previsione è uguale alla somma dei contributi delle funzionalità, un'elevata deriva dell'attribuzione delle funzionalità più importanti indica in genere una deriva elevata nelle previsioni del modello.

  • Monitora tutte le rappresentazioni delle funzionalità. Le attribuzioni delle funzionalità sono sempre numeriche, indipendentemente dal tipo di funzionalità sottostante. A causa della loro natura additiva, le attribuzioni a una funzionalità multi-dimensionale come gli incorporamenti possono essere ridotte a un singolo valore numerico sommando le attribuzioni nelle varie dimensioni. In questo modo puoi utilizzare metodi di rilevamento della deriva univariata standard per tutti i tipi di funzionalità.

  • Tieni conto delle interazioni tra le funzionalità. L'attribuzione a una funzionalità tiene conto del contributo della funzionalità alla previsione, sia singolarmente sia per le sue interazioni con altre funzionalità. Se le interazioni di una funzionalità con altre funzionalità cambiano, le distribuzioni delle attribuzioni a una funzionalità cambiano, anche se la distribuzione marginale della funzionalità rimane invariata.

  • Monitora i gruppi di funzionalità. Poiché le attribuzioni sono additive, puoi sommare le attribuzioni alle funzionalità correlate per ottenere l'attribuzione di un gruppo di funzionalità. Ad esempio, in un modello di prestito di credito, combina l'attribuzione a tutte le funzionalità correlate al tipo di prestito (ad es. "grado", "sub_grado", "scopo") per ottenere un'unica attribuzione del prestito. Questo tipo di attribuzione a livello di gruppo può essere monitorata per rilevare eventuali modifiche nel gruppo di funzionalità.

Passaggi successivi