Componentes de avaliação do modelo

Os componentes da avaliação de modelo usam informações empíricas e de previsão em lote como entrada e geram métricas de avaliação. Os dados de informações empíricas são dados "identificados corretamente" conforme determinado por humanos. Eles geralmente são fornecidos como o campo de destino no conjunto de dados de teste usado para treinar o modelo. Para mais informações, consulte Avaliação de modelos na Vertex AI.

A Vertex AI fornece os seguintes componentes da avaliação de modelo:

Compatibilidade com o tipo de modelo

A tabela a seguir mostra os tipos de modelo compatíveis com cada componente de avaliação de modelo:

Componente de avaliação do modelo Tipos de modelos compatíveis
ModelEvaluationClassificationOp
  • AutoML tabular, imagem, texto, vídeo
  • Tabela personalizada
  • ModelEvaluationRegressionOp
  • AutoML tabular
  • Tabela personalizada
  • ModelEvaluationForecastingOp
  • AutoML tabular
  • Remover o campo de destino

    Para alguns tipos de modelo, o componente BatchPredictionJob exige que você exclua a coluna de destino (informações empíricas) do conjunto de dados.

    Configurar e formatar frações do conjunto de dados tabular

    Um setor é um subconjunto de dados tabulares com características específicas. As métricas divididas oferecem métricas de avaliação mais granulares para modelos de classificação de treinamento tabular e personalizado do AutoML.

    Por exemplo, considere um conjunto de dados de adoção de animais de estimação em que um modelo é treinado para prever se um animal de estimação será adotado em uma semana. Embora seja útil analisar métricas para todo o conjunto de dados, você pode estar interessado em métricas relacionadas à espécie e idade do animal de estimação. Em outras palavras, você tem interesse no seguinte subconjunto do conjunto de dados:

    Recurso Valores
    age (in years) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
    species [“cão”, “gato”, “peixe”]

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

    Configurar partes

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

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

    Em que:

    • FEATURE é um recurso para criar uma fatia. Por exemplo, age.

    • KIND é um destes:

      • value

        value cria uma única fatia em um único valor de recurso. 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 a seguir cria uma única fatia contendo dados com 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.

        O exemplo de configuração a seguir cria uma única fatia contendo dados em que age é qualquer valor entre 1 e 3:

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

        all_values cria uma fatia separada para cada rótulo possível para o recurso. Especifique CONFIG como "value": true.

        A configuração de exemplo a seguir cria três frações, uma para "dog", "cat" e "rabbit":

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

    Você também pode usar vários recursos para criar uma ou mais fatias.

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

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

    A configuração a seguir cria várias fatias, uma para cada espécie no conjunto de dados, em que age é 1.

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

    As fatias resultantes contêm os seguintes dados do conjunto de dados de exemplo:

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

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

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

    Formatar fatias

    Para formatar frações do componente ModelEvaluationClassificationOp, faça o seguinte:

    1. Crie um slicing_spec. 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 fatia. Exemplo:

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

      slicing_spec_json = json_format.MessageToJson(slicing_spec)
      
      slicing_spec_dict = json_format.MessageToDict(slicing_spec)
    4. Combine cada slicing_spec em uma lista. Exemplo:

      slicing_specs.append(slicing_spec_json)
    5. Transmita slicing_specs como um parâmetro para o componente ModelEvaluationClassificationOp. Exemplo:

      ModelEvaluationClassificationOp(slicing_specs=slicing_specs)

    Parcelas de configuração das métricas de imparcialidade de formato

    Para avaliar seu modelo paraimparcialidade, use os seguintes componentes:

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

    1. Crie um BiasConfig. 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 viés. Exemplo:

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

      bias_config_json = json_format.MessageToJson(bias_config)
      
      bias_config_dict = json_format.MessageToDict(bias_config)
    4. Combine cada bias_config em uma lista. Exemplo:

      bias_configs.append(bias_config_json)
    5. Transmita bias_configs como um parâmetro para o componente DetectDataBiasOp ou DetectModelBiasOp. 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 componentes de avaliação de modelo variam de acordo com o tipo de modelo que você está avaliando.

    Modelos de AutoML

    Ao treinar modelos do AutoML, a Vertex AI usa esquemas padrão. Alguns parâmetros de entrada para os componentes de avaliação de modelo só serão necessários se você tiver usado um esquema não padrão para treinar o modelo.

    É possível visualizar e fazer o download de arquivos de esquema no seguinte local do Cloud Storage:
    gs://google-cloud-aiplatform/schema/modelevaluation/

    As guias a seguir mostram exemplos de arquivos de saída de previsão em lote e os parâmetros de entrada necessários para cada tipo de modelo:

    Tabular

    Classificação

    O esquema padrão contém os seguintes campos:

    • scores: matriz
    • classes: matriz

    Veja a seguir um exemplo de arquivo de saída de previsão em lote com a coluna de destino 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 Yes
    prediction_label_column Não é obrigatório para o esquema padrão.
    Use prediction.classes para esquemas não padrão.
    prediction_score_column Não é obrigatório para o esquema padrão.
    Use prediction.scores para esquemas não padrão.
    evaluation_class_labels Não é obrigatório para o esquema padrão.
    Use ["0","1"] para esquemas não padrão.

    Regressão

    O esquema padrão contém os seguintes campos:

    • value: ponto flutuante
    • lower_bound: ponto flutuante
    • upper_bound: ponto flutuante

    Veja a seguir um exemplo de arquivo de saída de previsão em lote com a coluna de destino 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 Yes
    prediction_label_column Não é obrigatório para modelos de regressão.
    prediction_score_column Não é obrigatório para o esquema padrão.
    Use prediction.value para esquemas não padrão.
    evaluation_class_labels Não é obrigatório para modelos de regressão.

    Previsão

    Para modelos de estimativa tabular, o componente BatchPredictionJob exige que você exclua a coluna de destino (informações empíricas) do conjunto de dados.

    O esquema padrão contém os seguintes campos:

    • id: string
    • displayNames: string
    • type: enum
    • timeSegmentStart: string
    • timeSegmentEnd: string
    • confidence: ponto flutuante

    Veja a seguir um exemplo de arquivo 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 arquivo 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
              

    Veja a seguir um exemplo de arquivo 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 Yes
    prediction_label_column Não é obrigatório para modelos de previsão.
    prediction_score_column Não é obrigatório para o esquema padrão.
    Use "prediction.value" para esquemas não padrão.
    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".

    Texto

    Classificação

    Para modelos de classificação de texto, o componente BatchPredictionJob exige que você exclua a coluna de destino (informações empíricas) do conjunto de dados. É possível usar o componente TargetFieldDataRemoverOp para ter um fluxo de trabalho mais eficiente.

    O esquema padrão contém os seguintes campos:

    • ids: matriz de strings
    • displayName: matriz de strings
    • confidence: matriz de pontos flutuantes

    Veja a seguir um conjunto de dados de exemplo com label como coluna de destino:

    {
      "content": "gs://kbn-us-central1-test/datasets/text/happy_0.txt",
      "mimeType": "text/plain",
      "label": "affection"
    }
              

    O componente TargetFieldDataRemoverOp remove a coluna de destino antes de enviar o arquivo para o componente BatchPredictionJob:

    {
      "content": "gs://kbn-us-central1-test/datasets/text/happy_0.txt",
      "mimeType": "text/plain"
    }
              

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

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

    Parâmetro do componente de avaliação Obrigatória
    target_field_name Yes
    prediction_label_column Não é obrigatório para o esquema padrão.
    Use "prediction.displayNames" para esquemas não padrão.
    prediction_score_column Não é obrigatório para o esquema padrão.
    Use "prediction.confidences" para esquemas não padrão.
    evaluation_class_labels Não é necessário para o esquema padrão 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".

    Vídeo

    Classificação

    Para modelos de classificação de vídeo, o componente BatchPredictionJob exige que você exclua a coluna de destino (informações empíricas) do seu conjunto de dados. É possível usar o componente TargetFieldDataRemoverOp para ter um fluxo de trabalho mais eficiente.

    O esquema padrão contém os seguintes campos:

    • id: string
    • displayName: string
    • type: enum
    • timeSegmentStart: string
    • timeSegmentEnd: string
    • confidence: ponto flutuante

    Veja a seguir um conjunto de dados de exemplo 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 arquivo 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"
    }
              

    Veja a seguir um exemplo de arquivo 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 Yes
    prediction_label_column Não é obrigatório para o esquema padrão.
    Use "prediction.displayName" para esquemas não padrão.
    prediction_score_column Não é obrigatório para o esquema padrão.
    Use "prediction.confidence" para esquemas não padrão.
    evaluation_class_labels Não é obrigatório quando um esquema padrão é usado 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 treinados e personalizados

    Para modelos treinados de maneira personalizada, o componente BatchPredictionJob exige que você exclua a coluna de destino (informações empíricas) do conjunto de dados. É possível usar o componente TargetFieldDataRemoverOp para ter um fluxo de trabalho mais eficiente.

    Veja no exemplo a seguir um arquivo de saída de previsão em lote e os parâmetros de entrada necessários para um modelo de classificação tabular personalizado treinado:

    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 treinamento de modelo.
    • prediction: matriz de dados de entrada na mesma ordem que as colunas do conjunto de dados de treinamento de modelo.

    Veja a seguir 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 arquivo 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
              

    Veja a seguir um exemplo de arquivo 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 Yes
    prediction_label_column Precisa estar vazio. Essa coluna não existe em modelos treinados personalizados.
    prediction_score_column Não é obrigatório para o esquema padrão. É definido automaticamente para os formatos JSONL, CSV ou BIGQUERY.
    evaluation_class_labels Sim. Precisa ter o mesmo tamanho da 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 modelo sem previsões em lote geradas pela Vertex AI

    É possível usar um componente de pipeline de avaliação de modelo com uma previsão em lote que você não gerou na Vertex AI. No entanto, observe que a entrada do componente de pipeline de avaliação de modelo precisa ser um diretório de previsão em lote que contém os arquivos que correspondem aos seguintes prefixos:

    • prediction.results-

    • explanation.results-

    • predictions_

    Referência da API

    Histórico de versões e notas da versão

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