Bonnes pratiques pour la création de données tabulaires d'entraînement

Cette page décrit certains concepts de base dont vous devez tenir compte lorsque vous rassemblez des données pour un ensemble de données tabulaire de Vertex AI. Cette description ne se veut pas exhaustive.

Certaines de ces bonnes pratiques s'appliquent aussi bien à la création de données d'entraînement tabulaires pour un modèle personnalisé que pour un modèle AutoML. D'autres concernent spécifiquement les modèles tabulaires AutoML.

Présentation

Des données bien conçues améliorent la qualité du modèle de machine learning qui en résulte. Vous pouvez vous appuyer sur les instructions de la présente page pour améliorer la qualité de vos données et de votre modèle.

Si vous avez l'habitude de créer des données d'entraînement pour des modèles de machine learning et que vous souhaitez entraîner un modèle AutoML, découvrez les transformations appliquées par AutoML. Lorsque vous entraînez un modèle AutoML, Vertex AI effectue de nombreuses tâches de préparation de données.

Bonnes pratiques de préparation des données tabulaires

Les bonnes pratiques suivantes s'appliquent aussi bien à un modèle AutoML qu'à un modèle personnalisé utilisant des données tabulaires.

Éviter les fuites cibles

Une fuite cible se produit lorsque les données d'entraînement contiennent des informations prédictives qui ne sont pas disponibles lorsque vous demandez une prédiction. Les fuites cibles peuvent se traduire par un modèle très précis dans son évaluation, mais peu performant sur des données réelles.

Par exemple, supposons que vous souhaitiez connaître la quantité de crèmes glacées que votre magasin vendra demain. Vous ne pouvez pas inclure la température du jour cible dans vos données d'entraînement, car vous ne la connaissez pas encore (ce n'est pas encore arrivé). Cependant, vous pouvez inclure dans la requête de prédiction la température prédite pour le jour précédent.

Éviter le décalage entraînement/diffusion

Un décalage entraînement/diffusion se produit lorsque vous générez des données d'entraînement de façon différente par rapport à celles que vous générez pour demander des prédictions.

Par exemple, si vous utilisez une valeur moyenne sur 10 jours pour l'entraînement et que la prédiction que vous demandez est établie sur la valeur moyenne du mois précédent.

En général, toute différence entre la façon dont vous générez les données d’entraînement et les données de diffusion (celles que vous utiliserez pour générer les prédictions) doit être examinée afin d'éviter un décalage entraînement/diffusion.

Décalage entraînement/diffusion et distribution des données

Un décalage entraînement/diffusion peut également se produire en fonction de la distribution des données dans vos répartitions des données d'entraînement, de validation et de test. Il existe souvent une différence entre la distribution des données qu'un modèle observe lorsqu'il est déployé en production et celle de l'ensemble de données sur lequel il est entraîné. Par exemple, en production, un modèle peut être appliqué à une population d'utilisateurs totalement différente de celle observée pendant l'entraînement, ou servir à effectuer des prédictions 30 jours après l'enregistrement des données d'entraînement finales.

Pour de meilleurs résultats, assurez-vous que la distribution des répartitions de données employées pour créer votre modèle reflète précisément la différence entre l'ensemble de données d'entraînement et les données sur lesquelles vous effectuerez des prédictions dans votre environnement de production. Vertex AI peut produire des prédictions non monotones. Si les données de production sont échantillonnées à partir d'une distribution très différente de celle des données d'entraînement, les prédictions non monotones ne seront pas très fiables.

La différence entre les données de production et les données d'entraînement doit reproduire la différence entre la répartition des données de validation et la répartition des données d'entraînement, ainsi qu'entre la répartition des données de test et la répartition des données de validation.

Par exemple, si vous envisagez d'effectuer des prédictions sur la valeur vie client (LTV) au cours des 30 prochains jours, assurez-vous que la période des données de votre répartition des données de validation commence 30 jours après la période de votre répartition des données d'entraînement, et que la période des données de votre répartition des données de test commence 30 jours après votre répartition des données de validation.

