Monitorizar el sesgo y la deriva de la atribución de características

En esta página se describe cómo usar Vertex AI Model Monitoring con Vertex Explainable AI para detectar sesgos y desviaciones en las atribuciones de las funciones de entrada categóricas y numéricas.

Descripción general de la monitorización basada en la atribución de características

Las atribuciones de características indican cuánto ha contribuido cada característica de tu modelo a las predicciones de cada instancia. Cuando solicitas predicciones, obtienes los valores predichos que correspondan a tu modelo. Cuando solicitas explicaciones, obtienes las predicciones junto con la información de atribución de las funciones.

Las puntuaciones de atribución son proporcionales a la contribución de la función a la predicción de un modelo. Normalmente, se indican con un signo que muestra si una función ayuda a aumentar o reducir la predicción. Las atribuciones de todas las funciones deben sumar la puntuación de predicción del modelo.

Al monitorizar las atribuciones de las características, Monitorización de modelos registra los cambios en las contribuciones de una característica a las predicciones de un modelo a lo largo del tiempo. Un cambio en la puntuación de atribución de una función clave suele indicar que la función ha cambiado de forma que puede afectar a la precisión de las predicciones del modelo.

Para obtener información sobre cómo se calcula la puntuación de atribución de una función, consulta Métodos de atribución de funciones.

Sesgo de entrenamiento-utilización y deriva de predicción de la atribución de características

Cuando creas una tarea de monitorización para un modelo con Vertex Explainable AI habilitado, Model Monitoring monitoriza el sesgo o la deriva de las distribuciones de características y de las atribuciones de características. Para obtener información sobre el sesgo y la deriva de la distribución de características, consulta la introducción a Vertex AI Model Monitoring.

En el caso de las atribuciones de funciones:

  • La desviación entre el entrenamiento y el servicio se produce cuando la puntuación de atribución de una función en producción se desvía de la puntuación de atribución de la función en los datos de entrenamiento originales.

  • La deriva de la predicción se produce cuando la puntuación de atribución de una función en producción cambia significativamente con el tiempo.

Puedes habilitar la detección de sesgo si proporcionas el conjunto de datos de entrenamiento original de tu modelo. De lo contrario, debes habilitar la detección de deriva. También puedes habilitar la detección de inclinación y de deriva.

Requisitos previos

Para usar Model Monitoring con Vertex Explainable AI, haz lo siguiente:

  1. Si vas a habilitar la detección de sesgos, sube los datos de entrenamiento o el resultado de un trabajo de explicación por lotes de tu conjunto de datos de entrenamiento a Cloud Storage o BigQuery. Obtén el enlace URI a los datos. Para la detección de desviaciones, no se necesitan datos de entrenamiento ni una base de referencia de las explicaciones.

  2. Tener un modelo disponible en Vertex AI que sea de tipo AutoML tabular o entrenamiento personalizado tabular importado:

  3. Configura tu modelo para usar Vertex Explainable AI cuando lo crees, importes o despliegues. El campo ExplanationSpec.ExplanationParameters debe rellenarse en su modelo.

  4. Opcional: En el caso de los modelos con entrenamiento personalizado, sube el esquema de la instancia de análisis de tu modelo a Cloud Storage. Para iniciar el proceso de monitorización y calcular la distribución de referencia para la detección de sesgos, Model Monitoring necesita el esquema. Si no proporcionas el esquema durante la creación del trabajo, este permanecerá en estado pendiente hasta que Monitorización de modelos pueda analizar automáticamente el esquema a partir de las primeras 1000 solicitudes de predicción que reciba el modelo.

Habilitar la detección de inclinación o deriva

Para configurar la detección de sesgos o la detección de desviaciones, cree una tarea de monitorización de la implementación del modelo:

Consola

