Rejoignez TensorFlow à Google I/O, du 11 au 12 mai. Inscrivez-vous maintenant

Validation des données TensorFlow : vérifier et analyser vos données

Une fois que vos données sont dans un pipeline TFX, vous pouvez utiliser des composants TFX pour les analyser et les transformer. Vous pouvez utiliser ces outils avant même d'entraîner un modèle.

Il existe de nombreuses raisons pour analyser et transformer vos données :

  • Pour trouver des problèmes dans vos données. Les problèmes courants incluent :
    • Données manquantes, telles que des entités avec des valeurs vides.
    • Des étiquettes traitées comme des caractéristiques, afin que votre modèle puisse voir la bonne réponse pendant l'entraînement.
    • Fonctionnalités avec des valeurs en dehors de la plage que vous attendez.
    • Anomalies des données.
    • Le modèle de transfert appris a un prétraitement qui ne correspond pas aux données d'apprentissage.
  • Pour concevoir des ensembles de fonctionnalités plus efficaces. Par exemple, vous pouvez identifier :
    • Fonctionnalités particulièrement informatives.
    • Fonctionnalités redondantes.
    • Fonctionnalités dont l'échelle varie tellement qu'elles peuvent ralentir l'apprentissage.
    • Fonctionnalités avec peu ou pas d'informations prédictives uniques.

Les outils TFX peuvent à la fois aider à trouver les bogues de données et aider à l'ingénierie des fonctionnalités.

Validation des données TensorFlow

Aperçu

TensorFlow Data Validation identifie les anomalies dans les données d'entraînement et de diffusion, et peut créer automatiquement un schéma en examinant les données. Le composant peut être configuré pour détecter différentes classes d'anomalies dans les données. Ça peut

  1. Effectuez des contrôles de validité en comparant les statistiques des données à un schéma qui codifie les attentes de l'utilisateur.
  2. Détectez le biais de diffusion de l'entraînement en comparant des exemples dans les données d'entraînement et de diffusion.
  3. Détectez la dérive des données en examinant une série de données.

Nous documentons chacune de ces fonctionnalités indépendamment :

Validation d'exemple basée sur un schéma

TensorFlow Data Validation identifie toute anomalie dans les données d'entrée en comparant les statistiques de données à un schéma. Le schéma codifie les propriétés que les données d'entrée sont censées satisfaire, telles que les types de données ou les valeurs catégorielles, et peut être modifié ou remplacé par l'utilisateur.

La validation des données Tensorflow est généralement invoquée plusieurs fois dans le contexte du pipeline TFX : (i) pour chaque division obtenue à partir d'ExempleGen, (ii) pour toutes les données pré-transformées utilisées par Transform et (iii) pour toutes les données post-transformation générées par Transformer. Lorsqu'il est invoqué dans le cadre de Transform (ii-iii), les options statistiques et les contraintes liées au schéma peuvent être définis en définissant le stats_options_updater_fn . Ceci est particulièrement utile lors de la validation de données non structurées (par exemple, des caractéristiques de texte). Voir le code utilisateur pour un exemple.

Fonctionnalités de schéma avancées

Cette section couvre une configuration de schéma plus avancée qui peut aider avec des configurations spéciales.

Fonctionnalités éparses

Le codage de fonctionnalités éparses dans les exemples introduit généralement plusieurs fonctionnalités qui devraient avoir la même valence pour tous les exemples. Par exemple , la fonction clairsemée:


WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
serait codé en utilisant fonctions distinctes de l' index et la valeur:

WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
avec la restriction que la valence de la fonction d'index et la valeur doit correspondre pour tous les exemples. Cette restriction peut être explicité dans le schéma en définissant un sparse_feature:

sparse_feature {
  name: 'WeightedCategories'
  index_feature { name: 'WeightedCategoriesIndex' }
  value_feature { name: 'WeightedCategoriesValue' }
}

La définition de caractéristiques éparses nécessite un ou plusieurs index et une caractéristique de valeur qui font référence aux caractéristiques qui existent dans le schéma. La définition explicite des caractéristiques éparses permet à TFDV de vérifier que les valences de toutes les caractéristiques référencées correspondent.

Certains cas d'utilisation introduisent des restrictions de valence similaires entre les fonctionnalités, mais n'encodent pas nécessairement une fonctionnalité éparse. L'utilisation d'une fonctionnalité clairsemée devrait vous débloquer, mais n'est pas idéale.