De même, si vous souhaitez que votre modèle soit réglé pour générer des prédictions sur de nouveaux utilisateurs, veillez à ce que les données d'un utilisateur spécifique ne figurent que dans une seule répartition de vos données d'entraînement. Par exemple, toutes les lignes qui se rapportent à user1 figurent dans la répartition des données d'entraînement, toutes les lignes qui se rapportent à user2 figurent dans la répartition des données de validation, et toutes les lignes qui se rapportent à user3 figurent dans la répartition des données de test.

Fournir un signal horaire

Pour les modèles de classification et de régression, si le modèle sous-jacent de vos données est susceptible de changer avec le temps (elles ne sont pas distribuées de façon aléatoire dans le temps), veillez à fournir ces informations à Vertex AI. Vous pouvez fournir un signal horaire de plusieurs manières :

  • Lorsque vous entraînez votre modèle, si chaque ligne de données comporte un horodatage, assurez-vous que la colonne correspondante est incluse, qu'elle précise le type de transformation Timestamp et qu'elle est définie en tant que colonne Heure. Les données seront fractionnées en suivant cet ordre, les plus récentes constituant les données de test et les plus anciennes les données d'entraînement. En savoir plus

  • Si votre colonne temporelle contient peu de valeurs distinctes, vous devez effectuer un fractionnement manuel des données au lieu d'utiliser la colonne Heure pour les fractionner. Sinon, vous risquez de ne pas obtenir suffisamment de lignes dans chaque ensemble de données, ce qui peut entraîner l'échec de l'entraînement.

  • Si les informations temporelles ne sont pas isolées dans une colonne, vous pouvez effectuer un fractionnement manuel des données pour utiliser les données les plus récentes comme données de test, et les données les plus anciennes comme données d'entraînement.

Rendre les informations explicites si nécessaire

Pour certaines primitives de données, vous pouvez améliorer la qualité du modèle en utilisant des caractéristiques techniques.

Par exemple, si les données incluent la longitude et la latitude, ces colonnes sont traitées comme des valeurs numériques, sans calcul particulier. Si l'emplacement ou la distance constituent un signal pour votre problème, vous devez extraire une caractéristique qui fournit ces informations de manière explicite.

Voici quelques types de données pouvant nécessiter une extraction de caractéristiques :

  • Longitude/Latitude
  • URL
  • Adresses IP
  • Adresses e-mail
  • Numéros de téléphone
  • Autres codes géographiques (par exemple, des codes postaux)

Inclure des données calculées ou globales sur une ligne

L'IA Vertex utilise uniquement les données d'entrée d'une seule ligne pour prédire la valeur cible de cette ligne. Si vous avez calculé ou regroupé des données provenant d'autres lignes ou sources pouvant servir à déterminer la valeur estimée d'une ligne, incluez ces données dans la ligne source. Veillez à ce que la nouvelle colonne n'entraîne pas de fuite cible ni de décalage entraînement/diffusion.

Par exemple, si vous souhaitez prédire la demande de la semaine suivante pour un produit, vous pouvez améliorer la qualité de la prédiction en incluant des colonnes contenant les valeurs suivantes :

  • Nombre total d'articles en stock de la même catégorie que le produit
  • Prix moyen des articles en stock de la même catégorie que le produit
  • Nombre de jours précédant un jour férié lorsque la prédiction est demandée
  • et ainsi de suite

Dans un autre exemple, si vous souhaitez prédire si un utilisateur spécifique achètera un produit, vous pouvez améliorer la qualité de la prédiction en incluant des colonnes contenant les valeurs suivantes :

  • Taux de conversion historique ou taux de clics moyen d'un utilisateur spécifique.
  • Nombre de produits présents dans le panier de l'utilisateur.

Éviter les biais

