Tipos de datos y transformaciones

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

Entrenamiento del modelo

Los datos tabulares de entrada deben transformarse antes de que puedan usarse para el entrenamiento de modelos. La transformación indica la función de un atributo de datos en particular.

Se admiten las siguientes transformaciones:

Si tu fuente de datos es un archivo CSV en Cloud Storage, se deben usar comas (“,”) como delimitadores. Vertex AI usa el formato CSV RFC 4180.

Si tu fuente de datos es BigQuery y realizas una clasificación o regresión, puedes incluir datos compuestos por varios tipos elementales de datos. Estos tipos de datos compuestos deben procesarse previamente 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 maneja según el objetivo del modelo y la transformación aplicada para ese atributo. Para obtener más información, consulta Cómo se manejan los valores faltantes o nulos.

Predicción

El formato de los datos usados para la predicción debe coincidir con el formato que se usa para el entrenamiento. Si deseas obtener más detalles, consulta Formato de datos para las predicciones.

Transformaciones de Vertex AI

Categórico

La aplicación de una transformación categórica hace que ese atributo represente valores en una categoría. es decir, un nivel nominal. Los valores difieren solo en función de su nombre sin orden. Puedes usar números para representar valores categóricos, pero los valores no tienen relación numérica entre sí. Es decir, un 1 categórico no es “mayor” que un 0 categórico.

Estos son algunos ejemplos de valores categóricos:

  • Booleano: true, false.
  • País: "USA", "Canada", "China", etcétera.
  • Código de estado HTTP: "200", "404", "500", etcétera.

Los valores categóricos distinguen entre mayúsculas y minúsculas; las variaciones ortográficas se tratan como categorías diferentes (por ejemplo, “Septiembre” y “Setiembre” no se combinan).

Cuando entrenas un modelo con un atributo con una transformación categórica, Vertex AI aplica las siguientes transformaciones de datos al atributo y usa cualquiera que proporcione un indicador para el entrenamiento:

  • La string categórica tal como está: sin cambios en mayúsculas o minúsculas, puntuación, ortografía, tiempo verbal, etcétera.
  • El nombre de la categoría se convierte en un índice de búsqueda en el diccionario y se genera una incorporación para cada índice.
  • Las categorías que aparecen menos de 5 veces en el conjunto de datos de entrenamiento se consideran de categoría “desconocida”. La categoría “desconocida” obtiene su propio índice de búsqueda especial y su consecuente incorporación.

Las transformaciones categóricas se pueden aplicar a datos STRING en archivos CSV o a los siguientes tipos de datos de BigQuery:

  • INT64
  • NUMERIC, BIGNUMERIC
  • FLOAT64
  • BOOL
  • STRING
  • DATE
  • DATETIME
  • TIME
  • TIMESTAMP

Texto

Una transformación de texto hace que el atributo se use como texto sin formato, que por lo general consta 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 el caso de los modelos de previsión, la transformación de texto no es compatible con los atributos de covarianza.

Cuando entrenas un modelo con un atributo con una transformación de texto, Vertex AI aplica las siguientes transformaciones de datos al atributo y usa cualquiera que proporcione un indicador para el entrenamiento:

  • El texto tal como está: sin cambios en mayúsculas o minúsculas, puntuación, ortografía, tiempo verbal, etcétera.
  • Al texto se le asignan tokens de palabras y se generan 1-grama y 2-gramas a partir de palabras. Se convierte cada n-grama en un índice de búsqueda de diccionario y se genera una incorporación para cada índice. Se combina la incorporación de todos los elementos en una sola incorporación mediante la media.

    La asignación de tokens se basa en los límites de la secuencia de comandos de Unicode.

  • Los valores faltantes obtienen su propio índice de búsqueda e incorporación consecuente.
  • Las palabras vacías no reciben ningún tratamiento especial y no se quitan.

Las transformaciones de texto se pueden aplicar a datos STRING en 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 use como un número ordinal o cuantitativo. Estos números se pueden comparar. Es decir, dos números distintos pueden ser inferiores o superiores entre sí.

Se recortan los espacios en blanco iniciales o finales.

En la siguiente tabla, se muestran todos los formatos compatibles para una transformación numérica:

Formato Ejemplos Notas
String numérica “101”, “101.5” El carácter de punto (“.”) es el único delimitador decimal válido. “101,5” y “100,000” no son strings numéricas válidas.
Notación científica “1.12345E+11”, “1.12345e+11” Consulta la nota de las strings numéricas sobre los delimitadores decimales.
No es un número “NAN”, “nan”, “+NAN” No se hace distinción entre mayúsculas y minúsculas. Se ignoran los caracteres más (“+”) o menos (“-”) que anteceden. Se interpreta como valor NULL.
Infinito “INF”, “+inf” No se hace distinción entre mayúsculas y minúsculas. Se ignoran los caracteres más (“+”) o menos (“-”) que anteceden. Se interpreta como valor NULL.

