Analiza sesgos de entrenamiento-entrega con TensorFlow Data Validation

Este documento es la tercero de una serie que muestra cómo supervisar los modelos de aprendizaje automático (AA) que se implementan en AI Platform Prediction para la detección de sesgos de datos. Esta guía se centra en los conceptos y métodos de implementación para detectar sesgos de datos de entrenamiento-entrega mediante TensorFlow Data Validation (TFDV).

Esta guía está diseñada para ingenieros del AA y científicos de datos que deseen supervisar cómo se entregan los datos en el tiempo, y que deseen identificar sesgos y anomalías de datos. Se supone que tienes experiencia con Google Cloud, con BigQuery y con notebooks de Jupyter.

La serie consiste en las siguientes guías:

El código para el proceso descrito en este documento se incorpora a los notebooks de Jupyter. Los notebooks están en un repositorio de GitHub.

Comprende el desvío de datos y el desvío de conceptos

Supervisar el rendimiento predictivo de un modelo de AA en la producción surgió como un área fundamental de MLOps. A continuación, se detallan dos causas comunes de disminución en el rendimiento predictivo de un modelo:

  • Hay un sesgo entre los datos de entrenamiento y los de entrega. Este problema se conoce como desvío de datos.
  • La interpretación de la relación entre los predictores de entrada y el atributo objetivo evoluciona. Este problema se conoce como desvío de conceptos.

En el desvío de datos, los datos de producción que reciben un modelo para la puntuación divergen del conjunto de datos que se usó para entrenar, ajustar y evaluar el modelo. Por lo general, las discrepancias entre los datos de entrenamiento y los datos de entrega se pueden clasificar como sesgos de esquema o sesgos de distribución:

  • Ocurre un sesgo de esquemacuando los datos de entrenamiento y los datos de entrega no se ajustan al mismo esquema. El sesgo de esquema suele deberse a fallas o cambios en el proceso ascendente que generan los datos de entrega. Las desviaciones de esquema entre datos de entrenamiento y de entrega pueden incluir lo siguiente:

    • Funciones incoherentes: por ejemplo, se agrega un nuevo atributo a los datos de entrega.
    • Tipos de atributos incoherentes: por ejemplo, un atributo numérico que era un número entero en los datos de entrenamiento es un número real en la entrega de datos.
    • Dominios de atributos incoherentes: por ejemplo, un valor en un atributo categórico desaparece o se produce un cambio en el rango de atributos numéricos.
  • Ocurre un sesgo de distribución cuando la distribución de los valores de atributos para los datos de entrenamiento es muy diferente de la entrega de datos. Este sesgo puede ser el resultado de elegir el conjunto de datos de entrenamiento incorrecto para representar datos del mundo real. Este sesgo también puede ocurrir de forma natural a medida que surjan tendencias y patrones nuevos en los datos debido a los cambios en la dinámica del entorno. Entre los ejemplos se incluyen cambios en los precios de bienes raíces o un cambio en la popularidad de los artículos de moda.

El desvío de conceptos significa que cambió tu interpretación de los datos. A menudo, el desvío de conceptos implica que la asignación de los atributos de entrada a las etiquetas que se usan durante el entrenamiento ya no es válida, o que apareció una clase nueva o un rango de valores de etiquetas. El desvío de conceptos suele ser el resultado de un cambio en el proceso que intentas modelar. También puede ser una evolución de tu conocimiento de este proceso.

Este documento se centra en la situación de desvío de datos, específicamente en la detección de sesgos de esquemas y de sesgos de la distribución de atributos entre los datos de entrenamiento y los de entrega.

Descripción general de la arquitectura

En el siguiente diagrama, se muestra el entorno que se describe en este documento.

Arquitectura del flujo que se crea en esta serie de instructivos.

En esta arquitectura, el registro de solicitud-respuesta de AI Platform Prediction registra una muestra de las solicitudes en línea en una tabla de BigQuery. Luego, puedes analizar estos datos, calcular estadísticas descriptivas y visualizar el sesgo y el desvío de datos mediante Vertex AI Workbench, notebooks administrados por el usuario y TFDV.

Captura datos de entrega

En un documento anterior de esta serie, Registra las solicitudes de entrega mediante AI Platform Prediction, se muestra cómo usar AI Platform Prediction para implementar un modelo de Keras para la predicción en línea También se muestra cómo habilitar el registro de solicitud-respuesta, que registra una muestra de solicitudes de predicción en línea y sus respuestas en una tabla de BigQuery.