Assurez-vous que vos données d'entraînement sont représentatives de la globalité des données potentielles pour lesquelles vous allez réaliser des prédictions. Par exemple, si vous avez des clients partout dans le monde, les données d'entraînement doivent couvrir plusieurs pays.

Bonnes pratiques de préparation des données tabulaires pour les modèles AutoML

Les bonnes pratiques suivantes permettent de créer des données d'entraînement tabulaires pour des modèles tabulaires AutoML.

Représenter les valeurs nulles de manière appropriée

Si vous importez au format CSV, utilisez des chaînes vides pour représenter les valeurs nulles. Si vous importez à partir de BigQuery, utilisez la valeur NULL.

Si vos données utilisent des caractères spéciaux ou des chiffres pour représenter des valeurs nulles, y compris zéro, ces valeurs sont mal interprétées, ce qui réduit la qualité du modèle.

Éviter les valeurs manquantes si possible

Vérifiez les valeurs manquantes dans vos données et corrigez-les si possible. Sinon, vous pouvez laisser la valeur vide et la traiter comme une valeur nulle.

Utiliser des espaces pour séparer le texte

Vertex AI segmente des chaînes de texte et peut déduire un signal d'entraînement à partir de mots individuels. Il utilise des espaces pour séparer les mots. Les mots séparés par d'autres caractères sont traités comme une seule entité.

Par exemple, si vous spécifiez le texte "rouge/vert/bleu", il n'est pas segmenté en "rouge", "vert" et "bleu". Si ces termes pris séparément sont importants pour l'entraînement du modèle, vous devez transformer le texte en "rouge vert bleu" avant de l'inclure dans les données d'entraînement.

Vérifier l'exactitude et la cohérence des caractéristiques catégorielles

Des incohérences au niveau des données peuvent fausser la répartition entre les catégories. Par exemple, si vos données incluent les mots "Marron" et "marron", Vertex AI utilise ces valeurs comme des catégories distinctes alors que vous ne souhaitiez peut-être pas les différencier. Les fautes d'orthographe peuvent produire le même effet. Veillez à supprimer ce genre d'incohérences des données catégorielles avant de créer vos données d'entraînement.

Être attentif aux classes déséquilibrées dans les modèles de classification

Si vos classes sont déséquilibrées (problème de classification avec un ou plusieurs résultats rarement rencontrés), reportez-vous aux conseils suivants.

Fournir suffisamment de données d'entraînement pour la classe minoritaire

Une quantité trop faible de lignes de données pour une classe dégrade la qualité du modèle. Si possible, essayez de fournir au moins 100 lignes de données pour chaque classe.

Préférer un fractionnement manuel

L'IA Vertex sélectionne les lignes de l'ensemble de données de test de manière aléatoire (mais déterministe). En cas de classes déséquilibrées, vous pourriez vous retrouver avec une classe minoritaire très peu représentée dans votre ensemble de données de test, voire pas du tout, ce qui entraînerait l'échec de l'entraînement.

Si vos classes sont déséquilibrées, il est conseillé d'effectuer un fractionnement manuel afin que chaque segment contienne suffisamment de lignes de résultats minoritaires.

Fournir suffisamment de données d'entraînement

Si vous ne fournissez pas suffisamment de données d'entraînement, le modèle généré risque d'être peu performant. Plus vous utilisez de colonnes pour entraîner votre modèle, plus vous devez fournir de données.

Votre ensemble de données doit toujours contenir au moins 1 000 lignes.

Le tableau suivant fournit une méthode heuristique sur le nombre de données d'entraînement à fournir, en fonction de votre objectif.

Objectif Nombre minimal de données d'entraînement suggéré
Classification Au moins 10 fois plus de lignes que de colonnes
Prévision (bêta) Au moins 10 séries temporelles pour chaque colonne utilisée pour entraîner le modèle
Régression Au moins 50 fois plus de lignes que de colonnes