Si un valor en una columna con una transformación numérica no cumple con uno de estos formatos, la fila completa se excluye del entrenamiento o el valor se trata como nulo. Elige entre estos resultados cuando selecciones la transformación numérica.

Cuando entrenas un modelo con un atributo con una transformación numérica, Vertex AI aplica las siguientes transformaciones de datos al atributo y usa cualquiera que proporcione un indicador para el entrenamiento:

  • El valor se convierte en float32.
  • El z_score del valor.
  • Un índice de bucket del valor basado en cuantiles. El tamaño del bucket es 100.
  • log(value+1) cuando el valor es mayor o igual que 0. De lo contrario, esta transformación no se genera y el valor se considera faltante.
  • El z_score del log(value+1) cuando el valor es mayor o igual que 0. De lo contrario, esta transformación no se genera y el valor se considera faltante.
  • Un valor booleano que indica si el valor es nulo.
  • Las filas con entradas numéricas no válidas (por ejemplo, una string que no se puede analizar como float32) no se incluyen en el entrenamiento ni la predicción.
  • Los valores extremos o atípicos no reciben ningún tratamiento especial.

Las transformaciones numéricas se pueden aplicar a los datos de 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 función se use como un punto en el tiempo, representado como una hora civil con una zona horaria o una marca de tiempo Unix. En la columna de tiempo, solo se pueden usar atributos con una transformación de marca de tiempo.

Si no se especifica una zona horaria con la hora civil, se establecerá como UTC de forma predeterminada.

En la siguiente tabla, se muestran todos los formatos de strings de marca de tiempo compatibles:

Formato Ejemplo Notas
%E4Y-%m-%d “2017-01-30” Consulta la documentación de Abseil para obtener 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-noviembre-2018”
%Y-%m-%dT%H:%M:%E*S%Ez "2019-05-17T23:56:09.05+00:00" RFC 3339. Especifica el desplazamiento de zona horaria (z) en el siguiente formato: ±HH:MM[:SS[.ffffff]]
String de marca de tiempo de Unix en segundos “1541194447” Solo para los períodos comprendidos entre el 01/ene/1990 y el 01/ene/2030.
String de marca de tiempo de Unix en milisegundos “1541194447000”
String de marca de tiempo de Unix en microsegundos “1541194447000000”
String de marca de tiempo de Unix en nanosegundos “1541194447000000000”

Si un valor en una columna con una transformación de marca de tiempo no cumple con uno de estos formatos, la fila completa se excluye del entrenamiento o el valor se trata como nulo. Elige entre estos resultados cuando selecciones la transformación de marca de tiempo.

Cuando entrenas un modelo con un atributo con una transformación de marca de tiempo, Vertex AI aplica las siguientes transformaciones de datos al atributo y usa cualquiera que proporcione un indicador para el entrenamiento:

  • Se aplican las transformaciones para las columnas de tipo Numérico.
  • Se determina el año, el mes, el día y el día de la semana. Se 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 están fuera de un intervalo de marca de tiempo típico o son valores extremos) no reciben un tratamiento especial ni se quitan.
  • Las filas con entradas de marca de tiempo no válidas (por ejemplo, una string de marca de tiempo no válida) no se incluyen en el entrenamiento ni la predicción.

Las transformaciones de marca de tiempo se pueden aplicar a datos STRING en archivos CSV o a los siguientes tipos de datos de BigQuery:

  • INT64
  • STRING
  • DATE
  • DATETIME
  • TIMESTAMP

Tipos de datos compuestos

En ocasiones, debes incluir datos que consten de varias primitivas de datos, como un arreglo o una estructura. Los tipos de datos compuestos solo están disponibles si usas BigQuery como fuente de datos, y no son compatibles con los modelos de previsión.

Struct

Se puede usar una estructura para representar un grupo de campos etiquetados. Una estructura tiene una lista de nombres de campos, cada uno asociado con un tipo de datos. La lista de campos y sus tipos de datos debe ser la misma para todos los valores de estructura en una columna.

Estos son algunos ejemplos de estructuras:

  • Presión arterial: {"timestamp": 1535761416, "systolic": 110, "diastolic": 70}
  • Producto: {"name": "iPhone", price: 1000}

Usa el tipo de datos STRUCT de BigQuery para representar las estructuras.

Los valores de Struct se acoplan en campos de forma automática. Vertex AI aplica la transformación de datos a los campos acoplados según su tipo de transformación.

Array

Se puede usar un arreglo para representar una lista de valores. Los valores contenidos 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 arreglos como representación de un peso relativo. En otras palabras, los elementos que aparecen más adelante en el arreglo se ponderan más que los elementos que aparecen hacia el principio.

Estos son algunos ejemplos de arreglos:

  • 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}, ...]