Para crear una tarea de monitorización de despliegue de modelos con la consolaGoogle Cloud , crea un endpoint:

  1. En la Google Cloud consola, ve a la página Endpoints de Vertex AI.

    Ir a Endpoints

  2. Haz clic en Crear punto de conexión.

  3. En el panel Nuevo endpoint, asigna un nombre al endpoint y define una región.

  4. Haz clic en Continuar.

  5. En el campo Nombre del modelo, selecciona un modelo de entrenamiento personalizado importado o un modelo tabular de AutoML.

  6. En el campo Versión, selecciona una versión para tu modelo.

  7. Haz clic en Continuar.

  8. En el panel Monitorización de modelos, comprueba que la opción Habilitar la monitorización de modelos en este endpoint esté activada. Los ajustes de monitorización que configures se aplicarán a todos los modelos desplegados en el endpoint.

  9. Introduce un nombre visible de la tarea de monitorización.

  10. Introduce la duración de la ventana de monitorización.

  11. En Correos de notificación, introduzca una o varias direcciones de correo separadas por comas para recibir alertas cuando un modelo supere un umbral de alerta.

  12. (Opcional) En Canales de notificación, selecciona los canales de Cloud Monitoring para recibir alertas cuando un modelo supere un umbral de alerta. Puede seleccionar canales de Cloud Monitoring que ya tenga o crear uno haciendo clic en Gestionar canales de notificaciones. La consola admite canales de notificación de PagerDuty, Slack y Pub/Sub.

  13. Introduzca una frecuencia de muestreo.

  14. Opcional: Introduzca el esquema de entrada de la predicción y el esquema de entrada del análisis.

  15. Haz clic en Continuar. Se abre el panel Objetivo de monitorización, con opciones para la detección de sesgo o deriva:

    Detección de inclinación

    1. Selecciona Detección de sesgo entre entrenamiento y servicio.
    2. En Fuente de datos de entrenamiento, proporcione una fuente de datos de entrenamiento.
    3. En Columna de destino, introduzca el nombre de la columna de los datos de entrenamiento que el modelo debe predecir. Este campo se excluye del análisis de monitorización.
    4. Opcional: En Umbrales de alerta, especifica los umbrales en los que se activarán las alertas. Para obtener información sobre cómo dar formato a los umbrales, coloca el puntero sobre el icono de ayuda .
    5. Haz clic en Crear.

    Detección de cambios

    1. Selecciona Detección de deriva de la predicción.
    2. Opcional: En Umbrales de alerta, especifica los umbrales en los que se activarán las alertas. Para obtener información sobre cómo dar formato a los umbrales, coloca el puntero sobre el icono de ayuda .
    3. Haz clic en Crear.

gcloud

Para crear un trabajo de monitorización de despliegue de modelos con la CLI de gcloud, primero despliega tu modelo en un endpoint.

Una configuración de tarea de monitorización se aplica a todos los modelos desplegados en un endpoint.

Ejecuta el 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

