Composants d'évaluation de modèle

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
  • Tabulaire, image, texte et vidéo AutoML
  • Tabulaire personnalisé
  • ModelEvaluationRegressionOp
  • Tabulaire AutoML
  • Tabulaire personnalisé
  • ModelEvaluationForecastingOp
  • Tabulaire AutoML
  • 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é est float_value ou string_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 sont low et high.

        L'exemple de configuration suivant crée une tranche unique contenant des données où la caractéristique age est une valeur comprise entre 1 et 3 :

        {
          "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 et species:"dog"

    • Tranche 2 : age:1 et species:"cat"

    • Tranche 3 : age:1 et species:"rabbit"

    Formater des tranches

    Pour formater des tranches pour le composant ModelEvaluationClassificationOp, procédez comme suit :

    1. 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') ) })
    2. Créez une liste pour stocker les configurations de tranches. Exemple :

      slicing_specs = []
    3. 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)
    4. Combinez chaque slicing_spec dans une liste. Exemple :

      slicing_specs.append(slicing_spec_json)
    5. Transmettez slicing_specs en tant que paramètre au composant ModelEvaluationClassificationOp. 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 :

    Pour formater vos tranches pour les composants DetectDataBiasOp et DetectModelBiasOp, procédez comme suit :

    1. 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') ) }))
    2. Créez une liste pour stocker les configurations de biais. Exemple :

      bias_configs = []
    3. 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)
    4. Combinez chaque bias_config dans une liste. Exemple :

      bias_configs.append(bias_config_json)
    5. Transmettez bias_configs en tant que paramètre au composant DetectDataBiasOp ou DetectModelBiasOp. 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 : tableau
    • classes : 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 flottante
    • lower_bound : nombre à virgule flottante
    • upper_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îne
    • displayNames : chaîne
    • type : énumération
    • timeSegmentStart : chaîne
    • timeSegmentEnd : chaîne
    • confidence : 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înes
    • displayName : tableau de chaînes
    • confidence : 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îne
    • displayName : chaîne
    • type : énumération
    • timeSegmentStart : chaîne
    • timeSegmentEnd : chaîne
    • confidence : 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

    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.