Usa el tipo de datos ARRAY de BigQuery para representar los arreglos.

La transformación de datos de Vertex AI aplica según el tipo de transformación que se aplica al arreglo:

Tipo Array Transformación
Arreglo numérico
  • Todas las transformaciones para los tipos Numérico se aplican al promedio de los últimos N elementos en que N = {1, 2, 4, 8, todos}. Por lo tanto, los elementos más destacados son los que están más cerca del final del arreglo y no al comienzo.
  • El promedio de arreglos vacíos se considera cero.
Arreglo categórico
  • Para cada elemento del arreglo de los últimos N elementos en el que N = {1, 2, 4, 8, todos}, el nombre de la categoría se convierte en un índice de búsqueda del diccionario y se genera una incorporación para cada índice. Se combina la incorporación de todos los elementos en una sola incorporación mediante la media.
  • Los arreglos vacíos se consideran como una incorporación de ceros.
Arreglo de texto
  • Se concatenan todos los valores de texto del arreglo en un solo valor de texto mediante el uso de un espacio (“ ”) como delimitador y, luego, se considera al resultado como un solo valor de texto. Se aplican las transformaciones para las columnas de Texto.
  • Los arreglos vacíos se consideran como una incorporación de ceros.
Arreglo de marca de tiempo
  • Se aplican las transformaciones de las columnas de tipo Numérico al promedio de los últimos N elementos del arreglo. N = {1, 2, 4, 8, todo}. Esto significa que los elementos más destacados son los que están más cerca del final del arreglo.
Array de structs
  • Los structs en el array se acoplan en campos individuales y se ensamblan en arrays por campo. Se aplica la transformación de array (como se describe en esta tabla) de acuerdo con el tipo de campo de ese array.

Cómo se manejan los valores faltantes o nulos

La forma en que se manejan los valores faltantes depende del objetivo del modelo y la transformación aplicada para ese atributo.

Clasificación y regresión

En los modelos de clasificación y regresión, los valores nulos generan una incorporación para transformaciones categóricas y de texto. En otras transformaciones, el valor nulo se deja como tal.

Previsión

En los modelos de previsión, se ingresan valores nulos a partir de los datos que los rodean. No hay ninguna opción para dejar un valor nulo como nulo. Si prefieres controlar la forma en que se asignan los valores nulos, puedes asignarlos de forma explícita. Los mejores valores para usar pueden depender de los datos y del problema empresarial.

Se permiten filas faltantes (por ejemplo, si no hay fila para una fecha específica con un nivel de detalle de datos diario), pero Vertex AI no impone valores para los datos faltantes. Debido a que las filas faltantes pueden disminuir la calidad del modelo, debes evitarlas cuando sea posible. Por ejemplo, si falta una fila porque la cantidad de ventas de ese día fue cero, agrega una fila para ese día y establece de forma explícita los datos de ventas en 0.

Qué valores se tratan como nulos

Cuando entrenas un modelo tabular de AutoML, Vertex AI trata los siguientes valores como nulos:

  • Un valor NULL de BigQuery.

  • Valores NaN o numéricos infinitos.

  • Una string vacía. Vertex AI no corta espacios de strings. Es decir, “ ” no se considera un valor nulo.

  • Una string que se puede convertir en un valor NaN o numérico infinito.

    • “NAN”: se ignorarán mayúsculas y minúsculas, con un signo de más o menos opcional antepuesto.
    • “INF”: se ignorarán mayúsculas y minúsculas, con un signo de más o menos opcional antepuesto.
  • Valores faltantes.

  • Valores en una columna con una transformación numérica o de marca de tiempo que no están en un formato válido para la transformación de la columna. En este caso, si especificaste que la fila con el valor no válido debe usarse en el entrenamiento, el valor no válido se considera nulo.

Formato de datos para las predicciones

El formato de los datos usados para la predicción debe coincidir con el formato que se usa para el entrenamiento.

Si entrenaste tu modelo con datos de un archivo CSV en Cloud Storage, tus datos eran del tipo STRING. Si usas un objeto JSON para enviar tu solicitud de predicción, asegúrate de que todos los valores en los pares clave-valor también sean de tipo STRING.

Si entrenaste 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 en los pares clave-valor JSON deben seguir la asignación de la siguiente tabla.

Tipo de datos de BigQuery Tipo de datos JSON
INT64 String
NUMERIC, BIGNUMERIC Número
FLOAT64 Número
BOOL Booleano
STRING String
DATE String
DATETIME String
TIME String
TIMESTAMP String
Array Array
STRUCT Objeto

Por ejemplo, si tus datos de entrenamiento contenían length funciones de tipo FLOAT64, el siguiente par clave-valor de JSON es correcto:

"length":3.6,

Por el contrario, el siguiente par clave-valor de JSON arrojará un error:

"length":"3.6",

¿Qué sigue?