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:
| Función | 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
}
}
}
Donde:
FEATURE es una función para la que deseas crear una porción. Por ejemplo,
age.KIND es una de las siguientes opciones:
valuevaluecrea una porción única en un solo valor de un atributo. Especifica CONFIG como un par clave-valor en el que la clave seafloat_valueostring_value. Por ejemplo,"float_value": 1.0.La siguiente configuración de ejemplo crea una porción única que contiene datos con el
agede1:{ "age": { "value": { "float_value": 1.0 } } }rangerangecrea una porción única que incluye datos dentro de un rango especificado. Especifica CONFIG como dos pares clave-valor en los que las claves seanlowyhigh.En la siguiente configuración de ejemplo, se crea una porción única que contiene datos en la que
agees cualquier valor entre1y3:{ "age": { "range": { "low": 1, "high": 3 } } }all_valuesall_valuescrea 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:1yspecies:"dog"Porción 2:
age:1yspecies:"cat"Porción 3:
age:1yspecies:"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_speccomo 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_specen una lista. Por ejemplo:slicing_specs.append(slicing_spec_json)
Pasa
slicing_specscomo 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_configcomo 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_configen una lista. Por ejemplo:bias_configs.append(bias_config_json)
Pasa
bias_configscomo parámetro al componenteDetectDataBiasOpoDetectModelBiasOp. 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 parámetro del 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". |
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:
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 entrenado de forma personalizada:
| 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 del componente, consulta la página de referencia del SDK deGoogle Cloud para los 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 Google Cloud notas de la versión del SDK de componentes de canalización.