En esta página se describe cómo funciona Vertex AI con diferentes tipos de datos tabulares para los modelos de AutoML.
Introducción a las transformaciones en Vertex AI
Preparación de modelos
Los datos tabulares de entrada deben transformarse para poder usarse en el entrenamiento de modelos. La transformación indica la función de una característica de datos concreta.
Se admiten las siguientes transformaciones:
Si la fuente de datos es un archivo CSV de Cloud Storage, debe usar comas (",") como delimitador. Vertex AI usa el formato CSV RFC 4180.
Si tu fuente de datos es BigQuery y vas a realizar una clasificación o una regresión, puedes incluir datos compuestos por varios elementos primitivos de datos. Estos tipos de datos compuestos deben preprocesarse antes de que se puedan aplicar las transformaciones. Se admiten los siguientes tipos de datos compuestos:
Si falta un valor de tipo o es nulo, Vertex AI lo gestiona en función del objetivo del modelo y de la transformación aplicada a esa función. Para obtener más información, consulta Cómo se gestionan los valores que faltan o son nulos.
Predicción
El formato de los datos usados para la predicción debe coincidir con el formato usado para el entrenamiento. Para obtener más información, consulta Formato de datos para predicciones.
Transformaciones de Vertex AI
Categórica
Al aplicar una transformación categórica, la función representa los valores de una categoría. Es decir, un nivel nominal. Los valores solo se diferencian por su nombre sin orden. Puedes usar números para representar valores categóricos, pero los valores no tienen ninguna relación numérica entre sí. Es decir, un valor categórico 1 no es "mayor" que un valor categórico 0.
Estos son algunos ejemplos de valores categóricos:
- Booleano:
true
,false
. - País:
"USA"
,"Canada"
,"China"
, etc. - Código de estado HTTP:
"200"
,"404"
,"500"
, etc.
Los valores categóricos distinguen entre mayúsculas y minúsculas. Las variaciones ortográficas se tratan como categorías diferentes (por ejemplo, "Color" y "Colour" no se combinan).
Cuando entrenas un modelo con una función que tiene una transformación categórica, Vertex AI aplica las siguientes transformaciones de datos a la función y usa las que proporcionan señales para el entrenamiento:
- La cadena categórica tal cual, sin cambios en las mayúsculas, la puntuación, la ortografía, el tiempo verbal, etc.
- Convierte el nombre de la categoría en un índice de búsqueda de diccionario y genera una inserción para cada índice.
- Las categorías que aparecen menos de 5 veces en el conjunto de datos de entrenamiento se tratan como la categoría "Desconocido". La categoría "Desconocido" tiene su propio índice de búsqueda especial y su embedding correspondiente.
Las transformaciones categóricas se pueden aplicar a datos STRING de archivos CSV o a los siguientes tipos de datos de BigQuery:
- INT64
- NUMERIC, BIGNUMERIC
- FLOAT64
- BOOL
- STRING
- FECHA
- DATETIME
- HORA
- TIMESTAMP
Texto
Una transformación de texto hace que la función se use como texto libre, que normalmente se compone de tokens de texto.
Estos son algunos ejemplos de valores de texto:
"The quick brown fox"
"This restaurant is the best! The food is delicious"
En los modelos de previsión, no se admite la transformación de texto en las funciones de covariable.
Cuando entrenas un modelo con una función que tiene una transformación de texto, Vertex AI aplica las siguientes transformaciones de datos a la función y usa las que proporcionan señales para el entrenamiento:
- El texto tal cual, sin cambiar las mayúsculas, la puntuación, la ortografía, el tiempo verbal, etc.
-
Tokeniza el texto en palabras y genera unigramas y bigramas a partir de las palabras. Convierte cada n-grama en un índice de búsqueda de diccionario y genera una inserción para cada índice. Combina la inserción de todos los elementos en una sola inserción usando la media.
La tokenización se basa en los límites de las secuencias de comandos Unicode.
- Los valores que faltan tienen su propio índice de búsqueda y su propia inserción.
- Las palabras de parada no reciben ningún tratamiento especial y no se eliminan.
Las transformaciones de texto se pueden aplicar a datos STRING de archivos CSV o a los siguientes tipos de datos de BigQuery:
- STRING
- DATETIME
Numérico
Una transformación numérica hace que una columna se utilice como número ordinal o cuantitativo. Estas cifras se pueden comparar. Es decir, dos números distintos pueden ser menores o mayores entre sí.
Se eliminan los espacios iniciales o finales.
En la siguiente tabla se muestran todos los formatos compatibles para una transformación numérica:
Formato | Ejemplos | Notas |
Cadena numérica | "101", 101,5" | El carácter de punto (".") es el único delimitador decimal válido. "101,5" y "100.000" no son cadenas numéricas válidas. |
Notación científica | "1.12345E+11", "1.12345e+11" | Consulta la nota sobre las cadenas numéricas en relación con los delimitadores decimales. |
No es un número | "NAN", "nan", "+NAN" | No se tiene en cuenta si están escritas en mayúscula o minúscula. Los caracteres más ("+") o menos ("-") que se añaden al principio se ignoran. Se interpreta como un valor NULL. |
Infinity | "INF", "+inf" | No se tiene en cuenta si están escritas en mayúscula o minúscula. Los caracteres más ("+") o menos ("-") que se añaden al principio se ignoran. Se interpreta como un valor NULL. |
Si un valor de una columna con una transformación numérica no se ajusta a uno de estos formatos, se excluirá toda la fila de la fase de entrenamiento o el valor se tratará como nulo. Puedes elegir entre estos resultados cuando selecciones la transformación numérica.
Cuando entrenas un modelo con una función que tiene una transformación numérica, Vertex AI aplica las siguientes transformaciones de datos a la función y usa las que proporcionan señales para el entrenamiento:
- Valor convertido a float32.
- La puntuación z del valor.
- Índice de segmento del valor basado en cuantiles. El tamaño del segmento es 100.
- log(value+1) cuando el valor es mayor o igual que 0. De lo contrario, esta transformación no se aplica y el valor se considera un valor que falta.
- Puntuación z de log(valor+1) cuando el valor es mayor o igual que 0. De lo contrario, esta transformación no se aplica y el valor se considera un valor que falta.
- Valor booleano que indica si el valor es nulo.
- Las filas con entradas numéricas no válidas (por ejemplo, una cadena que no se puede analizar como float32) no se incluyen en el entrenamiento ni en la predicción.
- Los valores extremos o atípicos no reciben ningún tratamiento especial.
Las transformaciones numéricas se pueden aplicar a datos STRING en archivos CSV o a los siguientes tipos de datos de BigQuery:
- INT64
- NUMERIC, BIGNUMERIC
- FLOAT64
- STRING
- TIMESTAMP
Marca de tiempo
Una transformación de marca de tiempo hace que una característica se utilice como un momento dado, que se representa en forma de hora civil con una zona horaria o de marca de tiempo de Unix. Solo se pueden usar las características con una transformación de marca de tiempo en la columna Hora.
Si no se especifica una zona horaria con la hora civil, se utiliza UTC de forma predeterminada.
En la siguiente tabla se muestran todos los formatos de cadena de marca de tiempo compatibles:
Formato | Ejemplo | Notas |
---|---|---|
%E4Y-%m-%d |
"2017-01-30" | Consulta la documentación de Abseil para ver una descripción de este formato. |
%E4Y/%m/%d |
"2017/01/30" | |
%Y/%m/%d %H:%M:%E*S |
"2017/01/30 23:59:58" | |
%d-%m-%E4Y |
"30-11-2018" | |
%d/%m/%E4Y |
"30/11/2018" | |
%d-%B-%E4Y |
"30-November-2018" | |
%Y-%m-%dT%H:%M:%E*S%Ez |
"2019-05-17T23:56:09.05+00:00" | RFC 3339. Especifica la diferencia horaria (z ) en el
formato: ±HH:MM[:SS[.ffffff]]
|
Cadena de marca de tiempo Unix en segundos | "1541194447" | Solo para horas comprendidas entre el 01/01/1990 y el 01/01/2030. |
Cadena de marca de tiempo Unix en milisegundos. | "1541194447000" | |
Cadena de marca de tiempo Unix en microsegundos. | "1541194447000000" | |
Cadena de marca de tiempo Unix en nanosegundos. | "1541194447000000000" |
Si un valor de una columna con una transformación de marca de tiempo no se ajusta a uno de estos formatos, se excluirá toda la fila de la fase de entrenamiento o el valor se tratará como nulo. Puedes elegir entre estos resultados cuando seleccionas la transformación de marca de tiempo.
Cuando entrenas un modelo con una función que tiene una transformación de marca de tiempo, Vertex AI aplica las siguientes transformaciones de datos a la función y usa las que proporcionan señales para el entrenamiento:
- Aplica las transformaciones a las columnas Numéricas.
- Determina el año, el mes, el día y el día de la semana. Trata cada valor de la marca de tiempo como una columna Categórica.
- Los valores numéricos no válidos (por ejemplo, los valores que quedan fuera de un intervalo de marca de tiempo típico o los valores extremos) no reciben ningún tratamiento especial y no se eliminan.
- Las filas con entradas de marca de tiempo no válidas (por ejemplo, una cadena de marca de tiempo no válida) no se incluyen en el entrenamiento ni en la predicción.
Las transformaciones de marca de tiempo se pueden aplicar a datos STRING de archivos CSV o a los siguientes tipos de datos de BigQuery:
- INT64
- STRING
- FECHA
- DATETIME
- TIMESTAMP
Tipos de datos compuestos
A veces, es necesario incluir datos compuestos por varios tipos de datos primitivos, como una matriz o una estructura. Los tipos de datos compuestos solo están disponibles si se usa BigQuery como fuente de datos y no se admiten en los modelos de previsión.
Estructura
Una estructura se puede usar para representar un grupo de campos etiquetados. Una estructura tiene una lista de nombres de campos, cada uno de ellos asociado a un tipo de datos. La lista de campos y sus tipos de datos deben ser los mismos para todos los valores de struct de una columna.
Estos son algunos ejemplos de structs:
- Presión arterial:
{"timestamp": 1535761416, "systolic": 110, "diastolic": 70}
- Producto:
{"name": "iPhone", price: 1000}
El tipo de datos STRUCT de BigQuery se usa para representar structs.
Los valores de Struct se aplanan automáticamente en campos. Vertex AI aplica la transformación de datos a los campos acoplados según su tipo de transformación.
Matriz
Se puede usar una matriz para representar una lista de valores. Los valores incluidos deben aceptar el mismo tipo de transformación. Puedes incluir structs en arrays. Todos los structs del array deben tener la misma estructura.
Vertex AI procesa las matrices como representación del peso relativo. En otras palabras, los elementos que aparecen más adelante en la matriz tienen más peso que los que aparecen al principio.
Estos son algunos ejemplos de matrices:
Categorías de producto:
["Clothing", "Women", "Dress", ...]
Compras más recientes:
["iPhone", "Laptop", "Suitcase", ...]
Registros de usuarios:
[{"name": "Joelle", ID: 4093}, {"name": "Chloe", ID: 2047}, {"name": "Neko", ID: 3432}, ...]
El tipo de datos ARRAY de BigQuery se usa para representar arrays.
La transformación de datos que aplica Vertex AI depende del tipo de transformación que se aplique a la matriz:
Tipo de matriz | Transformación |
---|---|
Matriz numérica |
|
Matriz categórica |
|
Matriz de texto |
|
Matriz de marcas de tiempo |
|
Matriz de estructura |
|
Cómo se gestionan los valores que faltan o son nulos
La forma en que se gestionan los valores que faltan depende del objetivo de tu modelo y de la transformación aplicada a esa función.
Clasificación y regresión
En el caso de los modelos de clasificación y regresión, los valores nulos dan como resultado una inserción para las transformaciones categóricas y de texto. En el caso de otras transformaciones, el valor nulo se deja como nulo.
Previsión
En los modelos de previsión, los valores nulos se imputan a partir de los datos circundantes. No hay ninguna opción para dejar un valor nulo como nulo. Si prefieres controlar la forma en que se imputan los valores nulos, puedes imputarlos explícitamente. Los mejores valores que puedes usar pueden depender de tus datos y de tu problema empresarial.
Se permiten las filas que faltan (por ejemplo, si no hay ninguna fila para una fecha concreta con una granularidad de datos diaria), pero Vertex AI no imputa valores a los datos que faltan. Como las filas que faltan pueden reducir la calidad del modelo, debe evitar que falten filas siempre que sea posible. Por ejemplo, si falta una fila porque la cantidad de ventas de ese día fue cero, añade una fila para ese día y asigna explícitamente el valor 0 a los datos de ventas.
Qué valores se tratan como valores nulos
Al entrenar un modelo tabular de AutoML, Vertex AI trata los siguientes valores como valores nulos:
Un valor NULL de BigQuery.
Valores numéricos infinitos o NaN.
Una cadena vacía. Vertex AI no recorta los espacios de las cadenas. Es decir, " " no se considera un valor nulo.
Cadena que se puede convertir en NaN o en un valor numérico infinito.
- En el caso de "NAN", no distingue entre mayúsculas y minúsculas y puede incluir un signo más o menos opcional al principio.
- En el caso de "INF", no distingue entre mayúsculas y minúsculas y puede incluir un signo más o menos opcional al principio.
Faltan valores.
Valores de una columna con una transformación numérica o de marca de tiempo que no tengan un formato válido para la transformación de la columna. En este caso, si ha especificado que la fila con el valor no válido se debe usar en el entrenamiento, el valor no válido se considera nulo.
Formato de datos de las predicciones
El formato de los datos usados para la predicción debe coincidir con el formato usado para el entrenamiento.
Si has entrenado tu modelo con datos de un archivo CSV de Cloud Storage, tus datos eran de tipo STRING. Si utiliza un objeto JSON para enviar su solicitud de predicción, asegúrese de que todos los valores de los pares clave-valor también sean de tipo STRING.
Si has entrenado tu modelo con datos almacenados en BigQuery y usas un objeto JSON para enviar tu solicitud de predicción, los tipos de datos de los valores de los pares clave-valor JSON deben seguir la asignación de la tabla de abajo.
Tipo de datos de BigQuery | Tipo de datos JSON |
---|---|
INT64 | Cadena |
NUMERIC, BIGNUMERIC | Número |
FLOAT64 | Número |
BOOL | Booleano |
STRING | Cadena |
FECHA | Cadena |
DATETIME | Cadena |
HORA | Cadena |
TIMESTAMP | Cadena |
Matriz | Matriz |
STRUCT | Objeto |
Por ejemplo, si tus datos de entrenamiento contenían length
características de tipo FLOAT64, el siguiente par clave-valor de JSON sería correcto:
"length":3.6,
Por el contrario, el siguiente par clave-valor JSON generará un error:
"length":"3.6",
Siguientes pasos
- Más información sobre los tipos de datos de BigQuery
- Consulta cómo preparar tus datos de entrenamiento tabulares.
- Consulta las prácticas recomendadas para crear datos de entrenamiento tabulares.