Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Validación de datos de TensorFlow: comprobación y análisis de sus datos

Una vez que sus datos están en una tubería TFX, puede usar componentes TFX para analizarlos y transformarlos. Puede usar estas herramientas incluso antes de entrenar a un modelo.

Hay muchas razones para analizar y transformar sus datos:

  • Para encontrar problemas en sus datos. Los problemas comunes incluyen:
    • Datos faltantes, como entidades con valores vacíos.
    • Etiquetas tratadas como características, para que su modelo pueda ver la respuesta correcta durante el entrenamiento.
    • Características con valores fuera del rango que espera.
    • Anomalías de datos.
  • Para diseñar conjuntos de características más efectivos. Por ejemplo, puede identificar:
    • Características especialmente informativas.
    • Características redundantes.
    • Características que varían tanto en escala que pueden retrasar el aprendizaje.
    • Características con poca o ninguna información predictiva única.

Las herramientas TFX pueden ayudar a encontrar errores de datos y ayudar con la ingeniería de características.

Validación de datos de TensorFlow

Visión general

La validación de datos de TensorFlow identifica anomalías en el entrenamiento y el servicio de datos, y puede crear automáticamente un esquema al examinar los datos. El componente se puede configurar para detectar diferentes clases de anomalías en los datos. Puede

  1. Realice comprobaciones de validez comparando estadísticas de datos con un esquema que codifique las expectativas del usuario.
  2. Detecte el sesgo del servicio de entrenamiento comparando ejemplos en datos de entrenamiento y servicio.
  3. Detecte la deriva de datos mirando una serie de datos.

Documentamos cada una de estas funcionalidades de forma independiente:

Ejemplo de validación basada en esquemas

La validación de datos de TensorFlow identifica cualquier anomalía en los datos de entrada al comparar estadísticas de datos con un esquema. El esquema codifica las propiedades que se espera que satisfagan los datos de entrada, como los tipos de datos o los valores categóricos, y el usuario puede modificarlos o reemplazarlos.

Características avanzadas del esquema

Esta sección cubre una configuración de esquema más avanzada que puede ayudar con configuraciones especiales.

Características dispersas

La codificación de características dispersas en los ejemplos generalmente presenta múltiples características que se espera que tengan la misma valencia para todos los ejemplos. Por ejemplo, la característica dispersa:

 
WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
 
se codificaría utilizando características separadas para el índice y el valor:
 
WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
 
con la restricción de que la valencia de la característica de índice y valor debe coincidir con todos los ejemplos. Esta restricción se puede hacer explícita en el esquema definiendo una sparse_feature:
 
sparse_feature {
  name: 'WeightedCategories'
  index_feature { name: 'WeightedCategoriesIndex' }
  value_feature { name: 'WeightedCategoriesValue' }
}
 

La definición de característica dispersa requiere una o más características de índice y una de valor que se refieren a características que existen en el esquema. La definición explícita de características dispersas permite que TFDV verifique que las valencias de todas las características referidas coincidan.

Algunos casos de uso introducen restricciones de valencia similares entre características, pero no necesariamente codifican una característica dispersa. El uso de la función dispersa debería desbloquearlo, pero no es lo ideal.

Entornos de esquema

Por defecto, las validaciones suponen que todos los ejemplos en una tubería se adhieren a un solo esquema. En algunos casos es necesario introducir ligeras variaciones de esquema, por ejemplo, las características utilizadas como etiquetas son necesarias durante el entrenamiento (y deben validarse), pero faltan durante el servicio. Los entornos se pueden usar para expresar tales requisitos, en particular default_environment() , in_environment() , not_in_environment() .

Por ejemplo, suponga que se requiere una función llamada 'LABEL' para la capacitación, pero se espera que falte en la publicación. Esto se puede expresar por:

  • Defina dos entornos distintos en el esquema: ["SERVIR", "ENTRENAMIENTO"] y asocie 'ETIQUETA' solo con el entorno "ENTRENAMIENTO".
  • Asociar los datos de entrenamiento con el entorno "TRAINING" y los datos de servicio con el entorno "SERVING".