Environnements de schéma

Par défaut, les validations supposent que tous les exemples d'un pipeline adhèrent à un seul schéma. Dans certains cas, l'introduction de légères variations de schéma est nécessaire, par exemple les fonctionnalités utilisées comme étiquettes sont requises lors de la formation (et doivent être validées), mais sont manquantes lors de la diffusion. Les environnements peuvent être utilisés pour exprimer de telles exigences, en particulier default_environment() , in_environment() , not_in_environment() .

Par exemple, supposons qu'une fonctionnalité nommée « LABEL » est requise pour la formation, mais qu'elle devrait être absente de la diffusion. Cela peut s'exprimer par :

  • Définissez deux environnements distincts dans le schéma : ["SERVING", "TRAINING"] et associez 'LABEL' uniquement à l'environnement "TRAINING".
  • Associez les données d'entraînement à l'environnement « TRAINING » et les données de service à l'environnement « SERVING ».
Génération de schéma

Le schéma de données d'entrée est spécifié comme une instance de la tensorflow schéma .

Au lieu de créer un schéma manuellement à partir de zéro, un développeur peut s'appuyer sur la construction de schéma automatique de TensorFlow Data Validation. Plus précisément, TensorFlow Data Validation construit automatiquement un schéma initial basé sur des statistiques calculées sur les données d'entraînement disponibles dans le pipeline. Les utilisateurs peuvent simplement examiner ce schéma généré automatiquement, le modifier si nécessaire, l'enregistrer dans un système de contrôle de version et le pousser explicitement dans le pipeline pour une validation supplémentaire.

TFDV comprend infer_schema() pour générer un schéma automatiquement. Par example:

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

Cela déclenche une génération de schéma automatique basée sur les règles suivantes :

  • Si un schéma a déjà été généré automatiquement, il est utilisé tel quel.

  • Sinon, TensorFlow Data Validation examine les statistiques de données disponibles et calcule un schéma approprié pour les données.

Remarque : Le schéma généré automatiquement est au mieux et essaie uniquement de déduire les propriétés de base des données. Il est prévu que les utilisateurs le révisent et le modifient au besoin.

Détection de biais de service d'entraînement

Aperçu

TensorFlow Data Validation peut détecter les écarts de distribution entre les données d'entraînement et de diffusion. L'asymétrie de distribution se produit lorsque la distribution des valeurs de caractéristiques pour les données d'entraînement est significativement différente des données de diffusion. L'une des principales causes de l'asymétrie de la distribution est l'utilisation d'un corpus complètement différent pour la génération de données d'entraînement afin de pallier le manque de données initiales dans le corpus souhaité. Une autre raison est un mécanisme d'échantillonnage défectueux qui ne choisit qu'un sous-échantillon des données de service sur lesquelles s'entraîner.

Exemple de scénario

Voir la validation des données tensorflow Commencez Guide pour obtenir des informations sur la configuration de la détection obliquité au service de la formation.

Détection de dérive