donde:

  • PROJECT_ID es el ID de tu Google Cloud proyecto. Por ejemplo, my-project.

  • REGION es la ubicación de tu tarea de monitorización. Por ejemplo, us-central1.

  • MONITORING_JOB_NAME es el nombre de tu trabajo de monitorización. Por ejemplo, my-job.

  • EMAIL_ADDRESS es la dirección de correo a la que quieres recibir alertas de Monitorización de modelos. Por ejemplo, example@example.com.

  • ENDPOINT_ID es el ID del endpoint en el que se ha desplegado tu modelo. Por ejemplo, 1234567890987654321.

  • Opcional: FEATURE_1=THRESHOLD_1 es el umbral de alerta de cada función que quieras monitorizar. Por ejemplo, si especifica Age=0.4, Model Monitoring registra una alerta cuando la [distancia estadística][stat-distance] entre las distribuciones de entrada y de referencia de la función Age supera 0,4.

  • Opcional: SAMPLING_RATE es la fracción de las solicitudes de predicción entrantes que quieres registrar. Por ejemplo, 0.5. Si no se especifica, Model Monitoring registra todas las solicitudes de predicción.

  • Opcional: MONITORING_FREQUENCY es la frecuencia con la que quieres que se ejecute el trabajo de monitorización en las entradas registradas recientemente. La granularidad mínima es de 1 hora. El valor predeterminado es de 24 horas. Por ejemplo, 2.

  • (obligatorio solo para la detección de sesgos) TARGET_FIELD es el campo que predice el modelo. Este campo se excluye del análisis de monitorización. Por ejemplo, housing-price.

  • (obligatorio solo para la detección de sesgos) BIGQUERY_URI es el enlace al conjunto de datos de entrenamiento almacenado en BigQuery, con el siguiente formato:

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

    Por ejemplo, bq://\my-project.\housing-data.\san-francisco.

    Puedes sustituir la marca bigquery-uri por enlaces alternativos a tu conjunto de datos de entrenamiento:

    • Para un archivo CSV almacenado en un segmento de Cloud Storage, usa --data-format=csv --gcs-uris=gs://BUCKET_NAME/OBJECT_NAME.

    • Para un archivo TFRecord almacenado en un segmento de Cloud Storage, usa --data-format=tf-record --gcs-uris=gs://BUCKET_NAME/OBJECT_NAME.

    • Para un [conjunto de datos gestionado de AutoML tabular][dataset-id], usa --dataset=DATASET_ID.

SDK de Python

Para obtener información sobre el flujo de trabajo completo de la API Model Monitoring, consulta el notebook de ejemplo.

API REST

  1. Si aún no lo has hecho, despliega tu modelo en un endpoint.

  2. Para obtener el ID del modelo desplegado, consulta la información del endpoint. Toma nota del DEPLOYED_MODEL_ID, que es el valor de deployedModels.id en la respuesta.

  3. Crea una solicitud de tarea de monitorización de modelos. Las instrucciones que se indican a continuación muestran cómo crear un trabajo de monitorización básico para la detección de desviaciones con atribuciones. Para la detección de sesgos, añade el objeto explanationBaseline al campo explanationConfig del cuerpo JSON de la solicitud y proporciona una de las siguientes opciones:

    Para obtener más información, consulta la referencia de la tarea de monitorización.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: es el ID de tu proyecto de Google Cloud . Por ejemplo, my-project.
    • LOCATION: es la ubicación de tu trabajo de monitorización. Por ejemplo, us-central1.
    • MONITORING_JOB_NAME es el nombre del trabajo de monitorización. Por ejemplo, my-job.
    • PROJECT_NUMBER: es el número de tu proyecto Google Cloud . Por ejemplo, 1234567890.
    • ENDPOINT_ID es el ID del endpoint en el que se ha desplegado tu modelo. Por ejemplo, 1234567890.
    • DEPLOYED_MODEL_ID: es el ID del modelo implementado.
    • FEATURE:VALUE es el umbral de alerta de cada función que quieras monitorizar. Por ejemplo, "housing-latitude": {"value": 0.4}. Se registra una alerta cuando la distancia estadística entre la distribución de las características de entrada y su valor de referencia correspondiente supera el umbral especificado. De forma predeterminada, se monitorizan todas las características categóricas y numéricas con valores de umbral de 0, 3.
    • EMAIL_ADDRESS: es la dirección de correo a la que quieres recibir alertas de Monitorización de modelos. Por ejemplo, example@example.com.
    • NOTIFICATION_CHANNELS: una lista de canales de notificación de Cloud Monitoring en los que quieras recibir alertas de Monitorización de modelos. Usa los nombres de los recursos de los canales de notificaciones, que puedes obtener consultando los canales de notificaciones de tu proyecto. Por ejemplo, "projects/my-project/notificationChannels/1355376463305411567", "projects/my-project/notificationChannels/1355376463305411568".

    Cuerpo JSON de la solicitud:

    {
      "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]
      }
    }
    

    Para enviar tu solicitud, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "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 vez que se crea la tarea de monitorización, Model Monitoring registra las solicitudes de predicción entrantes en una tabla de BigQuery generada llamada PROJECT_ID.model_deployment_monitoring_ENDPOINT_ID.serving_predict. Si el registro de solicitudes y respuestas está habilitado, Model Monitoring registra las solicitudes entrantes en la misma tabla de BigQuery que se usa para el registro de solicitudes y respuestas.

