Componentes de evaluación del modelo

Los componentes de evaluación del modelo toman la verdad fundamental y los resultados de la predicción por lotes como entrada y generan métricas de evaluación. Los datos de la verdad fundamental se “etiquetan de forma correcta” como los determinan las personas y, por lo general, se proporcionan como el campo de destino en el conjunto de datos de prueba que usaste 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 del modelo:

Compatibilidad con tipos de modelos

En la siguiente tabla, se muestran los tipos de modelos compatibles para cada componente de evaluación del modelo:

Componente de evaluación del modelo Tipos de modelos admitidos
ModelEvaluationClassificationOp
  • AutoML tabular, imagen, texto y video
  • Tabla personalizada
  • ModelEvaluationRegressionOp
  • Tabular de AutoML
  • Tabla personalizada
  • ModelEvaluationForecastingOp
  • Tabular de AutoML
  • Quita el campo de destino

    Para algunos tipos de modelos, el componente BatchPredictionJob requiere que excluyas la columna objetivo (verdad fundamental) de tu conjunto de datos.

    Configura y formatea porciones para tu conjunto de datos tabular

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

    Por ejemplo, considera un conjunto de datos de adopción de mascotas en el que un modelo está entrenado para predecir si una mascota se adoptará en una semana. Si bien es útil observar las métricas de todo el conjunto de datos, es posible que te interesen las métricas relacionadas con la especie y la edad de la mascota. En otras palabras, te interesa el siguiente subconjunto del conjunto de datos:

    Atributo Valores
    age (in years) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
    species "dog", "cat", "rabbit"

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

    Configura porciones

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

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

    Aquí:

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

    • KIND es una de las siguientes opciones:

      • value

        value crea una sola porción en un solo valor de un atributo. Especifica CONFIG como un par clave-valor en el que la clave sea float_value o string_value. Por ejemplo, "float_value": 1.0.

        En la siguiente configuración de ejemplo, se 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 datos dentro de un rango especificado. Especifica 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 separada para cada etiqueta posible del atributo. Especifica CONFIG como "value": true.

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

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

    También puedes usar varias funciones para crear una o más porciones.

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

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

    La siguiente configuración crea varias porciones, una para cada especie única en el conjunto de datos, en la que age es 1.

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

    Las porciones resultantes contienen los siguientes datos del conjunto de datos de ejemplo:

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

    • Porción 2: age:1 y species:"cat"

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

    Formato de porciones

    Si deseas dar formato a las porciones para el componente ModelEvaluationClassificationOp, haz lo siguiente:

    1. Crea una 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 opciones de configuración de las porciones. Por ejemplo:

      slicing_specs = []
    3. Da formato a cada slicing_spec como JSON o un 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. Pasa slicing_specs como parámetro al componente ModelEvaluationClassificationOp. Por ejemplo:

      ModelEvaluationClassificationOp(slicing_specs=slicing_specs)

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

    Para evaluar tu modelo como equidad, usa los siguientes componentes:

    Si deseas dar formato a las porciones para los componentes DetectDataBiasOp y DetectModelBiasOp, haz lo siguiente:

    1. Crea una 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 un 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. Pasa 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 del modelo varían según el tipo de modelo que evalúes.

    Modelos AutoML

    Cuando entrena los modelos de AutoML, Vertex AI usa esquemas predeterminados. Algunos parámetros de entrada para los componentes de evaluación del modelo solo son necesarios si usaste un esquema no predeterminado a fin de 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 predicción por lotes y parámetros de entrada obligatorios para cada tipo de modelo:

    Tabular

    Clasificación

    El esquema predeterminado incluye los siguientes campos:

    • scores: array
    • classes: array

    El siguiente es un ejemplo de un archivo de salida de predicción por lotes con la columna 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"]
        }
    }
              

    En esta tabla, se describen los parámetros obligatorios para el 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 esquemas no predeterminados.
    prediction_score_column No es necesario para el esquema predeterminado.
    Usa prediction.scores para esquemas no predeterminados.
    evaluation_class_labels No es necesario para el esquema predeterminado.
    Usa ["0","1"] para esquemas no predeterminados.

    Regresión

    El esquema predeterminado incluye los siguientes campos:

    • value: número de punto flotante
    • lower_bound: número de punto flotante
    • upper_bound: número de punto flotante

    El siguiente es un ejemplo de un archivo de salida de predicción por lotes con la columna 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
      }
    }
              

    En esta tabla, se describen los parámetros obligatorios para el componente ModelEvaluationRegressionOp 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 regresión.
    prediction_score_column No es necesario para el esquema predeterminado.
    Usa prediction.value para esquemas no predeterminados.
    evaluation_class_labels No es necesario para los modelos de regresión.

    Previsión

    Para los modelos de previsión tabular, el componente BatchPredictionJob requiere que excluyas la columna objetivo (verdad fundamental) de tu conjunto de datos. Puedes usar el componente TargetFieldDataRemoverOp para obtener un flujo de trabajo más eficiente.

    El esquema predeterminado incluye los siguientes campos:

    • id: string
    • displayNames: string
    • type: enum
    • timeSegmentStart: string
    • timeSegmentEnd: string
    • confidence: número de punto flotante

    El siguiente es un archivo CSV de ejemplo 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 quita la columna objetivo 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
              

    El siguiente es un ejemplo de un archivo de salida de predicción por lotes sin la columna 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]
      }
    }
              

    En esta tabla, se describen los parámetros obligatorios para el 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 esquemas no predeterminados.
    evaluation_class_labels No es necesario para los modelos de previsión.
    ground_truth_gcs_source Sí: el vínculo 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".

    Texto

    Clasificación

    Para los modelos de clasificación de texto, el componente BatchPredictionJob requiere que excluyas la columna objetivo (verdad fundamental) de tu conjunto de datos. Puedes usar el componente TargetFieldDataRemoverOp para obtener un flujo de trabajo más eficiente.

    El esquema predeterminado incluye los siguientes campos:

    • ids: array de strings
    • displayName: array de strings
    • confidence: array de números de punto flotante

    El siguiente es un conjunto de datos de ejemplo con label como columna de destino:

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

    El componente TargetFieldDataRemoverOp quita la columna objetivo antes de enviar el archivo al componente BatchPredictionJob:

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

    El siguiente es un ejemplo de un archivo de salida de predicción por lotes sin la columna 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]
      }
    }
              

    En esta tabla, se describen los parámetros obligatorios para el componente ModelEvaluationClassificationOp con un modelo de texto:

    Parámetro del componente de evaluación Obligatorio
    target_field_name
    prediction_label_column No es necesario para el esquema predeterminado.
    Usa "prediction.displayNames" para esquemas no predeterminados.
    prediction_score_column No es necesario para el esquema predeterminado.
    Usa "prediction.confidences" para esquemas no predeterminados.
    evaluation_class_labels No es necesario para el esquema predeterminado o cuando se proporciona prediction_label_column.
    ground_truth_gcs_source Sí: el vínculo 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".

    Video

    Clasificación

    Para los modelos de clasificación de videos, el componente BatchPredictionJob requiere que excluyas la columna objetivo (verdad fundamental) de tu conjunto de datos. Puedes usar el componente TargetFieldDataRemoverOp para obtener un flujo de trabajo más eficiente.

    El esquema predeterminado incluye los siguientes campos:

    • id: string
    • displayName: string
    • type: enum
    • timeSegmentStart: string
    • timeSegmentEnd: string
    • confidence: número de punto flotante

    El siguiente es un conjunto de datos de ejemplo 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 quita la columna objetivo 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"
    }
              

    El siguiente es un ejemplo de un archivo de salida de predicción por lotes sin la columna 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
        }
      ]
    }
              

    En esta tabla, se describen los parámetros obligatorios para el componente ModelEvaluationClassificationOp con un modelo de video:

    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 esquemas no predeterminados.
    prediction_score_column No es necesario para el esquema predeterminado.
    Usa "prediction.confidence" para esquemas no predeterminados.
    evaluation_class_labels No es necesario cuando se usa un esquema predeterminado o cuando se proporciona prediction_label_column.
    ground_truth_gcs_source Sí: el vínculo 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 entrenados de forma personalizada

    Para los modelos con entrenamiento personalizado, el componente BatchPredictionJob requiere que excluyas la columna objetivo (verdad fundamental) de tu conjunto de datos. Puedes usar el componente TargetFieldDataRemoverOp para obtener un flujo de trabajo más eficiente.

    En el siguiente ejemplo, se muestra un archivo de salida de predicción por lotes y parámetros de entrada obligatorios para un modelo de clasificación tabular con entrenamiento personalizado:

    Tabular

    Clasificación

    El esquema típico incluye los siguientes campos:

    • instance: Es el array de datos de entrada en el mismo orden que las columnas del conjunto de datos de entrenamiento de modelos.
    • prediction: Es el array de datos de entrada en el mismo orden que las columnas del conjunto de datos de entrenamiento de modelos.

    El siguiente es 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 quita la columna objetivo 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
              

    El siguiente es un ejemplo de un archivo de salida de predicción por lotes sin la columna 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]
    }
              

    En esta tabla, se describen los parámetros obligatorios para el componente ModelEvaluationClassificationOp con un modelo de video:

    Parámetro del componente de evaluación Obligatorio
    target_field_name
    prediction_label_column Debe estar vacío; esta columna no existe en modelos con entrenamiento personalizado.
    prediction_score_column No es necesario para el esquema predeterminado; se configura automáticamente para los formatos JSONL, CSV o BIGQUERY.
    evaluation_class_labels Sí. Debe tener la misma longitud que el array de predicción de salida.
    ground_truth_gcs_source Sí: el vínculo 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 para el componente de canalización de evaluación de modelos debe ser un directorio de predicción por lotes que contenga archivos que coincidan con los siguientes prefijos:

    • prediction.results-

    • explanation.results-

    • predictions_

    Referencia de API

    Para ver la referencia del componente, consulta la referencia del SDK google_cloud_pipeline_components.

    Para ver ejemplos de cómo usar los componentes de Evaluación de modelos, consulta los notebooks enumerados en Crea una evaluación.

    Historial de versiones y notas de la versión

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