Voici les sujets abordés :
- Bonnes pratiques pour tous les modèles de données tabulaires
- Bonnes pratiques pour les modèles AutoML tabulaires
- Bonnes pratiques pour les modèles de prévision tabulaires
- Bonnes pratiques pour le format de données
Bonnes pratiques pour tous les modèles de 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 de données
Une fuite de données 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 de données 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.
Une fuite de données peut également se produire lorsque vous utilisez les mêmes données dans plusieurs divisions. Si vous utilisez des données de séries temporelles, assurez-vous que les données de la même date ne sont utilisées que dans l'une des trois divisions de données.
É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 plusSi 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 de données 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 pour les modèles AutoML tabulaires
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 | 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 les modèles de prévision tabulaires
Les données d'entraînement des modèles de prévision présentent des spécificités.
É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.
Trouver une bonne valeur pour 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 :
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.
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.
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).
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.
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.
Bonnes pratiques pour le format de 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, 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 | ID | Promo |
---|---|---|---|
01/01/2019 | 112 | Widget_1_CA | 0 |
01/02/2019 | 141 | Widget_1_CA | 1 |
01/03/2019 | 149 | Widget_1_CA | 0 |
01/01/2019 | 52 | Widget_1_IL | 0 |
01/02/2019 | 81 | Widget_1_IL | 1 |
01/03/2019 | 89 | Widget_1_IL | 0 |
01/01/2019 | 241 | Widget_2_CA | 0 |
01/02/2019 | 219 | Widget_2_CA | 1 |
01/03/2019 | 244 | Widget_2_CA | 0 |
01/01/2019 | 0 | Widget_2_IL | 0 |
01/02/2019 | 0 | Widget_2_IL | 1 |
01/03/2019 | 0 | Widget_2_IL | 0 |
01/01/2019 | 0 | Widget_3_CA | 0 |
01/02/2019 | 0 | Widget_3_CA | 1 |
01/03/2019 | 0 | Widget_3_CA | 0 |
01/01/2019 | 43 | Widget_3_IL | 0 |
01/02/2019 | 26 | Widget_3_IL | 1 |
01/03/2019 | 86 | Widget_3_IL | 0 |
Nous avons maintenant un identifiant de série temporelle (ID), une colonne cible (Demand) 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. La colonne Promo est utilisée comme caractéristique 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
- Mes données sont-elles impeccables ? Checklist pré-ML
- Préparez et organisez vos données pour le machine learning.