Validation des données TensorFlow : vérification et analyse de vos données

Une fois vos données dans un pipeline TFX, vous pouvez utiliser des composants TFX pour les analyser et les transformer. Vous pouvez utiliser ces outils avant même de former un modèle.

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

  • Pour trouver des problèmes dans vos données. Les problèmes courants incluent :
    • Données manquantes, telles que les entités avec des valeurs vides.
    • Les étiquettes sont traitées comme des caractéristiques, afin que votre modèle puisse jeter un coup d'œil à la bonne réponse pendant l'entraînement.
    • Entités avec des valeurs en dehors de la plage attendue.
    • Anomalies de données.
    • Le modèle appris par transfert a un prétraitement qui ne correspond pas aux données de formation.
  • Concevoir des ensembles de fonctionnalités plus efficaces. Par exemple, vous pouvez identifier :
    • Fonctionnalités particulièrement informatives.
    • Fonctionnalités redondantes.
    • Caractéristiques 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 des 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 de données à un schéma qui codifie les attentes de l'utilisateur.
  2. Détectez l'asymétrie formation-diffusion en comparant des exemples de données de formation 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 peuvent être modifiés ou remplacés 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'ExampleGen, (ii) pour toutes les données pré-transformées utilisées par Transform et (iii) pour toutes les données post-transformées générées par Transformer. Lorsqu'elles sont invoquées dans le contexte de Transform (ii-iii), les options de statistiques et les contraintes basées sur le schéma peuvent être définies en définissant 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 rares

L'encodage des fonctionnalités éparses dans les exemples introduit généralement plusieurs fonctionnalités censées avoir la même valence pour tous les exemples. Par exemple, la caractéristique clairsemée :


WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
serait codée à l'aide de caractéristiques distinctes pour l'index et la valeur :

WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
avec la restriction que la valence de la caractéristique d'index et de valeur doit correspondre pour tous les exemples. Cette restriction peut être rendue explicite 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 fonctionnalité dispersée nécessite un ou plusieurs index et une fonctionnalité de valeur qui font référence à des fonctionnalités qui existent dans le schéma. La définition explicite des fonctionnalités éparses permet à TFDV de vérifier que les valences de toutes les fonctionnalités 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é clairsemée. L'utilisation de la 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, il est nécessaire d'introduire de légères variations de schéma. Par exemple, les fonctionnalités utilisées comme libellés 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" soit requise pour la formation, mais qu'elle soit absente de la diffusion. Cela peut être exprimé par :

  • Définissez deux environnements distincts dans le schéma : ["SERVING", "TRAINING"] et associez 'LABEL' uniquement à l'environnement "TRAINING".
  • Associez les données de formation à l'environnement "TRAINING" et les données de diffusion à l'environnement "SERVING".
Génération de schéma

Le schéma de données d'entrée est spécifié en tant qu'instance du schéma TensorFlow.

Au lieu de construire 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 selon les besoins, l'archiver dans un système de contrôle de version et le pousser explicitement dans le pipeline pour une validation ultérieure.

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

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

Cela déclenche une génération automatique de schéma 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 le meilleur effort et essaie uniquement de déduire les propriétés de base des données. On s'attend à ce que les utilisateurs l'examinent et le modifient au besoin.

Détection de biais de formation-service

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 très différente des données de diffusion. L'une des principales causes du biais de distribution est l'utilisation d'un corpus complètement différent pour la génération de données d'entraînement afin de surmonter 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 lequel s'entraîner.

Exemple de scénario

Consultez le guide de démarrage de TensorFlow Data Validation pour plus d'informations sur la configuration de la détection d'écart d'apprentissage et de diffusion.

Détection de dérive

La détection de dérive est prise en charge entre des plages de données consécutives (c'est-à-dire entre la plage N et la plage N+1), comme entre différents jours de données d'entraînement. Nous exprimons la dérive en termes de distance L-infini pour les caractéristiques catégorielles et la divergence approximative de Jensen-Shannon pour les caractéristiques numériques. Vous pouvez définir la distance de seuil afin de 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.

Consultez le guide de démarrage de TensorFlow Data Validation pour plus d'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 de caractéristiques. En examinant ces distributions dans un bloc-notes Jupyter à l'aide de Facets , vous pouvez détecter les problèmes courants liés aux données.

Statistiques sur les 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 fonctionnalités déséquilibrées peuvent se produire naturellement, mais si une fonctionnalité 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. Par exemple, la capture d'écran suivante montre une caractéristique entièrement nulle et une seconde très déséquilibrée, en haut de la liste "Caractéristiques numériques" :

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 entités uniformément distribuées dans une vue d'ensemble des facettes, choisissez "Non-uniformité" dans la liste déroulante "Trier par" et cochez la case "Ordre inverse" :

Histogramme de données uniformes

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

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

Bugs pouvant produire des données uniformément distribuées

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

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

  • Inclure des indices tels que "numéro de ligne" en tant que fonctionnalités. Là 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 le menu déroulant "Trier par".
  2. Cochez la case "Ordre inversé".
  3. Examinez 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 fonctionnalité ait toujours trois éléments et découvrir qu'elle n'en a parfois qu'un seul. 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. Examinez le graphique à droite de chaque ligne de fonctionnalité. Le graphique affiche la plage de longueurs de liste de valeurs pour la fonctionnalité. 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 une 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 varient 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 variables.

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

Libellés avec des libellés 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 la vue d'ensemble des facettes et assurez-vous qu'elles sont conformes aux exigences des estimateurs .