Generación de esquemas

El esquema de datos de entrada se especifica como una instancia del esquema TensorFlow.

En lugar de construir un esquema manualmente desde cero, un desarrollador puede confiar en la construcción del esquema automático de Validación de Datos de TensorFlow. Específicamente, la validación de datos TensorFlow construye automáticamente un esquema inicial basado en estadísticas calculadas sobre los datos de entrenamiento disponibles en la tubería. Los usuarios pueden simplemente revisar este esquema autogenerado, modificarlo según sea necesario, incorporarlo a un sistema de control de versiones y empujarlo explícitamente a la tubería para una validación adicional.

TFDV incluye infer_schema() para generar un esquema automáticamente. Por ejemplo:

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

Esto desencadena una generación automática de esquemas basada en las siguientes reglas:

  • Si un esquema ya se ha generado automáticamente, se usa tal cual.

  • De lo contrario, Validación de datos TensorFlow examina las estadísticas de datos disponibles y calcula un esquema adecuado para los datos.

Nota: El esquema generado automáticamente es el mejor esfuerzo y solo intenta inferir propiedades básicas de los datos. Se espera que los usuarios lo revisen y lo modifiquen según sea necesario.

Detección de sesgo de entrenamiento

Visión general

El detector de sesgo de servicio de entrenamiento se ejecuta como un subcomponente de Validación de datos de TensorFlow y detecta el sesgo entre datos de entrenamiento y servicio.

Tipos de sesgo