Las instancias de solicitud y predicciones de respuesta registradas se almacenan en formato sin procesar. En el documento anterior de esta serie, se muestra cómo puedes analizar estos registros sin procesar y crear una vista estructurada para analizar los atributos de entrada y las predicciones de salida. En ese documento, también se describe cómo usar Google Data Studio para visualizar cómo algunos valores de atributos cambian con el tiempo. La visualización también te ayuda a detectar algunos valores atípicos en los datos que podrían causar sesgos de predicción.

Detecta sesgos en la entrega de datos

Puede ser difícil identificar de forma manual los posibles sesgos y anomalías en los datos con solo observar la visualización. Es especialmente difícil si tienes una gran cantidad de atributos de entrada. Por lo tanto, necesitas un enfoque escalable y automatizado en la producción para destacar de forma proactiva posibles problemas en los datos de entrega.

En este documento, se describe cómo usar TFDV para detectar, analizar y visualizar sesgos de datos. TFDV ayuda a analizar los registros de datos de entrega con el esquema esperado y con las estadísticas generadas a partir de los datos de entrenamiento para identificar anomalías y detectar sesgos entre el entrenamiento y la entrega. Como se muestra en el diagrama de arquitectura anterior, debes usar notebooks administrados por el usuario para usar herramientas de TFDV de forma interactiva.

Usa TFDV para detectar sesgos de entrenamiento-entrega

En el siguiente diagrama, se ilustra el flujo de trabajo para usar el TFDV a fin de detectar y analizar sesgos en los registros de entrega de solicitud-respuesta en BigQuery.

Flujo de trabajo para detectar sesgos de entrenamiento-entrega.

El flujo de trabajo consta de las siguientes fases:

  1. Generar estadísticas de referencia y un esquema de referencia a partir de los datos de entrenamiento. Luego, puedes usar las estadísticas de referencia y el esquema de referencia para validar los datos de entrega.
  2. Detectar sesgos de datos de entrega. Este proceso produce estadísticas de datos de entrega y, además, identifica cualquier anomalía que se detecte cuando se validen los datos de entrega según el esquema de referencia.
  3. Analiza y visualiza el resultado de la validación. Luego, las anomalías generadas se visualizan y analizan, y las estadísticas se visualizan para mostrar los sesgos de distribución.

Objetivos

  • Genera estadísticas del modelo de referencia y un esquema de referencia
  • Detectar sesgos de entrega.
  • Analizar y visualizar los resultados de validación.

Costos

En este instructivo, se usan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Antes de comenzar

Antes de comenzar, debes completar la parte uno y la parte dos de esta serie.

Después de completar estas partes, tendrás los siguientes elementos:

  • Una instancia de notebooks administrados por el usuario que usa TensorFlow 2.3.
  • Un clon del repositorio de GitHub que tiene el notebook de Jupyter que necesitas para esta guía.
  • Una tabla de BigQuery que contiene registros de solicitud-respuesta y una vista que analiza los datos de solicitud sin procesar y de respuesta.

El notebook de Jupyter para esta situación

Un proceso de extremo a extremo para este flujo de trabajo se codifica en un notebook de Jupyter en el repositorio de GitHub asociado con este documento. Los pasos del notebook se basan en el conjunto de datos Covertype de UCI Machine Learning Repository, que es el mismo conjunto de datos que se usó para datos de muestra en los documentos anteriores de esta serie.

Establece la configuración del notebook

En esta sección, prepararás el entorno de Python y establecerás las variables que necesitas para ejecutar el código de la situación.

  1. Si aún no tienes abierta la instancia de notebooks administrados por el usuario de la primera parte, haz lo siguiente:

    1. En Console, ve a la página Notebooks.

      Ir a Notebooks

    2. En la pestaña Notebooks administrados por el usuario, selecciona el notebook y, luego, haz clic en Abrir Jupyterlab. El entorno de JupyterLab se abrirá en tu navegador.

    3. En el navegador de archivos, abre el archivo mlops-on-gcp y navega hasta el directorio skew-detection.

  2. Abre el notebook 03-covertype-drift-detection_tfdv.ipynb.

  3. En el notebook, en Configuración, ejecuta la celda Instalar paquetes y dependencias para instalar los paquetes de Python necesarios y configurar las variables de entorno.

  4. En Establece la configuración del entorno de Google Cloud, establece las siguientes variables:

    • PROJECT_ID: El ID del proyecto de Google Cloud en el que se registra el conjunto de datos de BigQuery para los datos de solicitud-respuesta.
    • BUCKET: El nombre del bucket de Cloud Storage en el que se almacenan los artefactos producidos.
    • BQ_DATASET_NAME: El nombre del conjunto de datos de BigQuery en el que se almacenan los registros de solicitud-respuesta.
    • BQ_VIEW_NAME: Es el nombre de la vista de BigQuery que creaste en la segunda parte de la serie.
    • MODEL_NAME: El nombre del modelo que se implementa en AI Platform Prediction.
    • VERSION_NAME: El nombre de la versión del modelo que se implementa en AI Platform Prediction. La versión tiene el formato vN; por ejemplo, v1.
  5. Ejecuta las celdas restantes en Configuración para terminar de configurar el entorno:

    1. Autentica la cuenta de GCP
    2. Importa las bibliotecas
    3. Crea un lugar de trabajo local

