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

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
  • Todas las transformaciones de los tipos Numérico aplicadas a la media de los últimos N elementos, donde N = {1, 2, 4, 8, todos}. Por lo tanto, los elementos que más se enfatizan son los que están al final de la matriz, no los del principio.
  • La media de las matrices vacías se trata como cero.
Matriz categórica
  • Por cada elemento de la matriz de los últimos N elementos, donde N = {1, 2, 4, 8, todos}, convierte el nombre de la categoría en un índice de búsqueda de diccionario y genera una inserción por cada índice. Combina la incrustación de todos los elementos en una sola incrustación mediante la media.
  • Las matrices vacías se tratan como una inserción de ceros.
Matriz de texto
  • Concatena todos los valores de texto de la matriz en un único valor de texto usando un espacio (" ") como delimitador y, a continuación, trata el resultado como un único valor de texto. Aplica las transformaciones a las columnas Texto.
  • Las matrices vacías se tratan como una inserción de ceros.
Matriz de marcas de tiempo
  • Aplica las transformaciones de las columnas Numéricas a la media de los últimos N elementos de la matriz. N = {1, 2, 4, 8, all}. Esto significa que los elementos que más se enfatizan son los que están hacia el final de la matriz.
Matriz de estructura
  • Las estructuras del array se acoplan en campos individuales y se ensamblan en arrays por campo. Se aplica la transformación de la matriz (tal como se describe en esta tabla) según el tipo de campo de esa matriz.

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