Componentes de la evaluación de modelos

Los componentes de evaluación de modelos toman como entrada los resultados de las etiquetas validadas en el terreno y de las predicciones por lotes y generan métricas de evaluación. Los datos de verdad fundamental son datos "etiquetados correctamente" por personas y, por lo general, se proporcionan como el campo de destino en el conjunto de datos de prueba que has usado para entrenar el modelo. Para obtener más información, consulta Evaluación de modelos en Vertex AI.

Vertex AI proporciona los siguientes componentes de evaluación de modelos:

Compatibilidad con tipos de modelos

En la siguiente tabla se muestran los tipos de modelos admitidos para cada componente de evaluación de modelos:

Componente de evaluación de modelos Tipos de modelos admitidos
ModelEvaluationClassificationOp
  • AutoML tabular, de imagen y de vídeo
  • Tabular personalizado
  • ModelEvaluationRegressionOp
  • AutoML tabular
  • Tabular personalizado
  • ModelEvaluationForecastingOp
  • AutoML tabular
  • Quitar el campo de destino

    En algunos tipos de modelos, el componente BatchPredictionJob requiere que excluyas la columna de destino (datos verificados) de tu conjunto de datos.

    Configurar y dar formato a las porciones de un conjunto de datos tabulares

    Una porción es un subconjunto de datos tabulares con características específicas. Las métricas segmentadas ofrecen métricas de evaluación más detalladas para los modelos de clasificación de entrenamiento personalizado y tabular de AutoML.

    Por ejemplo, supongamos que tenemos un conjunto de datos de adopción de mascotas en el que se entrena un modelo para predecir si una mascota se adoptará en una semana. Aunque es útil consultar las métricas de todo el conjunto de datos, puede que le interesen las métricas relacionadas con la especie y la edad de la mascota. Es decir, te interesa el siguiente subconjunto del conjunto de datos:

    Función Valores
    age (in years) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
    species "perro", "gato", "conejo"

    Este análisis detallado puede ser útil para identificar dónde puede ser más propenso a errores el modelo o para asegurarse de que funciona bien en subconjuntos de datos críticos.

    Configurar porciones

    Para configurar un slice, crea un archivo JSON con la siguiente configuración:

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

    Donde:

    • FEATURE es una función para la que quieres crear una porción. Por ejemplo, age.

    • KIND es uno de los siguientes elementos:

      • value

        value crea una sola porción en un solo valor de una característica. Especifica CONFIG como par clave-valor, donde la clave es float_value o string_value. Por ejemplo, "float_value": 1.0.

        La siguiente configuración de ejemplo crea una sola porción que contiene datos con el age de 1:

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

        range crea una sola porción que incluye los datos de un intervalo específico. Especifique CONFIG como dos pares clave-valor en los que las claves sean low y high.

        En la siguiente configuración de ejemplo se crea una sola porción que contiene datos en los que age es cualquier valor entre 1 y 3:

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

        all_values crea una porción independiente para cada etiqueta posible de la función. Especifica CONFIG como "value": true.

        En la siguiente configuración de ejemplo se crean tres segmentos, uno para "dog", "cat" y "rabbit":

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

    También puedes usar varias funciones para crear uno o varios segmentos.

    La siguiente configuración crea una sola porción que contiene datos en los que el age está entre 1 y 3, y el species es "dog":

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

    La siguiente configuración crea varias porciones, una por cada especie única del conjunto de datos, donde age es 1.

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

    Los segmentos resultantes contienen los siguientes datos del conjunto de datos de ejemplo:

    • Porción 1: age:1 y species:"dog"

    • Sector 2: age:1 y species:"cat"

    • Porción 3: age:1 y species:"rabbit"

    Dar formato a las porciones

    Para dar formato a las porciones del componente ModelEvaluationClassificationOp, sigue estos pasos:

    1. Crea un slicing_spec. Por ejemplo:

      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. Crea una lista para almacenar las configuraciones de los segmentos. Por ejemplo:

      slicing_specs = []
    3. Da formato a cada slicing_spec como JSON o diccionario. Por ejemplo:

      slicing_spec_json = json_format.MessageToJson(slicing_spec)
      
      slicing_spec_dict = json_format.MessageToDict(slicing_spec)
    4. Combina cada slicing_spec en una lista. Por ejemplo:

      slicing_specs.append(slicing_spec_json)
    5. Transfiere slicing_specs como parámetro al componente ModelEvaluationClassificationOp. Por ejemplo:

      ModelEvaluationClassificationOp(slicing_specs=slicing_specs)

    Formatear las porciones de configuración de las métricas de equidad

    Para evaluar la equidad de tu modelo, usa los siguientes componentes:

    Para dar formato a tus porciones para los componentes DetectDataBiasOp y DetectModelBiasOp, haz lo siguiente:

    1. Crea un BiasConfig. Por ejemplo:

      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. Crea una lista para almacenar las configuraciones de sesgo. Por ejemplo:

      bias_configs = []
    3. Da formato a cada bias_config como JSON o diccionario. Por ejemplo:

      bias_config_json = json_format.MessageToJson(bias_config)
      
      bias_config_dict = json_format.MessageToDict(bias_config)
    4. Combina cada bias_config en una lista. Por ejemplo:

      bias_configs.append(bias_config_json)
    5. Transfiere bias_configs como parámetro al componente DetectDataBiasOp o DetectModelBiasOp. Por ejemplo:

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

    Parámetros de entrada obligatorios

    Los parámetros de entrada necesarios para los componentes de evaluación de modelos varían en función del tipo de modelo que estés evaluando.

    Modelos de AutoML

    Cuando se entrenan modelos de AutoML, Vertex AI usa esquemas predeterminados. Algunos parámetros de entrada de los componentes de evaluación del modelo solo son obligatorios si has usado un esquema no predeterminado para entrenar el modelo.

    Puedes ver y descargar archivos de esquema desde la siguiente ubicación de Cloud Storage:
    gs://google-cloud-aiplatform/schema/modelevaluation/

    En las siguientes pestañas se muestran ejemplos de archivos de salida de predicciones por lotes y los parámetros de entrada necesarios para cada tipo de modelo:

    Tabular

    Clasificación

    El esquema predeterminado incluye los siguientes campos:

    • scores: array
    • classes: array

    A continuación, se muestra un ejemplo de un archivo de salida de predicción por lotes con la columna 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"]
        }
    }
              

    En esta tabla se describen los parámetros obligatorios del componente ModelEvaluationClassificationOp con un modelo tabular:

    Parámetro del componente de evaluación Obligatorio
    target_field_name
    prediction_label_column No es necesario para el esquema predeterminado.
    Usa prediction.classes para los esquemas que no sean predeterminados.
    prediction_score_column No es necesario para el esquema predeterminado.
    Usa prediction.scores para los esquemas que no sean predeterminados.
    evaluation_class_labels No es necesario para el esquema predeterminado.
    Usa ["0","1"] para los esquemas que no sean predeterminados.

    Regresión

    El esquema predeterminado incluye los siguientes campos:

    • value: float
    • lower_bound: float
    • upper_bound: float

    A continuación, se muestra un ejemplo de un archivo de salida de predicción por lotes con la columna 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
      }
    }
              

    En esta tabla se describen los parámetros obligatorios del componente ModelEvaluationRegressionOp con un modelo tabular:

    Parámetro del componente de evaluación Obligatorio
    target_field_name
    prediction_label_column No es obligatorio para los modelos de regresión.
    prediction_score_column No es necesario para el esquema predeterminado.
    Usa prediction.value para los esquemas que no sean predeterminados.
    evaluation_class_labels No es obligatorio para los modelos de regresión.

    Previsión

    En el caso de los modelos de previsión tabulares, el componente BatchPredictionJob requiere que excluyas la columna de destino (datos verificados) de tu conjunto de datos.

    El esquema predeterminado incluye los siguientes campos:

    • id: cadena
    • displayNames: cadena
    • type: enum
    • timeSegmentStart: cadena
    • timeSegmentEnd: cadena
    • confidence: float

    A continuación se muestra un ejemplo de archivo CSV con sale_dollars como columna 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
              

    El componente TargetFieldDataRemoverOp elimina la columna de destino antes de enviar el archivo al 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
              

    A continuación, se muestra un ejemplo de un archivo de salida de predicción por lotes sin la columna de destino 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]
      }
    }
              

    En esta tabla se describen los parámetros obligatorios del componente ModelEvaluationForecastingOp con un modelo tabular:

    Parámetro del componente de evaluación Obligatorio
    target_field_name
    prediction_label_column No es necesario para los modelos de previsión.
    prediction_score_column No es necesario para el esquema predeterminado.
    Usa "prediction.value" para los esquemas que no sean predeterminados.
    evaluation_class_labels No es necesario para los modelos de previsión.
    ground_truth_gcs_source Sí: el enlace de Cloud Storage al conjunto de datos original con la columna de destino.
    ground_truth_format Sí: el formato del conjunto de datos original. Por ejemplo, "jsonl", "csv" o "bigquery".

    Vídeo

    Clasificación

    En los modelos de clasificación de vídeo, el componente BatchPredictionJob requiere que excluyas la columna de destino (datos verificados) de tu conjunto de datos. Puedes usar el componente TargetFieldDataRemoverOp para que el flujo de trabajo sea más eficiente.

    El esquema predeterminado incluye los siguientes campos:

    • id: cadena
    • displayName: cadena
    • type: enum
    • timeSegmentStart: cadena
    • timeSegmentEnd: cadena
    • confidence: float

    A continuación, se muestra un ejemplo de un conjunto de datos con ground_truth como columna 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"
    }
              

    El componente TargetFieldDataRemoverOp elimina la columna de destino antes de enviar el archivo al 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"
    }
              

    A continuación, se muestra un ejemplo de un archivo de salida de predicción por lotes sin la columna de destino 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
        }
      ]
    }
              

    En esta tabla se describen los parámetros obligatorios del componente ModelEvaluationClassificationOp con un modelo de vídeo:

    Parámetro del componente de evaluación Obligatorio
    target_field_name
    prediction_label_column No es necesario para el esquema predeterminado.
    Usa "prediction.displayName" para los esquemas que no sean predeterminados.
    prediction_score_column No es necesario para el esquema predeterminado.
    Usa "prediction.confidence" para los esquemas que no sean predeterminados.
    evaluation_class_labels No es obligatorio cuando se usa un esquema predeterminado o cuando se proporciona prediction_label_column.
    ground_truth_gcs_source Sí: el enlace de Cloud Storage al conjunto de datos original con la columna de destino.
    ground_truth_format Sí: el formato del conjunto de datos original. Por ejemplo, "jsonl", "csv" o "bigquery".

    Modelos con entrenamiento personalizado

    En el caso de los modelos entrenados de forma personalizada, el componente BatchPredictionJob requiere que excluya la columna de destino (datos verificados) de su conjunto de datos. Puedes usar el componente TargetFieldDataRemoverOp para que el flujo de trabajo sea más eficiente.

    En el siguiente ejemplo se muestra un archivo de salida de predicción por lotes y los parámetros de entrada necesarios para un modelo de clasificación tabular entrenado de forma personalizada:

    Tabular

    Clasificación

    El esquema habitual incluye los siguientes campos:

    • instance: matriz de datos de entrada en el mismo orden que las columnas del conjunto de datos de entrenamiento del modelo.
    • prediction: matriz de datos de entrada en el mismo orden que las columnas del conjunto de datos de entrenamiento del modelo.

    A continuación, se muestra un ejemplo de conjunto de datos CSV con species como columna 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
              

    El componente TargetFieldDataRemoverOp elimina la columna de destino antes de enviar el archivo al componente de predicción por lotes:

    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
              

    A continuación, se muestra un ejemplo de un archivo de salida de predicción por lotes sin la columna de destino 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]
    }
              

    En esta tabla se describen los parámetros obligatorios del componente ModelEvaluationClassificationOp con un modelo de vídeo:

    Parámetro del componente de evaluación Obligatorio
    target_field_name
    prediction_label_column Debe estar vacía. Esta columna no existe en los modelos entrenados de forma personalizada.
    prediction_score_column No es obligatorio para el esquema predeterminado. Se asigna automáticamente a los formatos JSONL, CSV o BIGQUERY.
    evaluation_class_labels Sí. Debe tener la misma longitud que la matriz de predicción de salida.
    ground_truth_gcs_source Sí: el enlace de Cloud Storage al conjunto de datos original con la columna de destino.
    ground_truth_format Sí: el formato del conjunto de datos original. Por ejemplo, "jsonl", "csv" o "bigquery".

    Evaluaciones de modelos sin predicciones por lotes generadas por Vertex AI

    Puedes usar un componente de canalización de evaluación de modelos con una predicción por lotes que no hayas generado en Vertex AI. Sin embargo, ten en cuenta que la entrada del componente de la canalización de evaluación del modelo debe ser un directorio de predicciones por lotes que contenga archivos con los siguientes prefijos:

    • prediction.results-

    • explanation.results-

    • predictions_

    Referencia de la API

    Historial de versiones y notas de las versiones

    Para obtener más información sobre el historial de versiones y los cambios del SDK de componentes de la canalización de Google Cloud , consulta las Google Cloud notas de la versión del SDK de componentes de la canalización.