Les composants d'évaluation de modèle prennent des résultats de vérité terrain et de prédiction par lot en tant qu'entrée pour générer des métriques d'évaluation. Les données de vérité terrain sont des données "correctement étiquetées" (comme déterminé par des humains) et sont généralement fournies en tant que champ cible dans l'ensemble de données de test que vous avez utilisé pour entraîner le modèle. Pour en savoir plus, consultez la section Évaluation de modèle dans Vertex AI.
Vertex AI fournit les composants d'évaluation de modèle suivants :
Types de modèles acceptés
Le tableau suivant répertorie les types de modèles compatibles pour chaque composant d'évaluation de modèle :
Composant d'évaluation du modèle | Types de modèles compatibles |
---|---|
ModelEvaluationClassificationOp |
|
ModelEvaluationRegressionOp |
|
ModelEvaluationForecastingOp |
|
Supprimer le champ cible
Pour certains types de modèles, le composant BatchPredictionJob
nécessite d'exclure la colonne cible (vérité terrain) de votre ensemble de données.
Configurer et formater des tranches pour votre ensemble de données tabulaire
Une tranche est un sous-ensemble de données tabulaires avec des caractéristiques spécifiées. Les métriques par tranches offrent des métriques d'évaluation plus détaillées pour les modèles de classification d'entraînement personnalisé et tabulaire AutoML.
Prenons l'exemple d'un ensemble de données d'adoption d'animaux de compagnie dans lequel un modèle est entraîné pour prédire si un animal sera adopté dans un délai d'une semaine. Bien qu'il soit utile d'examiner les métriques pour l'ensemble de données complet, les métriques liées à l'espèce et à l'âge de l'animal peuvent vous intéresser. En d'autres termes, vous êtes intéressé par le sous-ensemble suivant de l'ensemble de données :
Caractéristique | Valeurs |
---|---|
age (in years) |
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 |
species |
"dog", "cat", "rabbit" |
Cette analyse détaillée peut être utile pour identifier les cas où le modèle est le plus sujet aux erreurs, ou pour s'assurer que le modèle fonctionne bien sur des sous-ensembles essentiels des données.
Configurer des tranches
Pour configurer une tranche, créez un fichier JSON avec la configuration suivante :
{ "FEATURE": { "KIND": { CONFIG } } }
Où :
FEATURE est une caractéristique pour laquelle vous souhaitez créer une tranche. Par exemple,
age
.KIND est l'un des éléments suivants :
value
value
crée une tranche unique basée sur une valeur unique d'une caractéristique. Spécifiez CONFIG en tant que paire clé/valeur où la clé estfloat_value
oustring_value
. Par exemple,"float_value": 1.0
.L'exemple de configuration suivant crée une tranche unique contenant des données où la caractéristique
age
est égale à1
:{ "age": { "value": { "float_value": 1.0 } } }
range
range
crée une tranche unique qui inclut des données dans une plage spécifiée. Spécifiez CONFIG en tant que deux paires clé/valeur où les clés sontlow
ethigh
.L'exemple de configuration suivant crée une tranche unique contenant des données où la caractéristique
age
est une valeur comprise entre1
et3
:{ "age": { "range": { "low": 1, "high": 3 } } }
all_values
all_values
crée une tranche distincte pour chaque étiquette possible pour la caractéristique. Spécifiez CONFIG en tant que"value": true
.L'exemple de configuration suivant crée trois tranches, une pour
"dog"
, une pour"cat"
et une pour"rabbit"
:{ "species": { "all_values": { "value": true } } }
Vous pouvez également utiliser plusieurs caractéristiques pour créer une ou plusieurs tranches.
La configuration suivante crée une tranche unique contenant des données où la caractéristique age
est une valeur comprise entre 1
et 3
, et où la caractéristique species
est "dog"
:
{ "age": { "range": { "low": 1, "high": 3 } }, "species": { "value": { "string_value": "dog" } } }
La configuration suivante crée plusieurs tranches, une pour chaque espèce unique dans l'ensemble de données, où la caractéristique age
est égale à 1
.
{ "species": { "all_values": { "value": true } }, "age": { "value": { "float_value": 1.0 } } }
Les tranches obtenues contiennent les données suivantes de l'exemple d'ensemble de données :
Tranche 1 :
age:1
etspecies:"dog"
Tranche 2 :
age:1
etspecies:"cat"
Tranche 3 :
age:1
etspecies:"rabbit"
Formater des tranches
Pour formater des tranches pour le composant ModelEvaluationClassificationOp
, procédez comme suit :
Créez un objet
slicing_spec
. Exemple :from google.cloud.aiplatform_v1.types.ModelEvaluationSlice.Slice import SliceSpec from google.cloud.aiplatform_v1.types.ModelEvaluationSlice.Slice.SliceSpec import SliceConfig slicing_spec = SliceSpec(configs={ 'feature_a': SliceConfig(SliceSpec.Value(string_value='label_a') ) })
Créez une liste pour stocker les configurations de tranches. Exemple :
slicing_specs = []
Formatez chaque
slicing_spec
en JSON ou en dictionnaire. Exemple :slicing_spec_json = json_format.MessageToJson(slicing_spec) slicing_spec_dict = json_format.MessageToDict(slicing_spec)
Combinez chaque
slicing_spec
dans une liste. Exemple :slicing_specs.append(slicing_spec_json)
Transmettez
slicing_specs
en tant que paramètre au composantModelEvaluationClassificationOp
. Exemple :ModelEvaluationClassificationOp(slicing_specs=slicing_specs)
Formater les tranches de configuration des métriques d'impartialité
Pour évaluer l'impartialité de votre modèle, utilisez les composants suivants :
DetectDataBiasOp
: renvoie des métriques de biais de données pour les tranches que vous transmettez au composant.DetectModelBiasOp
: renvoie des métriques de biais de modèle pour les tranches que vous transmettez au composant.
Pour formater vos tranches pour les composants DetectDataBiasOp
et DetectModelBiasOp
, procédez comme suit :
Créez un objet
BiasConfig
. Exemple :from google.cloud.aiplatform_v1.types.ModelEvaluation import BiasConfig from google.cloud.aiplatform_v1.types.ModelEvaluationSlice.Slice import SliceSpec from google.cloud.aiplatform_v1.types.ModelEvaluationSlice.Slice.SliceSpec import SliceConfig bias_config = BiasConfig(bias_slices=SliceSpec(configs={ 'feature_a': SliceConfig(SliceSpec.Value(string_value='label_a') ) }))
Créez une liste pour stocker les configurations de biais. Exemple :
bias_configs = []
Formatez chaque
bias_config
en JSON ou en dictionnaire. Exemple :bias_config_json = json_format.MessageToJson(bias_config) bias_config_dict = json_format.MessageToDict(bias_config)
Combinez chaque
bias_config
dans une liste. Exemple :bias_configs.append(bias_config_json)
Transmettez
bias_configs
en tant que paramètre au composantDetectDataBiasOp
ouDetectModelBiasOp
. Exemple :DetectDataBiasOp(bias_configs=bias_configs) DetectModelBiasOp(bias_configs=bias_configs)
Paramètres d'entrée requis
Les paramètres d'entrée requis pour les composants d'évaluation de modèle varient en fonction du type de modèle que vous évaluez.
Modèles AutoML
Lors de l'entraînement de modèles AutoML, Vertex AI utilise des schémas par défaut. Certains paramètres d'entrée pour les composants d'évaluation de modèle ne sont obligatoires que si vous avez utilisé un schéma autre que celui par défaut pour entraîner votre modèle.
Vous pouvez afficher et télécharger des fichiers de schéma à partir de l'emplacement Cloud Storage suivant :
gs://google-cloud-aiplatform/schema/modelevaluation/
Les onglets suivants présentent des exemples de fichiers de sortie de prédiction par lot et les paramètres d'entrée requis pour chaque type de modèle :
Tabulaire
Classification
Le schéma par défaut inclut les champs suivants :
scores
: tableauclasses
: tableau
Voici un exemple de fichier de sortie pour la prédiction par lot avec la colonne cible male
:
{ "instance": { "male": "1", "age": "49", "heartRate": "67", "education": "medium_high", "totChol": "282", "diaBP": "79", "BPMeds": "0", "currentSmoker": "current_high", "cigsPerDay": "25", "prevalentStroke": "stroke_0", "prevalentHyp": "hyp_0", "TenYearCHD": "FALSE", "diabetes": "0", "sysBP": "134", "BMI": "26.87", "glucose": "78" }, "prediction": { "scores": [0.3666940927505493, 0.6333059072494507], "classes": ["0", "1"] } }
Ce tableau décrit les paramètres obligatoires pour le composant ModelEvaluationClassificationOp
avec un modèle tabulaire :
Paramètre du composant d'évaluation | Obligatoire |
---|---|
target_field_name |
Oui |
prediction_label_column |
Non requis pour le schéma par défaut. Utilisez prediction.classes pour les schémas autres que ceux par défaut. |
prediction_score_column |
Non requis pour le schéma par défaut. Utilisez prediction.scores pour les schémas autres que ceux par défaut. |
evaluation_class_labels |
Non requis pour le schéma par défaut. Utilisez ["0","1"] pour les schémas autres que ceux par défaut. |
Régression
Le schéma par défaut inclut les champs suivants :
value
: nombre à virgule flottantelower_bound
: nombre à virgule flottanteupper_bound
: nombre à virgule flottante
Voici un exemple de fichier de sortie de prédiction par lot avec la colonne cible age
:
{ "instance": { "BPMeds": "0", "diabetes": "0", "diaBP": "65", "cigsPerDay": "45", "prevalentHyp": "hyp_0", "age": "46", "male": "1", "sysBP": "112.5", "glucose": "78", "BMI": "27.48", "TenYearCHD": "FALSE", "totChol": "209", "education": "high", "prevalentStroke": "stroke_0", "heartRate": "75", "currentSmoker": "current_high" }, "prediction": { "value": 44.96103286743164, "lower_bound": 44.61349868774414, "upper_bound": 44.590206146240234 } }
Ce tableau décrit les paramètres obligatoires pour le composant ModelEvaluationRegressionOp
avec un modèle tabulaire :
Paramètre du composant d'évaluation | Obligatoire |
---|---|
target_field_name |
Oui |
prediction_label_column |
Non requis pour les modèles de régression. |
prediction_score_column |
Non requis pour le schéma par défaut. Utilisez prediction.value pour les schémas autres que ceux par défaut. |
evaluation_class_labels |
Non requis pour les modèles de régression. |
Prévision
Pour les modèles de prévision tabulaires, le composant BatchPredictionJob
nécessite d'exclure la colonne cible (vérité terrain) de votre ensemble de données.
Le schéma par défaut inclut les champs suivants :
id
: chaînedisplayNames
: chaînetype
: énumérationtimeSegmentStart
: chaînetimeSegmentEnd
: chaîneconfidence
: nombre à virgule flottante
Voici un exemple de fichier CSV avec sale_dollars
comme colonne cible :
date,store_name,city,zip_code,county,sale_dollars 2020-03-17,Thriftway,,,,774.08999999999992 2020-03-10,Thriftway,,,,1160.67 2020-03-03,Thriftway,,,,2247.24 2020-06-08,New Star / Fort Dodge,,,,753.98 2020-06-01,New Star / Fort Dodge,,,,967.73 2020-01-10,Casey's General Store #1280 / Fort Dodge,,,,1040.92 2020-10-30,KUM & GO #76 / ADAIR,Adair,50002,ADAIR,1387.02
Le composant TargetFieldDataRemoverOp
supprime la colonne cible avant d'envoyer le fichier au composant BatchPredictionJob
:
date,store_name,city,zip_code,county 2020-03-17,Thriftway,nan,nan,nan 2020-03-10,Thriftway,nan,nan,nan 2020-03-03,Thriftway,nan,nan,nan 2020-06-08,New Star / Fort Dodge,nan,nan,nan 2020-06-01,New Star / Fort Dodge,nan,nan,nan 2020-01-10,Casey's General Store #1280 / Fort Dodge,nan,nan,nan 2020-10-30,KUM & GO #76 / ADAIR,Adair,50002.0,ADAIR
Voici un exemple de fichier de sortie de prédiction par lot sans la colonne cible sale_dollars
:
{ "instance": { "content": "gs://kbn-us-central1-test/datasets/text/happy_11556.txt", "mimeType":"text/plain" }, "prediction": { "ids": ["7903916851837534208","3292230833410146304","986387824196452352","2139309328803299328","5598073842623840256","6750995347230687232","4559431178561519616"], "displayNames": ["affection","bonding","achievement","exercise","nature","enjoy_the_moment","leisure"], "confidences": [0.99483216,0.005162797,4.1117933E-6,3.9997E-7,2.4624453E-7,1.9969502E-7,1.16997434E-7] } }
Ce tableau décrit les paramètres obligatoires pour le composant ModelEvaluationForecastingOp
avec un modèle tabulaire :
Paramètre du composant d'évaluation | Obligatoire |
---|---|
target_field_name |
Oui |
prediction_label_column |
Non requis pour les modèles de prévision. |
prediction_score_column |
Non requis pour le schéma par défaut. Utilisez "prediction.value" pour les schémas autres que ceux par défaut. |
evaluation_class_labels |
Non requis pour les modèles de prévision. |
ground_truth_gcs_source |
Oui : le lien Cloud Storage vers l'ensemble de données d'origine avec la colonne cible. |
ground_truth_format |
Oui : format de l'ensemble de données d'origine. Par exemple, "jsonl" , "csv" ou "bigquery" . |
Texte
Classification
Pour les modèles de classification de texte, le composant BatchPredictionJob
nécessite l'exclusion de la colonne cible (vérité terrain) de votre ensemble de données. Vous pouvez utiliser le composant TargetFieldDataRemoverOp
pour un workflow plus efficace.
Le schéma par défaut inclut les champs suivants :
ids
: tableau de chaînesdisplayName
: tableau de chaînesconfidence
: tableau de nombres à virgule flottante
Voici un exemple d'ensemble de données avec label
comme colonne cible :
{ "content": "gs://kbn-us-central1-test/datasets/text/happy_0.txt", "mimeType": "text/plain", "label": "affection" }
Le composant TargetFieldDataRemoverOp
supprime la colonne cible avant d'envoyer le fichier au composant BatchPredictionJob
:
{ "content": "gs://kbn-us-central1-test/datasets/text/happy_0.txt", "mimeType": "text/plain" }
Voici un exemple de fichier de sortie de prédiction par lot sans la colonne cible label
:
{ "instance": { "content": "gs://kbn-us-central1-test/datasets/text/happy_11556.txt", "mimeType":"text/plain" }, "prediction": { "ids": ["7903916851837534208","3292230833410146304","986387824196452352","2139309328803299328","5598073842623840256","6750995347230687232","4559431178561519616"], "displayNames": ["affection","bonding","achievement","exercise","nature","enjoy_the_moment","leisure"], "confidences": [0.99483216,0.005162797,4.1117933E-6,3.9997E-7,2.4624453E-7,1.9969502E-7,1.16997434E-7] } }
Ce tableau décrit les paramètres obligatoires pour le composant ModelEvaluationClassificationOp
avec un modèle de texte :
Paramètre du composant d'évaluation | Obligatoire |
---|---|
target_field_name |
Oui |
prediction_label_column |
Non requis pour le schéma par défaut. Utilisez "prediction.displayNames" pour les schémas autres que ceux par défaut. |
prediction_score_column |
Non requis pour le schéma par défaut. Utilisez "prediction.confidences" pour les schémas autres que ceux par défaut. |
evaluation_class_labels |
Non requis pour le schéma par défaut ou lorsque prediction_label_column est fourni. |
ground_truth_gcs_source |
Oui : le lien Cloud Storage vers l'ensemble de données d'origine avec la colonne cible. |
ground_truth_format |
Oui : format de l'ensemble de données d'origine. Par exemple, "jsonl" , "csv" ou "bigquery" . |
Vidéo
Classification
Pour les modèles de classification de vidéos, le composant BatchPredictionJob
nécessite l'exclusion de la colonne cible (vérité terrain) de votre ensemble de données. Vous pouvez utiliser le composant TargetFieldDataRemoverOp
pour un workflow plus efficace.
Le schéma par défaut inclut les champs suivants :
id
: chaînedisplayName
: chaînetype
: énumérationtimeSegmentStart
: chaînetimeSegmentEnd
: chaîneconfidence
: nombre à virgule flottante
Voici un exemple d'ensemble de données avec ground_truth
comme colonne cible :
{ "content": "gs://automl-video-demo-data/hmdb51/Aerial_Cartwheel_Tutorial_By_Jujimufu_cartwheel_f_nm_np1_ri_med_0.avi", "ground_truth": "cartwheel", "timeSegmentStart": "0.0", "timeSegmentEnd": "inf" }
Le composant TargetFieldDataRemoverOp
supprime la colonne cible avant d'envoyer le fichier au composant BatchPredictionJob
:
{ "content": "gs://automl-video-demo-data/hmdb51/Aerial_Cartwheel_Tutorial_By_Jujimufu_cartwheel_f_nm_np1_ri_med_0.avi", "timeSegmentStart": "0.0", "timeSegmentEnd": "inf" }
Voici un exemple de fichier de sortie de prédiction par lot sans la colonne cible label
:
{ "instance": { "content": "gs://automl-video-demo-data/hmdb51/20_Marine_Corps_Pull_Ups___JimmyDShea_pullup_f_cm_np1_ba_bad_3.avi" "mimeType": "video/avi", "timeSegmentStart": "0.0", "timeSegmentEnd": "inf" }, "prediction": [ { "id":"5015420640832782336", "displayName":"pullup", "type":"segment-classification", "timeSegmentStart":"0s", "timeSegmentEnd":"2.600s", "confidence":0.98152995 }, { "id":"2709577631619088384", "displayName":"cartwheel", "type":"segment-classification", "timeSegmentStart":"0s", "timeSegmentEnd":"2.600s", "confidence":0.0047166348 }, { "id":"403734622405394432", "displayName":"golf", "type":"segment-classification", "timeSegmentStart":"0s", "timeSegmentEnd":"2.600s", "confidence":0.0046260506 }, { "id":"1556656127012241408", "displayName":"ride_horse", "type":"segment-classification", "timeSegmentStart":"0s", "timeSegmentEnd":"2.600s", "confidence":0.004590442 }, { "id":"7321263650046476288", "displayName":"kick_ball", "type":"segment-classification", "timeSegmentStart":"0s", "timeSegmentEnd":"2.600s", "confidence":0.004536863 } ] }
Ce tableau décrit les paramètres obligatoires pour le composant ModelEvaluationClassificationOp
avec un modèle vidéo :
Paramètre du composant d'évaluation | Obligatoire |
---|---|
target_field_name |
Oui |
prediction_label_column |
Non requis pour le schéma par défaut. Utilisez "prediction.displayName" pour les schémas autres que ceux par défaut. |
prediction_score_column |
Non requis pour le schéma par défaut. Utilisez "prediction.confidence" pour les schémas autres que ceux par défaut. |
evaluation_class_labels |
Non requis lorsqu'un schéma par défaut est utilisé ou lorsque prediction_label_column est fourni. |
ground_truth_gcs_source |
Oui : le lien Cloud Storage vers l'ensemble de données d'origine avec la colonne cible. |
ground_truth_format |
Oui : format de l'ensemble de données d'origine. Par exemple, "jsonl" , "csv" ou "bigquery" . |
Modèles entraînés personnalisés
Pour les modèles entraînés personnalisés, le composant BatchPredictionJob
nécessite d'exclure la colonne cible (vérité terrain) de votre ensemble de données. Vous pouvez utiliser le composant TargetFieldDataRemoverOp
pour obtenir un workflow plus efficace.
L'exemple suivant montre un fichier de sortie de prédiction par lot ainsi que les paramètres d'entrée requis pour un modèle de classification tabulaire personnalisé :
Tabulaire
Classification
Le schéma type comprend les champs suivants :
instance
: tableau de données d'entrée dans le même ordre que les colonnes de l'ensemble de données d'entraînement du modèle.prediction
: tableau de données d'entrée dans le même ordre que les colonnes de l'ensemble de données d'entraînement du modèle.
Voici un exemple d'ensemble de données CSV avec species
comme colonne cible :
petal_length,petal_width,sepal_length,sepal_width,species 6.4,2.8,5.6,2.2,2 5.0,2.3,3.3,1.0,1 4.9,2.5,4.5,1.7,2 4.9,3.1,1.5,0.1,0
Le composant TargetFieldDataRemoverOp
supprime la colonne cible avant d'envoyer le fichier au composant de prédiction par lot.
petal_length,petal_width,sepal_length,sepal_width 6.4,2.8,5.6,2.2 5.0,2.3,3.3,1.0 4.9,2.5,4.5,1.7 4.9,3.1,1.5,0.1
Voici un exemple de fichier de sortie de prédiction par lot sans la colonne cible species
:
{ "instance": [5.6, 2.5, 3.9, 1.1], "prediction": [0.0005816521588712931, 0.9989032745361328, 0.0005150380893610418] } { "instance": [5.0, 3.6, 1.4, 0.2], "prediction": [0.999255359172821, 0.000527293945197016, 0.00021737271163146943] } { "instance": [6.0, 2.9, 4.5, 1.5], "prediction": [0.00025063654175028205, 0.9994204044342041, 0.00032893591560423374] }
Ce tableau décrit les paramètres obligatoires pour le composant ModelEvaluationClassificationOp
avec un modèle vidéo :
Paramètre du composant d'évaluation | Obligatoire |
---|---|
target_field_name |
Oui |
prediction_label_column |
Ce champ doit être vide. Cette colonne n'existe pas dans les modèles entraînés personnalisés. |
prediction_score_column |
Non requis pour le schéma par défaut. Ce paramètre est défini automatiquement pour les formats JSONL , CSV ou BIGQUERY . |
evaluation_class_labels |
Oui. Doit être de la même longueur que le tableau de prédiction de sortie. |
ground_truth_gcs_source |
Oui : le lien Cloud Storage vers l'ensemble de données d'origine avec la colonne cible. |
ground_truth_format |
Oui : format de l'ensemble de données d'origine. Par exemple, "jsonl" , "csv" ou "bigquery" . |
Évaluations de modèles sans prédictions par lot générées par Vertex AI
Vous pouvez utiliser un composant de pipeline d'évaluation de modèle avec une prédiction par lots que vous n'avez pas générée dans Vertex AI. Toutefois, notez que l'entrée pour le composant du pipeline d'évaluation du modèle doit être un répertoire de prédictions par lot contenant des fichiers correspondant aux préfixes suivants :
prediction.results-
explanation.results-
predictions_
Documentation de référence de l'API
Pour en savoir plus sur les composants, consultez la page de référence du SDK des composants du pipeline Google Cloud pour les composants d'évaluation de modèle.
Pour obtenir des exemples d'utilisation des composants d'évaluation de modèle, consultez les notebooks répertoriés dans la section Créer une évaluation.
Historique des versions et notes de version
Pour en savoir plus sur l'historique des versions et les modifications apportées au SDK des composants du pipeline Google Cloud, consultez les notes de version du SDK des composants du pipeline Google Cloud.