Basado en varios post-portems de producción, hemos reducido los diversos tipos de sesgo a cuatro categorías clave. A continuación, analizamos cada una de estas categorías y brindamos ejemplos de escenarios en los que ocurren.

  1. La inclinación del esquema ocurre cuando los datos de entrenamiento y servicio no se ajustan al mismo esquema. Como el esquema describe las propiedades lógicas de los datos, se espera que la capacitación y el servicio de datos se adhieran al mismo esquema. Cualquier desviación esperada entre los dos (como que la característica de etiqueta solo esté presente en los datos de entrenamiento pero no en el servicio) debe especificarse a través del campo de entornos en el esquema.

    Dado que la generación de datos de entrenamiento es un paso de procesamiento de datos masivo, mientras que la generación de datos de servicio (en línea) suele ser un paso sensible a la latencia, es común tener diferentes rutas de código que generan datos de entrenamiento y servicio. Esto es un error. Cualquier discrepancia entre estas dos rutas de código (ya sea debido a un error del desarrollador o versiones binarias inconsistentes) puede conducir a un sesgo del esquema.

    Escenario de ejemplo

    Bob quiere agregar una nueva característica al modelo y lo agrega a los datos de entrenamiento. Las métricas de entrenamiento fuera de línea se ven geniales, pero las métricas en línea son mucho peores. Después de horas de depuración, Bob se da cuenta de que olvidó agregar la misma función en la ruta del código de publicación. El modelo le dio una gran importancia a esta nueva característica y, dado que no estaba disponible en el momento de la publicación, generó predicciones deficientes que condujeron a peores métricas en línea.

  2. La inclinación de la característica se produce cuando los valores de la característica en los que se entrena un modelo son diferentes de los valores de la característica que ve en el momento de la publicación. Esto puede suceder debido a múltiples razones, que incluyen:

    • Si una fuente de datos externa que proporciona algunos valores de características se modifica entre la capacitación y el tiempo de servicio.

    • Lógica inconsistente para generar características entre entrenamiento y servicio. Por ejemplo, si aplica alguna transformación solo en una de las dos rutas de código.

    Escenario de ejemplo

    Alice tiene una tubería continua de aprendizaje automático donde los datos de servicio para hoy se registran y se utilizan para generar los datos de entrenamiento del día siguiente. Para ahorrar espacio, decide registrar solo la identificación del video en el momento de la publicación y buscar las propiedades del video de un almacén de datos durante la generación de datos de entrenamiento.

    Al hacerlo, inadvertidamente introduce un sesgo que es específicamente peligroso para los videos virales recién subidos cuyo tiempo de visualización puede cambiar sustancialmente entre el tiempo de servicio y el de entrenamiento (como se muestra a continuación).

     
     Serving Example           Training Example
     -------------------------  -------------------------
     features {                 features {
       feature {                  feature {
         key "vid"                  key "vid"
         value { int64_list {       value { int64_list {
           value 92392               value 92392
         } }                         } }
       }                          }
       feature {                  feature {
         key "views"               key "views"
         value { int_list {       value { bytes_list {
           value " 10 "                value " 10000 "  # skew
         } }                         } }
       }                          }
     }                          }
     

    Esta es una instancia de sesgo de funciones ya que los datos de entrenamiento ven un número inflado de vistas.

  3. El sesgo de distribución ocurre cuando la distribución de los valores de características para los datos de entrenamiento es significativamente diferente de los datos de publicación. Una de las causas clave para el sesgo de distribución es usar un corpus completamente diferente para entrenar la generación de datos para superar la falta de datos iniciales en el corpus deseado. Otra razón es un mecanismo de muestreo defectuoso que solo elige una submuestra de los datos de servicio para entrenar.

    Escenario de ejemplo

    Por ejemplo, para compensar una porción de datos subrepresentada, si se usa un muestreo sesgado sin sobrecargar los ejemplos con muestras disminuidas de manera apropiada, la distribución de los valores de las características entre los datos de entrenamiento y de servicio se desvían de manera radical.

  4. Puntuación / Servicio La inclinación es más difícil de detectar y ocurre cuando solo se sirve un subconjunto de los ejemplos calificados. Como las etiquetas solo están disponibles para los ejemplos servidos y no para los ejemplos calificados, solo estos ejemplos se utilizan para la capacitación. Esto implícitamente hace que el modelo haga una predicción errónea de los ejemplos calificados, ya que están poco representados en los datos de entrenamiento.

    Escenario de ejemplo

    Considere un sistema de anuncios que sirve los 10 principales anuncios. De estos 10 anuncios, el usuario solo puede hacer clic en uno de ellos. Los 10 ejemplos servidos se utilizan para el entrenamiento de los próximos días: 1 positivo y 9 negativos. Sin embargo, en el momento de la publicación, el modelo entrenado se utilizó para puntuar cientos de anuncios. Los otros 90 anuncios que nunca se publicaron se eliminan implícitamente de los datos de capacitación. Esto da como resultado un bucle de retroalimentación implícito que predice mal las cosas de menor rango, ya que no se ven en los datos de entrenamiento.

¿Por qué te debe importar?

La inclinación es difícil de detectar y prevalece en muchas tuberías de ML. Ha habido varios incidentes en los que esto ha causado degradaciones del rendimiento y pérdida de ingresos.

¿Qué se admite actualmente?

Actualmente, la validación de datos TensorFlow admite la inclinación del esquema, la inclinación de la función y la detección de la distribución.

Detección de deriva

La detección de deriva es compatible con características categóricas y entre tramos de datos consecutivos (es decir, entre el intervalo N y el intervalo N + 1), como entre diferentes días de datos de entrenamiento. Expresamos la deriva en términos de distancia L-infinito , y puede establecer la distancia umbral para que reciba advertencias cuando la deriva es mayor de lo aceptable. Establecer la distancia correcta suele ser un proceso iterativo que requiere conocimiento del dominio y experimentación.

Uso de visualizaciones para verificar sus datos

La validación de datos TensorFlow proporciona herramientas para visualizar la distribución de valores de características. Al examinar estas distribuciones en un cuaderno Jupyter usando Facetas , puede detectar problemas comunes con los datos.

Estadísticas de funciones

Identificar distribuciones sospechosas

Puede identificar errores comunes en sus datos mediante el uso de una pantalla de Descripción general de facetas para buscar distribuciones sospechosas de valores de características.

