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 |
|
ModelEvaluationRegressionOp |
|
ModelEvaluationForecastingOp |
|
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 de clasificación de entrenamiento tabulares y personalizados de AutoML.
Por ejemplo, considera 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. Si bien es útil ver las métricas de todo el conjunto de datos, puede 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 garantizar que el modelo tenga un buen rendimiento en subconjuntos críticos de los datos.
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 porción única en un solo valor de un atributo. Especifica CONFIG como un par clave-valor en el que la clave seafloat_value
ostring_value
. Por ejemplo,"float_value": 1.0
.La siguiente configuración de ejemplo crea una porción única que contiene datos con el
age
de1
:{ "age": { "value": { "float_value": 1.0 } } }
range
range
crea una porción única que incluye datos dentro de un rango especificado. Especifica CONFIG como dos pares clave-valor en los que las claves seanlow
yhigh
.En la siguiente configuración de ejemplo, se crea una porción única que contiene datos en la que
age
es cualquier valor entre1
y3
:{ "age": { "range": { "low": 1, "high": 3 } } }
all_values
all_values
crea una porción separada para cada etiqueta posible de la función. Especifica CONFIG como"value": true
.En la siguiente configuración de ejemplo, se crean tres porciones: una para cada una de
"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 la que el 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 el 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
yspecies:"dog"
Porción 2:
age:1
yspecies:"cat"
Porción 3:
age:1
yspecies:"rabbit"
Da formato a las porciones
Si deseas dar formato a las porciones para el componente ModelEvaluationClassificationOp
, haz lo siguiente:
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') ) })
Crea una lista para almacenar la configuración de porciones. Por ejemplo:
slicing_specs = []
Formatea 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)
Combina cada
slicing_spec
en una lista. Por ejemplo:slicing_specs.append(slicing_spec_json)
Pasa
slicing_specs
como parámetro al componenteModelEvaluationClassificationOp
. Por ejemplo:ModelEvaluationClassificationOp(slicing_specs=slicing_specs)
Da formato a las porciones de configuración de las métricas de equidad
Para evaluar la equidad de tu modelo, usa los siguientes componentes:
DetectDataBiasOp
: muestra las métricas de sesgo de datos para las porciones que pasas al componente.DetectModelBiasOp
: muestra las métricas de sesgo del modelo para las porciones que pasas al componente.
Si deseas dar formato a tus porciones para los componentes DetectDataBiasOp
y DetectModelBiasOp
, haz lo siguiente:
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') ) }))
Crea una lista para almacenar las configuraciones de sesgo. Por ejemplo:
bias_configs = []
Formatea 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)
Combina cada
bias_config
en una lista. Por ejemplo:bias_configs.append(bias_config_json)
Pasa
bias_configs
como parámetro al componenteDetectDataBiasOp
oDetectModelBiasOp
. 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
: arrayclasses
: 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 |
Sí |
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 flotantelower_bound
: número de punto flotanteupper_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 |
Sí |
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.
El esquema predeterminado incluye los siguientes campos:
id
: stringdisplayNames
: stringtype
: enumtimeSegmentStart
: stringtimeSegmentEnd
: stringconfidence
: 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 |
Sí |
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 stringsdisplayName
: array de stringsconfidence
: 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 |
Sí |
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
: stringdisplayName
: stringtype
: enumtimeSegmentStart
: stringtimeSegmentEnd
: stringconfidence
: 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 |
Sí |
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 |
Sí |
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 la API
Para obtener la referencia de componentes, consulta la página de referencia del SDK de componentes de canalización de Google Cloud para componentes de evaluación del modelo.
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.