Componentes de avaliação de modelos

Os componentes de avaliação de modelos usam dados reais e resultados de previsões em lote como entrada e geram métricas de avaliação. Os dados de verdade fundamental são dados "corretamente etiquetados" determinados por humanos e são normalmente fornecidos como o campo de destino no conjunto de dados de teste que usou para preparar o modelo. Para mais informações, consulte o artigo Avaliação de modelos no Vertex AI.

O Vertex AI fornece os seguintes componentes de avaliação de modelos:

Apoio técnico do tipo de modelo

A tabela seguinte mostra os tipos de modelos suportados para cada componente de avaliação de modelos:

Componente de avaliação de modelos Tipos de modelos suportados
ModelEvaluationClassificationOp
  • AutoML tabular, de imagens e de vídeo
  • Tabelar personalizado
  • ModelEvaluationRegressionOp
  • AutoML tabular
  • Tabelar personalizado
  • ModelEvaluationForecastingOp
  • AutoML tabular
  • Remova o campo de destino

    Para alguns tipos de modelos, o componente BatchPredictionJob requer que exclua a coluna de destino (dados reais) do seu conjunto de dados.

    Configure e formate fatias para o seu conjunto de dados tabulares

    Uma fatia é um subconjunto de dados tabulares com caraterísticas especificadas. As métricas segmentadas oferecem métricas de avaliação mais detalhadas para modelos de classificação de preparação personalizados e tabulares do AutoML.

    Por exemplo, considere um conjunto de dados de adoção de animais de estimação em que um modelo é preparado para prever se um animal de estimação vai ser adotado no prazo de uma semana. Embora seja útil analisar as métricas para o conjunto de dados completo, pode ter interesse em métricas relacionadas com a espécie e a idade do animal de estimação. Por outras palavras, tem interesse no seguinte subconjunto do conjunto de dados:

    Funcionalidade Valores
    age (in years) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
    species "cão", "gato", "coelho"

    Esta análise detalhada pode ser útil para identificar onde o modelo pode ser mais propenso a erros ou garantir que o modelo tem um bom desempenho em subconjuntos críticos dos dados.

    Configure fatias

    Para configurar uma fatia, crie um ficheiro JSON com a seguinte configuração:

    {
      "FEATURE": {
        "KIND": {
          CONFIG
        }
      }
    }
    

    Onde:

    • FEATURE é uma funcionalidade para a qual quer criar uma fatia. Por exemplo, age.

    • KIND é uma das seguintes opções:

      • value

        value cria uma única fatia num único valor de uma funcionalidade. Especifique CONFIG como um par de chave-valor em que a chave é float_value ou string_value. Por exemplo, "float_value": 1.0.

        A configuração de exemplo seguinte cria uma única fatia que contém dados com o age de 1:

        {
          "age": {
            "value": {
              "float_value": 1.0
            }
          }
        }
      • range

        range cria uma única fatia que inclui dados dentro de um intervalo especificado. Especifique CONFIG como dois pares de chave-valor em que as chaves são low e high.

        A configuração de exemplo seguinte cria uma única fatia que contém dados em que o age é qualquer valor entre 1 e 3:

        {
          "age": {
            "range": {
              "low": 1,
              "high": 3
            }
          }
        }
      • all_values

        all_values cria uma fatia separada para cada etiqueta possível da funcionalidade. Especifique CONFIG como "value": true.

        A seguinte configuração de exemplo cria três fatias, uma para cada uma das seguintes opções: "dog", "cat" e "rabbit":

        {
          "species": {
            "all_values": {
              "value": true
            }
          }
        }

    Também pode usar várias funcionalidades para criar uma ou mais divisões.

    A configuração seguinte cria uma única fatia que contém dados em que o age está entre 1 e 3 e o species é "dog":

    {
      "age": {
        "range": {
          "low": 1,
          "high": 3
        }
      },
      "species": {
        "value": {
          "string_value": "dog"
        }
      }
    }
    

    A seguinte configuração cria várias divisões, uma para cada espécie única no conjunto de dados, em que age é 1.

    {
      "species": {
        "all_values": {
          "value": true
        }
      },
      "age": {
        "value": {
          "float_value": 1.0
        }
      }
    }
    

    As segmentações resultantes contêm os seguintes dados do conjunto de dados de exemplo:

    • Fatia 1: age:1 e species:"dog"

    • Setor 2: age:1 e species:"cat"

    • Setor 3: age:1 e species:"rabbit"

    Formate fatias

    Para formatar fatias para o componente ModelEvaluationClassificationOp, faça o seguinte:

    1. Crie um slicing_spec. Por exemplo:

      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. Crie uma lista para armazenar as configurações de segmentação. Por exemplo:

      slicing_specs = []
    3. Formate cada slicing_spec como JSON ou um dicionário. Por exemplo:

      slicing_spec_json = json_format.MessageToJson(slicing_spec)
      
      slicing_spec_dict = json_format.MessageToDict(slicing_spec)
    4. Combine cada slicing_spec numa lista. Por exemplo:

      slicing_specs.append(slicing_spec_json)
    5. Transmita slicing_specs como um parâmetro ao componente ModelEvaluationClassificationOp. Por exemplo:

      ModelEvaluationClassificationOp(slicing_specs=slicing_specs)

    Formate as divisões da configuração das métricas de equidade

    Para avaliar a imparcialidade do seu modelo, use os seguintes componentes:

    Para formatar as fatias para os componentes DetectDataBiasOp e DetectModelBiasOp, faça o seguinte:

    1. Crie um BiasConfig. Por exemplo:

      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. Crie uma lista para armazenar as configurações de parcialidade. Por exemplo:

      bias_configs = []
    3. Formate cada bias_config como JSON ou um dicionário. Por exemplo:

      bias_config_json = json_format.MessageToJson(bias_config)
      
      bias_config_dict = json_format.MessageToDict(bias_config)
    4. Combine cada bias_config numa lista. Por exemplo:

      bias_configs.append(bias_config_json)
    5. Transmita bias_configs como um parâmetro ao componente DetectDataBiasOp ou DetectModelBiasOp. Por exemplo:

      DetectDataBiasOp(bias_configs=bias_configs)
      
      DetectModelBiasOp(bias_configs=bias_configs)

    Parâmetros de entrada obrigatórios

    Os parâmetros de entrada necessários para os componentes de avaliação de modelos variam consoante o tipo de modelo que está a avaliar.

    Modelos da AutoML

    Quando prepara modelos do AutoML, o Vertex AI usa esquemas predefinidos. Alguns parâmetros de entrada para os componentes de avaliação do modelo só são necessários se tiver usado um esquema não predefinido para preparar o modelo.

    Pode ver e transferir ficheiros de esquemas a partir da seguinte localização do Cloud Storage:
    gs://google-cloud-aiplatform/schema/modelevaluation/

    Os separadores seguintes mostram exemplos de ficheiros de saída de previsão em lote e parâmetros de entrada necessários para cada tipo de modelo:

    Tabular

    Classificação

    O esquema predefinido inclui os seguintes campos:

    • scores: matriz
    • classes: matriz

    Segue-se um exemplo de um ficheiro de saída de previsão em lote com a coluna de destino de 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"]
        }
    }
              

    Esta tabela descreve os parâmetros necessários para o componente ModelEvaluationClassificationOp com um modelo tabular:

    Parâmetro do componente de avaliação Obrigatória
    target_field_name Sim
    prediction_label_column Não é necessário para o esquema predefinido.
    Use prediction.classes para esquemas não predefinidos.
    prediction_score_column Não é necessário para o esquema predefinido.
    Use prediction.scores para esquemas não predefinidos.
    evaluation_class_labels Não é necessário para o esquema predefinido.
    Use ["0","1"] para esquemas não predefinidos.

    Regressão

    O esquema predefinido inclui os seguintes campos:

    • value: flutuação
    • lower_bound: flutuação
    • upper_bound: flutuação

    Segue-se um exemplo de um ficheiro de saída de previsão em lote com a coluna de destino de 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
      }
    }
              

    Esta tabela descreve os parâmetros necessários para o componente ModelEvaluationRegressionOp com um modelo tabular:

    Parâmetro do componente de avaliação Obrigatória
    target_field_name Sim
    prediction_label_column Não é obrigatório para modelos de regressão.
    prediction_score_column Não é necessário para o esquema predefinido.
    Use prediction.value para esquemas não predefinidos.
    evaluation_class_labels Não é obrigatório para modelos de regressão.

    Previsão

    Para modelos de previsão tabulares, o componente BatchPredictionJob requer que exclua a coluna de destino (dados reais) do seu conjunto de dados.

    O esquema predefinido inclui os seguintes campos:

    • id: string
    • displayNames: string
    • type: enum
    • timeSegmentStart: string
    • timeSegmentEnd: string
    • confidence: flutuação

    Segue-se um exemplo de um ficheiro CSV com sale_dollars como coluna de destino:

    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
              

    O componente TargetFieldDataRemoverOp remove a coluna de destino antes de enviar o ficheiro para o componente 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
              

    Segue-se um exemplo de um ficheiro de saída de previsão em lote sem a coluna de destino de 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]
      }
    }
              

    Esta tabela descreve os parâmetros necessários para o componente ModelEvaluationForecastingOp com um modelo tabular:

    Parâmetro do componente de avaliação Obrigatória
    target_field_name Sim
    prediction_label_column Não é obrigatório para modelos de previsão.
    prediction_score_column Não é necessário para o esquema predefinido.
    Use "prediction.value" para esquemas não predefinidos.
    evaluation_class_labels Não é obrigatório para modelos de previsão.
    ground_truth_gcs_source Sim: o link do Cloud Storage para o conjunto de dados original com a coluna de destino.
    ground_truth_format Sim: o formato do conjunto de dados original. Por exemplo, "jsonl", "csv" ou "bigquery".

    Vídeo

    Classificação

    Para modelos de classificação de vídeo, o componente BatchPredictionJob requer que exclua a coluna de destino (dados reais) do seu conjunto de dados. Pode usar o componente TargetFieldDataRemoverOp para um fluxo de trabalho mais eficiente.

    O esquema predefinido inclui os seguintes campos:

    • id: string
    • displayName: string
    • type: enum
    • timeSegmentStart: string
    • timeSegmentEnd: string
    • confidence: flutuação

    Segue-se um exemplo de conjunto de dados com ground_truth como coluna de destino:

    {
      "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"
    }
              

    O componente TargetFieldDataRemoverOp remove a coluna de destino antes de enviar o ficheiro para o componente 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"
    }
              

    Segue-se um exemplo de um ficheiro de saída de previsão em lote sem a coluna de destino de 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
        }
      ]
    }
              

    Esta tabela descreve os parâmetros necessários para o componente ModelEvaluationClassificationOp com um modelo de vídeo:

    Parâmetro do componente de avaliação Obrigatória
    target_field_name Sim
    prediction_label_column Não é necessário para o esquema predefinido.
    Use "prediction.displayName" para esquemas não predefinidos.
    prediction_score_column Não é necessário para o esquema predefinido.
    Use "prediction.confidence" para esquemas não predefinidos.
    evaluation_class_labels Não é necessário quando é usado um esquema predefinido ou quando prediction_label_column é fornecido.
    ground_truth_gcs_source Sim: o link do Cloud Storage para o conjunto de dados original com a coluna de destino.
    ground_truth_format Sim: o formato do conjunto de dados original. Por exemplo, "jsonl", "csv" ou "bigquery".

    Modelos preparados personalizados

    Para modelos personalizados preparados, o componente BatchPredictionJob requer que exclua a coluna de destino (dados reais) do seu conjunto de dados. Pode usar o componente TargetFieldDataRemoverOp para um fluxo de trabalho mais eficiente.

    O exemplo seguinte mostra um ficheiro de saída de previsão em lote e os parâmetros de entrada necessários para um modelo de classificação tabular preparado de forma personalizada:

    Tabular

    Classificação

    O esquema típico inclui os seguintes campos:

    • instance: matriz de dados de entrada na mesma ordem que as colunas do conjunto de dados de preparação do modelo.
    • prediction: matriz de dados de entrada na mesma ordem que as colunas do conjunto de dados de preparação do modelo.

    Segue-se um exemplo de conjunto de dados CSV com species como coluna de destino:

    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
              

    O componente TargetFieldDataRemoverOp remove a coluna de destino antes de enviar o ficheiro para o componente de previsão em lote:

    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
              

    Segue-se um exemplo de um ficheiro de saída de previsão em lote sem a coluna de destino de 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]
    }
              

    Esta tabela descreve os parâmetros necessários para o componente ModelEvaluationClassificationOp com um modelo de vídeo:

    Parâmetro do componente de avaliação Obrigatória
    target_field_name Sim
    prediction_label_column Tem de estar vazia. Esta coluna não existe em modelos preparados de forma personalizada.
    prediction_score_column Não é obrigatório para o esquema predefinido; é definido automaticamente para os formatos JSONL, CSV ou BIGQUERY.
    evaluation_class_labels Sim. Tem de ter o mesmo comprimento que a matriz de previsão de saída.
    ground_truth_gcs_source Sim: o link do Cloud Storage para o conjunto de dados original com a coluna de destino.
    ground_truth_format Sim: o formato do conjunto de dados original. Por exemplo, "jsonl", "csv" ou "bigquery".

    Avaliações de modelos sem previsões em lote geradas pela Vertex AI

    Pode usar um componente de pipeline de avaliação de modelos com uma previsão em lote que não gerou no Vertex AI. No entanto, tenha em atenção que a entrada do componente da pipeline de avaliação do modelo tem de ser um diretório de previsão em lote que contenha ficheiros que correspondam aos seguintes prefixos:

    • prediction.results-

    • explanation.results-

    • predictions_

    Referência da API

    Histórico de versões e notas de lançamento

    Para saber mais sobre o histórico de versões e as alterações ao Google Cloud SDK de componentes de pipeline, consulte as Google Cloud notas de lançamento do SDK de componentes de pipeline.