Consulta Usar Monitorización de modelos para obtener instrucciones sobre cómo realizar las siguientes tareas opcionales:

  • Actualiza una tarea de monitorización de modelos.

  • Configurar alertas para la tarea de monitorización del modelo

  • Configurar alertas de anomalías.

Analizar los datos de sesgo y deriva de la atribución de características

Puedes usar la Google Cloud consola para visualizar las atribuciones de características de cada característica monitorizada y saber qué cambios han provocado el sesgo o la deriva. Para obtener información sobre cómo analizar los datos de distribución de funciones, consulta el artículo Analizar datos de sesgo y deriva.

Tarjeta de resultados que muestra un ejemplo de atribución de características de datos de predicción y de atribución de características de datos de entrenamiento para la detección de sesgos.

En un sistema de aprendizaje automático estable, la importancia relativa de las características suele mantenerse relativamente estable a lo largo del tiempo. Si una función importante pierde importancia, puede indicar que algo ha cambiado en ella. Estas son algunas de las causas habituales de la deriva o el sesgo de la importancia de las características:

  • Cambios en la fuente de datos.
  • Cambios en el esquema de datos y en el registro.
  • Cambios en la combinación o el comportamiento de los usuarios finales (por ejemplo, debido a cambios estacionales o eventos atípicos).
  • Cambios en las funciones generadas por otro modelo de aprendizaje automático. Por ejemplo:
    • Actualizaciones del modelo que provocan un aumento o una disminución de la cobertura (en general o para un valor de clasificación concreto).
    • Un cambio en el rendimiento del modelo (que cambia el significado de la característica).
    • Actualizaciones de la canalización de datos, que pueden provocar una disminución de la cobertura general.

Además, tenga en cuenta lo siguiente al analizar los datos de sesgo y deriva de la atribución de características:

  • Monitoriza las funciones más importantes. Un cambio importante en la atribución a una función significa que la contribución de la función a la predicción ha cambiado. Como la puntuación de predicción es igual a la suma de las contribuciones de las características, una gran deriva de atribución de las características más importantes suele indicar una gran deriva en las predicciones del modelo.

  • Monitoriza todas las representaciones de las funciones. Las atribuciones de funciones siempre son numéricas, independientemente del tipo de función subyacente. Debido a su naturaleza aditiva, las atribuciones a una función multidimensional, como las inserciones, se pueden reducir a un único valor numérico sumando las atribuciones de todas las dimensiones. De esta forma, puedes usar métodos estándar de detección de deriva univariante para todos los tipos de características.

  • Ten en cuenta las interacciones entre funciones. La atribución a una característica tiene en cuenta la contribución de la característica a la predicción, tanto de forma individual como por sus interacciones con otras características. Si cambian las interacciones de una función con otras funciones, las distribuciones de las atribuciones a una función también cambian, aunque la distribución marginal de la función siga siendo la misma.

  • Monitoriza grupos de funciones. Como las atribuciones son aditivas, puedes añadir atribuciones a funciones relacionadas para obtener la atribución de un grupo de funciones. Por ejemplo, en un modelo de préstamos, combine la atribución de todas las funciones relacionadas con el tipo de préstamo (por ejemplo, "grado", "sub_grado" y "finalidad") para obtener una única atribución de préstamo. Esta atribución a nivel de grupo se puede monitorizar para detectar cambios en el grupo de funciones.

Siguientes pasos