Laisser faire Vertex AI pour tous les autres prétraitements et transformations

Sauf indication contraire ci-dessus, laissez Vertex AI se charger de faire l'extraction de caractéristiques lors de l'entraînement d'un modèle AutoML. AutoML fonctionne mieux lorsqu'il a accès aux données sous-jacentes. Pour obtenir la liste de toutes les transformations effectuées par AutoML par type de transformation, consultez la section Transformations Vertex AI.

Bonnes pratiques pour la préparation des données de prévision

Les données d'entraînement des modèles de prévision (bêta) présentent des spécificités.

Identifiant de séries temporelles

L'une des colonnes des données d'entraînement d'un modèle de prévision doit être spécifiée en tant qu'identifiant de série temporelle. La prévision des données d'entraînement comprend généralement plusieurs séries temporelles. L'identifiant indique à Vertex AI dans quelle série temporelle se trouvent les données d'entraînement faisant l'objet d'une observation. Toutes les lignes d'une série temporelle donnée ont la même valeur dans la colonne d'identifiant de la série temporelle.

Il est courant d'utiliser l'ID d'un produit, l'identifiant d'un magasin ou une région comme identifiant de série temporelle. Lorsque vous avez plusieurs séries temporelles dans vos données d'entraînement, vous devez disposer d'une colonne spécifique pour les différencier.

Vous pouvez entraîner un modèle de prévision sur une seule série temporelle (en d'autres termes, la colonne d'identifiant de série temporelle contient la même valeur pour toutes les lignes). Toutefois, Vertex AI est une solution plus adaptée pour les données d'entraînement contenant au moins deux séries temporelles. Pour des résultats optimaux, vous devez disposer d'au moins 10 séries temporelles pour chaque colonne utilisée pour entraîner le modèle.

Éléments à prendre en compte pour choisir la précision des données

Lors de l'entraînement d'un modèle de prévision, vous spécifiez la précision des données, ou l'intervalle de temps entre les lignes des données d'entraînement. Celui-ci peut être horaire, quotidien, mensuel ou annuel. Il peut également être défini toutes les 1, 5, 10, 15 ou 30 minutes.

La précision des données doit être cohérente entre les données d'entraînement et les données de prédiction par lot. Si vous spécifiez une précision quotidienne et qu'il y a deux jours d'intervalle entre deux lignes de données d'entraînement, Vertex AI traite la journée intermédiaire comme des données manquantes, ce qui peut nuire aux performances du modèle. Si plusieurs lignes d'une série temporelle disposent du même horodatage (déterminé par la précision), cela est interprété comme une erreur de validation lors de l'entraînement.

En règle générale, vos pratiques en matière de collecte de données déterminent le niveau de précision de vos données.

Bonnes pratiques pour répartir manuellement les données d'entraînement des séries temporelles

Si la répartition chronologique par défaut (80/10/10) n'est pas adaptée à vos données d'entraînement, vous pouvez répartir manuellement les lignes de données d'entraînement. Par exemple, vous pouvez choisir d'utiliser un autre pourcentage de vos données d'entraînement dans les différentes divisions.

Veillez à éviter les fuites de données entre vos séries temporelles. Celles-ci peuvent se produire lorsque des données de la même date sont utilisées pour un ensemble d'une série temporelle et un autre ensemble d'une série temporelle différente.

Éléments à prendre en compte pour définir la fenêtre de contexte et l'horizon de prévision

Vous définissez la fenêtre de contexte et l'horizon de prévision lors de l'entraînement d'un modèle de prévision.

  • La fenêtre de contexte définit jusqu'où le modèle remonte dans le temps lors de l'entraînement (et des prévisions). En d'autres termes, pour chaque point de données d'entraînement, la fenêtre de contexte détermine jusqu'à quelle période le modèle recherche des modèles prédictifs.

  • L'horizon de prévision détermine jusqu'à quand le modèle prévoit la valeur cible pour chaque ligne de données de prédiction.