La détection de dérive est prise en charge entre des intervalles de données consécutifs (c'est-à-dire entre l'intervalle N et l'intervalle N+1), par exemple entre différents jours de données d'entraînement. Nous exprimons la dérive en termes de distance L-infini pour caractéristiques qualitatives et approximative divergence Jensen-Shannon pour les fonctions numériques. Vous pouvez définir la distance seuil de manière à recevoir des avertissements lorsque la dérive est supérieure à ce qui est acceptable. La définition de la distance correcte est généralement un processus itératif nécessitant une connaissance du domaine et une expérimentation.

Voir la validation des données tensorflow Commencez Guide pour obtenir des informations sur la configuration de la détection de dérive.

Utiliser des visualisations pour vérifier vos données

TensorFlow Data Validation fournit des outils permettant de visualiser la distribution des valeurs des caractéristiques. En examinant ces distributions dans un ordinateur portable à l' aide Jupyter Facettes vous pouvez attraper des problèmes communs avec les données.

Statistiques des fonctionnalités

Identification des distributions suspectes

Vous pouvez identifier les bogues courants dans vos données en utilisant un affichage Vue d'ensemble des facettes pour rechercher des distributions suspectes de valeurs de caractéristiques.

Données déséquilibrées

Une caractéristique déséquilibrée est une caractéristique pour laquelle une valeur prédomine. Des caractéristiques déséquilibrées peuvent se produire naturellement, mais si une caractéristique a toujours la même valeur, vous pouvez avoir un bogue de données. Pour détecter les caractéristiques déséquilibrées dans une vue d'ensemble des facettes, choisissez « Non-uniformité » dans la liste déroulante « Trier par ».

Les fonctionnalités les plus déséquilibrées seront répertoriées en haut de chaque liste de types de fonctionnalités. Exemple :

Visualisation des données déséquilibrées

Données uniformément distribuées

Une caractéristique uniformément distribuée est une caractéristique pour laquelle toutes les valeurs possibles apparaissent avec une fréquence proche de la même. Comme pour les données déséquilibrées, cette distribution peut se produire naturellement, mais peut également être produite par des bogues de données.

Pour détecter des caractéristiques uniformément réparties dans une vue d'ensemble des facettes, choisissez « Non-uniformité » dans la liste déroulante « Trier par » et cochez la case « Ordre inversé » :

Histogramme de données uniformes

Les données de chaîne sont représentées à l'aide de graphiques à barres s'il y a 20 valeurs uniques ou moins, et sous forme de graphique de distribution cumulative s'il y a plus de 20 valeurs uniques. Ainsi, pour les données de chaîne, les distributions uniformes peuvent apparaître sous forme de graphiques à barres plats comme celui ci-dessus ou de lignes droites comme celle ci-dessous :

Graphique linéaire : distribution cumulative des données uniformes

Bogues qui peuvent produire des données uniformément distribuées

Voici quelques bogues courants qui peuvent produire des données uniformément réparties :

  • Utilisation de chaînes pour représenter des types de données autres que des chaînes, tels que des dates. Par exemple, vous aurez de nombreuses valeurs uniques pour une fonction datetime avec des représentations telles que "2017-03-01-11-45-03". Les valeurs uniques seront distribuées uniformément.

  • Y compris des indices tels que "numéro de ligne" en tant que fonctionnalités. Ici encore, vous avez de nombreuses valeurs uniques.

Données manquantes

Pour vérifier s'il manque entièrement des valeurs à une caractéristique :

  1. Choisissez "Montant manquant/zéro" dans la liste déroulante "Trier par".
  2. Cochez la case "Inverser l'ordre".
  3. Regardez la colonne "manquante" pour voir le pourcentage d'instances avec des valeurs manquantes pour une fonctionnalité.

Un bogue de données peut également entraîner des valeurs de caractéristiques incomplètes. Par exemple, vous pouvez vous attendre à ce que la liste de valeurs d'une caractéristique ait toujours trois éléments et découvrir que parfois elle n'en a qu'un. Pour rechercher des valeurs incomplètes ou d'autres cas où les listes de valeurs de caractéristiques n'ont pas le nombre d'éléments attendu :

  1. Choisissez « Longueur de la liste de valeurs » dans le menu déroulant « Graphique à afficher » sur la droite.

  2. Regardez le graphique à droite de chaque ligne de caractéristiques. Le graphique montre la plage de longueurs de liste de valeurs pour la fonction. Par exemple, la ligne en surbrillance dans la capture d'écran ci-dessous montre une fonctionnalité qui a des listes de valeurs de longueur nulle :

Affichage de la vue d'ensemble des facettes avec fonction avec des listes de valeurs de fonction de longueur nulle

Grandes différences d'échelle entre les fonctionnalités

Si vos caractéristiques varient considérablement en échelle, le modèle peut avoir des difficultés à apprendre. Par exemple, si certaines caractéristiques varient de 0 à 1 et d'autres de 0 à 1 000 000 000, vous avez une grande différence d'échelle. Comparez les colonnes « max » et « min » entre les fonctionnalités pour trouver des échelles très différentes.

Envisagez de normaliser les valeurs des caractéristiques pour réduire ces grandes variations.

Étiquettes avec des étiquettes non valides

Les estimateurs de TensorFlow ont des restrictions sur le type de données qu'ils acceptent comme étiquettes. Par exemple, les classificateurs binaires ne fonctionnent généralement qu'avec les étiquettes {0, 1}.

Passez en revue les valeurs d'étiquette dans le Facettes Présentation et assurez - vous qu'ils sont conformes aux exigences de Estimateurs .