Datos no balanceados

Una característica desequilibrada es una característica para la que predomina un valor. Las características desequilibradas pueden ocurrir naturalmente, pero si una característica siempre tiene el mismo valor, puede tener un error de datos. Para detectar características desequilibradas en una Descripción general de facetas, elija "No uniformidad" en el menú desplegable "Ordenar por".

Las características más desequilibradas se enumerarán en la parte superior de cada lista de tipos de características. Por ejemplo, la siguiente captura de pantalla muestra una característica que es todos ceros, y una segunda que está altamente desequilibrada, en la parte superior de la lista "Características numéricas":

Visualización de datos no balanceados.

Datos distribuidos uniformemente

Una característica distribuida uniformemente es aquella para la cual todos los valores posibles aparecen con una frecuencia cercana a la misma. Al igual que con los datos no balanceados, esta distribución puede ocurrir naturalmente, pero también puede ser producida por errores de datos.

Para detectar características distribuidas uniformemente en una Descripción general de facetas, elija "No uniformidad" en el menú desplegable "Ordenar por" y marque la casilla de verificación "Orden inverso":

Histograma de datos uniformes.

Los datos de cadena se representan mediante gráficos de barras si hay 20 valores únicos o menos, y como un gráfico de distribución acumulativo si hay más de 20 valores únicos. Entonces, para los datos de cadena, las distribuciones uniformes pueden aparecer como gráficos de barras planas como el de arriba o líneas rectas como el de abajo:

Gráfico lineal: distribución acumulativa de datos uniformes.

Errores que pueden producir datos distribuidos uniformemente

Aquí hay algunos errores comunes que pueden producir datos distribuidos uniformemente:

  • Usar cadenas para representar tipos de datos sin cadenas, como las fechas. Por ejemplo, tendrá muchos valores únicos para una característica de fecha y hora con representaciones como "2017-03-01-11-45-03". Los valores únicos se distribuirán de manera uniforme.

  • Incluyendo índices como "número de fila" como características. Aquí nuevamente tienes muchos valores únicos.

Datos perdidos

Para verificar si a una característica le faltan valores por completo:

  1. Elija "Cantidad faltante / cero" en el menú desplegable "Ordenar por".
  2. Marque la casilla de verificación "Orden inverso".
  3. Mire la columna "faltante" para ver el porcentaje de instancias con valores faltantes para una característica.

Un error de datos también puede causar valores de características incompletos. Por ejemplo, puede esperar que la lista de valores de una característica siempre tenga tres elementos y descubra que a veces solo tiene uno. Para verificar valores incompletos u otros casos en los que las listas de valores de características no tienen el número esperado de elementos:

  1. Elija "Longitud de la lista de valores" en el menú desplegable "Gráfico para mostrar" a la derecha.

  2. Mire el gráfico a la derecha de cada fila de características. El gráfico muestra el rango de longitudes de la lista de valores para la característica. Por ejemplo, la fila resaltada en la captura de pantalla siguiente muestra una función que tiene algunas listas de valores de longitud cero:

Pantalla de descripción general de facetas con función con listas de valores de función de longitud cero

Grandes diferencias en la escala entre características

Si sus características varían ampliamente en escala, entonces el modelo puede tener dificultades para aprender. Por ejemplo, si algunas características varían de 0 a 1 y otras varían de 0 a 1,000,000,000, tiene una gran diferencia de escala. Compare las columnas "max" y "min" entre las características para encontrar escalas muy variables.

Considere normalizar los valores de las características para reducir estas amplias variaciones.

Etiquetas con etiquetas inválidas

Los estimadores de TensorFlow tienen restricciones sobre el tipo de datos que aceptan como etiquetas. Por ejemplo, los clasificadores binarios generalmente solo funcionan con etiquetas {0, 1}.

Revise los valores de las etiquetas en la Descripción general de las facetas y asegúrese de que cumplan con los requisitos de los Estimadores .