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 plataforma de agentes.

A plataforma de agente oferece os seguintes componentes de 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 modelo compatíveis
ModelEvaluationClassificationOp
  • AutoML tabular ou de imagem
  • 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 plataforma de agentes do Gemini Enterprise 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ório
    target_field_name Sim
    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ório
    target_field_name Sim
    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ório
    target_field_name Sim
    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".

    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:

    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 treinado de forma personalizada:

    Parâmetro do componente de avaliação Obrigatório
    target_field_name Sim
    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 plataforma do agente

    É possível usar um componente de pipeline de avaliação de modelo com uma previsão em lote que você não gerou na Agent Platform. 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 doGoogle Cloud .