Genera estadísticas del modelo de referencia y un esquema de referencia

Ejecuta las tareas de la primera sección del notebook para que los datos de entrenamiento generen estadísticas de referencia y un esquema de referencia. Descarga los datos como archivos CSV y usa el método tfdv.generate_statistics_from_csv para calcular las estadísticas de referencia y colocarlas en la variable baseline_stats. El código usa el método tfdv.infer_schema para inferir el esquema de referencia de los datos de entrenamiento y colocarlo en la variable reference_schema.

Puedes modificar el esquema inferido, como se muestra en el siguiente fragmento de código:

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

Puedes mostrar el esquema de referencia generado con el método tfdv.display_schema. Cuando lo hagas, verás una lista similar a la siguiente:

Lista del esquema generado.

Detecta sesgos de datos de entrega

En la siguiente sección del notebook, ejecutarás tareas para detectar sesgos de datos de entrega. El proceso consta de los siguientes pasos.

  1. Los datos de entrega de solicitud-respuesta se leen desde la vista vw_covertype_classifier_logs_v1 en BigQuery. En la vista, se presentan los valores de los atributos y las predicciones analizados que se registran en la tabla covertype_classifier_logs. La tabla contiene solicitudes de instancias sin procesar y respuestas de predicción del modelo covertype_classifier que se implementó antes en AI Platform Prediction.
  2. Los datos de entrega registrados se guardan en un archivo CSV para que pueda usar el TFDV.
  3. TFDV calcula las estadísticas de entrega del archivo de datos CSV para diferentes porciones de los datos de entrega mediante el método tfdv.experimental_get_feature_value_slicer, como se muestra en el siguiente fragmento de código:

    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 valida cada porción serving_stats según el esquema de referencia (en la variable reference_schema) mediante el método tfdv.validate_statistics. Este proceso genera anomalías, como se muestra en el siguiente fragmento de código:

    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 busca anomalías mediante la comparación de un esquema y el búfer de protocolo de estadísticas. Para obtener información sobre los tipos de anomalías que TFDV puede detectar, consulta la Referencia de anomalías de validación de datos de TensorFlow. Los campos de esquema y estadísticas se usan para detectar todos los tipos de anomalía y las condiciones en las que se detecta cada uno de ellos.

Analiza y visualiza resultados de validación

En la tercera sección del notebook, visualizarás anomalías. El código usa el método tfdv.visualize_statistics para visualizar una porción serving_stats en función de las estadísticas de referencia de los datos de entrenamiento a fin de destacar los sesgos de distribución.

En la siguiente captura de pantalla, se muestra un ejemplo de una visualización para las distribuciones de los atributos numéricos Elevation y Aspect.

Grafos que muestran anomalías para la elevación y el aspecto

En las siguientes capturas de pantalla, se muestran ejemplos de visualizaciones para los atributos categóricos Wildness_Area y Cover_Type. Ten en cuenta que, en la visualización de los atributos categóricos, Cover_Type es el atributo objetivo y que la distribución muestra el sesgo de predicción.

Visualización del área silvestre.

Visualización del tipo de cubierta

Para inspeccionar las anomalías generadas en cada porción serving_stats, puedes llamar al método tfdv.display_anomalies. En la siguiente lista, se muestra un ejemplo de las anomalías detectadas.

Lista de anomalías encontradas mediante el método "display_anomalies".

Además de crear visualizaciones mediante la API de TFDV visualization, puedes usar una biblioteca de trazado de Python para visualizar las estadísticas en el notebook.

En los siguientes grafos, se muestra cómo los valores medios de los atributos numéricos de las estadísticas de entrega se dividieron en las porciones de tiempo y cómo la diferencia se compara con los valores medios de las estadísticas de referencia:

Grafos de los valores de media para la elevación.

Grafos de valores medios de aspecto.

Grafos de valores medidos para pendiente.

En el siguiente grafo, se muestra la distribución de valores del atributo categórico en los desvíos de estadísticas de entrega a través de segmentos de tiempo:

Grafo de barras que muestran la distribución del valor de los atributos a lo largo del tiempo.

Limpia

Si piensas continuar con el resto de esta serie, conserva los recursos que ya creaste. De lo contrario, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

  1. En la consola, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

¿Qué sigue?