L'augmentation de la fenêtre de contexte a les effets suivants :

  • Augmentation du temps d'entraînement

    Avec une fenêtre de contexte plus grande, le modèle utilise davantage de points de données pour l'entraînement, ce qui augmente le temps d'entraînement.

  • Augmentation requise de l'historique pour les données de prédiction

    Vos données de prédiction doivent fournir autant de points de données historiques que la valeur de la fenêtre de contexte.

Si vous souhaitez obtenir un grand nombre de données de prédiction qui ne s'étendent pas dans le passé (démarrages à froid), commencez par définir la fenêtre de contexte sur 0. Vous pouvez également définir une fenêtre de contexte entre la taille de l'horizon de prévision et 10 fois sa taille.

Pour déterminer la valeur adaptée à vos données, procédez comme suit :

  1. Pour la première itération d'entraînement, définissez la fenêtre de contexte et l'horizon de prévision sur la même valeur, et votre budget d'entraînement sur au moins six heures.

  2. Entraînez à nouveau le modèle avec le même budget d'entraînement, mais doublez la taille de la fenêtre de contexte à deux fois la taille de l'horizon de prévision.

  3. Si les métriques d'évaluation du deuxième modèle indiquent une amélioration significative, entraînez à nouveau le modèle en augmentant la fenêtre de contexte jusqu'à cinq fois la taille de l'horizon de prévision. Nous vous conseillons d'augmenter le budget d'entraînement de façon proportionnelle (si l'entraînement a duré 10 heures lors de la première étape, augmentez votre budget à 50 heures).

  4. Continuez à augmenter la fenêtre de contexte jusqu'à ce que les métriques d'évaluation améliorées ne s'affichent plus ou que vous soyez satisfait des résultats. Revenez à la valeur la plus basse de la fenêtre de contexte qui produit des résultats acceptables.

Utilisation de la fenêtre de contexte et de l'horizon de prévision pendant l'entraînement et les prévisions

Supposons que vous collectiez des données tous les mois, avec une fenêtre de contexte de cinq (mois) et un horizon de prévision de cinq (mois). L'entraînement de votre modèle avec 12 mois de données donnerait les ensembles d'entrées et de prévisions suivants :

  • [1-5]:[6-10]
  • [2-6]:[7-11]
  • [3-7]:[8-12]

Après l'entraînement, le modèle peut être utilisé pour prédire les mois 13 à 17 :

  • [8-12]:[13-17]

Le modèle n'utilise que les données incluses dans la fenêtre de contexte pour effectuer la prévision. Vous pouvez fournir des données plus anciennes, mais cela n'aurait aucune incidence sur la prévision. Elles seraient ignorées.

Une fois les données du mois 13 collectées, elles peuvent être utilisées pour les prédictions du mois 18 :

  • [9-13]:[14-18]

Pour pouvez suivre cette procédure pour effectuer les prochaines prédictions, à condition d'obtenir de bons résultats. Vous pourrez éventuellement réentraîner le modèle avec les nouvelles données. Par exemple, si vous avez réentraîné le modèle après avoir ajouté six mois de données supplémentaires, les données d'entraînement sont utilisées comme suit :

  • [2-6]:[7-11]
  • [3-7]:[8-12]
  • [4-8]:[9-13]
  • [5-9]:[10-14]
  • [6-10]:[11-15]
  • [7-11]:[12-16]
  • [8-12]:[13-17]
  • [9-13]:[14-18]

Vous pouvez ensuite utiliser ce modèle pour prédire les mois 19 à 23 :

  • [14-18]:[19-23]

À propos du format des données

Vous pouvez créer vos données d'entraînement au format large ou restreint. Pour les modèles de régression et de classification, le format large est largement utilisé et peut être plus facile à mettre en œuvre et à analyser. Pour les modèles de prévision (bêta), l'utilisation d'un format restreint peut vous aider à éviter de configurer involontairement des connexions entre vos données et votre cible (fuite de données).

Lorsque vous créez des données d'entraînement pour entraîner un modèle de prévision, chaque ligne doit représenter une seule observation d'une série temporelle. Vous devez disposer d'une colonne qui représente votre identifiant de série temporelle (ce qui permet de distinguer les séries temporelles les unes des autres), ainsi que d'une colonne représentant la valeur que vous allez prédire (votre cible). Ensuite, toutes les autres valeurs de la ligne utilisée pour entraîner le modèle doivent être présentes au moment de réaliser une prédiction pour votre cible.

Prenons les exemples de données d'entraînement suivants (simplifiés et abrégés) :

Date Widget_1_Demand Widget_2_Demand Widget_3_Demand Promo Région
01/01/2019 112 241 0 0 CA
01/02/2019 141 219 0 1 CA
01/03/2019 149 244 0 0 CA
01/01/2019 52 0 43 0 IL
01/02/2019 81 0 26 1 IL
01/03/2019 89 0 86 0 IL

Cette table au format large affiche les données d'entreprise par date, mais elle ne peut pas être utilisée pour un modèle de prévision dans sa forme actuelle. Il n'existe pas de colonne cible, ni de colonne d'ID de série temporelle. Pour une date donnée, vous ne saurez pas la demande pour les autres widgets au moment de la prédiction.

Vous pouvez convertir la table au format suivant :

Date Produit Region_CA_Demand Region_IL_Demand Promo
01/01/2019 Widget_1 112 52 0
01/02/2019 Widget_1 141 81 1
01/03/2019 Widget_1 149 89 0
01/01/2019 Widget_2 241 0 0
01/02/2019 Widget_2 219 0 1
01/03/2019 Widget_2 244 0 0
01/01/2019 Widget_3 0 43 0
01/02/2019 Widget_3 0 26 1
01/03/2019 Widget_3 0 86 0

Nous disposons désormais d'une colonne d'ID de série temporelle potentielle, à savoir "Produit". Toutefois, ce format ne peut être utilisé que pour effectuer des prédictions sur l'une des régions. Les données de l'autre région doivent être connues au moment de la prédiction.

La solution consiste à effectuer une conversion au format restreint, de sorte que chaque ligne représente une seule observation. Les données indépendantes de la série temporelle sont répétées pour chaque ligne :

Date Demande Produit Promo Région
01/01/2019 112 Widget_1 0 CA
01/02/2019 141 Widget_1 1 CA
01/03/2019 149 Widget_1 0 CA
01/01/2019 52 Widget_1 0 IL
01/02/2019 81 Widget_1 1 IL
01/03/2019 89 Widget_1 0 IL
01/01/2019 241 Widget_2 0 CA
01/02/2019 219 Widget_2 1 CA
01/03/2019 244 Widget_2 0 CA
01/01/2019 0 Widget_2 0 IL
01/02/2019 0 Widget_2 1 IL
01/03/2019 0 Widget_2 0 IL
01/01/2019 0 Widget_3 0 CA
01/02/2019 0 Widget_3 1 CA
01/03/2019 0 Widget_3 0 CA
01/01/2019 43 Widget_3 0 IL
01/02/2019 26 Widget_3 1 IL
01/03/2019 86 Widget_3 0 IL

Nous avons maintenant un identifiant de série temporelle (Produit), une colonne cible (Demande) et une colonne de temps (Date). En outre, chaque ligne est basée sur une seule observation, qui peut être utilisée pour prédire la valeur cible. Les colonnes "Région" et "Promo" servent de caractéristiques pour entraîner le modèle.

En réalité, vous aurez beaucoup plus de lignes et de colonnes que ces exemples. Vous devez néanmoins respecter les consignes présentées sur cette page pour structurer vos données de façon à éviter les fuites de données.

Étapes suivantes