Tipos de dados e transformações

Esta página descreve como o Vertex AI funciona com diferentes tipos de dados tabulares para modelos do AutoML.

Introdução às transformações no Vertex AI

Preparação de modelos

Os dados tabulares de entrada têm de ser transformados antes de poderem ser usados para a preparação do modelo. A transformação indica a função de uma determinada caraterística de dados.

As seguintes transformações são suportadas:

Se a sua origem de dados for um ficheiro CSV no Cloud Storage, tem de usar vírgulas (",") como delimitador. O Vertex AI usa o formato CSV RFC 4180.

Se a sua origem de dados for o BigQuery e estiver a fazer uma classificação ou uma regressão, pode incluir dados compostos por vários primitivos de dados. Estes tipos de dados compostos têm de ser pré-processados antes de poderem ser aplicadas transformações. Os seguintes tipos de dados compostos são suportados:

Se um valor de tipo estiver em falta ou for nulo, o Vertex AI processa-o com base no objetivo do modelo e na transformação aplicada a essa funcionalidade. Para obter detalhes, consulte o artigo Como são processados os valores em falta ou nulos.

Previsão

O formato dos dados usados para a previsão tem de corresponder ao formato usado para a preparação. Para ver detalhes, consulte o artigo Formato de dados para previsões.

Transformações do Vertex AI

Categórico

A aplicação de uma transformação categorial faz com que essa caraterística represente valores numa categoria. Ou seja, um nível nominal. Os valores diferem apenas com base no respetivo nome, sem ordem. Pode usar números para representar valores categóricos, mas os valores não têm uma relação numérica entre si. Ou seja, um valor categórico 1 não é "maior" do que um valor categórico 0.

Seguem-se alguns exemplos de valores categóricos:

  • Booleano: true, false.
  • País: "USA", "Canada", "China" e assim sucessivamente.
  • Código de estado HTTP: "200", "404", "500" e assim sucessivamente.

Os valores categóricos são sensíveis a maiúsculas e minúsculas. As variações ortográficas são tratadas como categorias diferentes (por exemplo, "Cor" e "Colour" não são combinadas).

Quando prepara um modelo com uma funcionalidade com uma transformação categorial, o Vertex AI aplica as seguintes transformações de dados à funcionalidade e usa todas as que fornecem um sinal para a preparação:

  • A string categorial tal como está, sem alterações a maiúsculas/minúsculas, pontuação, ortografia, tempo verbal, etc.
  • Converta o nome da categoria num índice de pesquisa de dicionário e gere uma incorporação para cada índice.
  • As categorias que aparecem menos de 5 vezes no conjunto de dados de preparação são tratadas como a categoria "desconhecido". A categoria "desconhecida" tem o seu próprio índice de pesquisa especial e incorporação resultante.

As transformações categóricas podem ser aplicadas a dados STRING em ficheiros CSV ou aos seguintes tipos de dados do BigQuery:

  • INT64
  • NUMERIC, BIGNUMERIC
  • FLOAT64
  • BOOL
  • STRING
  • DATA
  • DATA/HORA
  • HORA
  • TIMESTAMP

Texto

Uma transformação de texto faz com que a funcionalidade seja usada como texto de forma livre, normalmente composto por tokens de texto.

Seguem-se alguns exemplos de valores de texto:

  • "The quick brown fox"
  • "This restaurant is the best! The food is delicious"

Para modelos de previsão, a transformação de texto não é suportada para funcionalidades de covariáveis.

Quando prepara um modelo com uma funcionalidade com uma transformação de texto, o Vertex AI aplica as seguintes transformações de dados à funcionalidade e usa todas as que fornecem um sinal para a preparação:

  • O texto tal como está, sem alterações a maiúsculas/minúsculas, pontuação, ortografia, tempo verbal, etc.
  • Tokenize texto em palavras e gere 1-gramas e 2-gramas a partir de palavras. Converta cada n-grama num índice de pesquisa de dicionário e gere uma incorporação para cada índice. Combine a incorporação de todos os elementos numa única incorporação usando a média.

    A tokenização baseia-se nos limites dos scripts Unicode.

  • Os valores em falta têm o seu próprio índice de pesquisa e incorporação resultante.
  • As palavras vazias não recebem tratamento especial e não são removidas.

As transformações de texto podem ser aplicadas a dados STRING em ficheiros CSV ou aos seguintes tipos de dados do BigQuery:

  • STRING
  • DATA/HORA

Numérico

Uma transformação numérica faz com que uma coluna seja usada como um número ordinal ou quantitativo. Estes números podem ser comparados. Ou seja, dois números distintos podem ser inferiores ou superiores um ao outro.

Os espaços em branco à esquerda ou à direita são compactados.

A tabela seguinte mostra todos os formatos compatíveis para uma transformação numérica:

Formato Exemplos Notas
String numérica "101", 101.5" O caráter de ponto (".") é o único delimitador decimal válido. "101,5" e "100.000" não são strings numéricas válidas.
Notação científica "1.12345E+11", "1.12345e+11" Consulte a nota sobre strings numéricas relativamente a delimitadores decimais.
Não é um número "NAN", "nan", "+NAN" As maiúsculas e minúsculas são ignoradas. Os carateres de adição ("+") ou subtração ("-") antepostos são ignorados. Interpretado como valor NULL.
Infinity "INF", "+inf" As maiúsculas e minúsculas são ignoradas. Os carateres de adição ("+") ou subtração ("-") antepostos são ignorados. Interpretado como valor NULL.

Se um valor numa coluna com uma transformação numérica não estiver em conformidade com um destes formatos, a linha inteira é excluída da preparação ou o valor é tratado como nulo. Escolhe entre estes resultados quando seleciona a transformação numérica.

Quando prepara um modelo com uma funcionalidade com uma transformação numérica, o Vertex AI aplica as seguintes transformações de dados à funcionalidade e usa as que fornecem um sinal para a preparação:

  • O valor convertido em float32.
  • A pontuação z do valor.
  • Um índice de contentor do valor com base em quantis. O tamanho do segmento é 100.
  • log(value+1) quando o valor é superior ou igual a 0. Caso contrário, esta transformação não é aplicada e o valor é considerado um valor em falta.
  • z_score de log(value+1) quando o valor é superior ou igual a 0. Caso contrário, esta transformação não é aplicada e o valor é considerado um valor em falta.
  • Um valor booleano que indica se o valor é nulo.
  • As linhas com entradas numéricas inválidas (por exemplo, uma string que não pode ser analisada como float32) não são incluídas para a preparação e a previsão.
  • Os valores extremos/outliers não recebem nenhum tratamento especial.

As transformações numéricas podem ser aplicadas a dados STRING em ficheiros CSV ou aos seguintes tipos de dados do BigQuery:

  • INT64
  • NUMERIC, BIGNUMERIC
  • FLOAT64
  • STRING
  • TIMESTAMP

Indicação de tempo

Uma transformação de indicação de tempo faz com que uma funcionalidade seja usada como um ponto no tempo, representado como uma hora civil com um fuso horário ou uma indicação de tempo Unix. Apenas as funcionalidades com uma transformação de indicação de tempo podem ser usadas para a coluna Time.

Se não for especificado um fuso horário com a hora civil, a predefinição é UTC.

A tabela seguinte mostra todos os formatos de strings de data/hora compatíveis:

Formato Exemplo Notas
%E4Y-%m-%d "2017-01-30" Consulte a documentação do Abseil para ver uma descrição deste 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. Especifique o desvio do fuso horário (z) no formato: ±HH:MM[:SS[.ffffff]]
String de data/hora Unix em segundos "1541194447" Apenas para horas entre 01/Jan/1990 e 01/Jan/2030.
String de data/hora em formato Unix em milissegundos "1541194447000"
String de indicação de tempo Unix em microssegundos "1541194447000000"
String de indicação de tempo Unix em nanosegundos "1541194447000000000"

Se um valor numa coluna com uma transformação de data/hora não estiver em conformidade com um destes formatos, a linha inteira é excluída da preparação ou o valor é tratado como nulo. Escolhe entre estes resultados quando seleciona a transformação de data/hora.

Quando prepara um modelo com uma funcionalidade com uma transformação de data/hora, o Vertex AI aplica as seguintes transformações de dados à funcionalidade e usa todas as que fornecem um sinal para a preparação:

  • Aplicar as transformações para colunas numéricas.
  • Determine o ano, o mês, o dia e o dia da semana. Trate cada valor do carimbo de data/hora como uma coluna Categorical.
  • Os valores numéricos inválidos (por exemplo, valores que estão fora de um intervalo de data/hora típico ou são valores extremos) não recebem tratamento especial e não são removidos.
  • As linhas com entradas de data/hora inválidas (por exemplo, uma string de data/hora inválida) não são incluídas para a preparação e a previsão.

As transformações de data/hora podem ser aplicadas a dados STRING em ficheiros CSV ou aos seguintes tipos de dados do BigQuery:

  • INT64
  • STRING
  • DATA
  • DATA/HORA
  • TIMESTAMP

Tipos de dados compostos

Por vezes, tem de incluir dados compostos por vários primitivos de dados, como uma matriz ou uma estrutura. Os tipos de dados compostos só estão disponíveis através do BigQuery como origem de dados e não são suportados para modelos de previsão.

Struct

Uma struct pode ser usada para representar um grupo de campos etiquetados. Uma struct tem uma lista de nomes de campos, cada um associado a um tipo de dados. A lista de campos e os respetivos tipos de dados têm de ser iguais para todos os valores de struct numa coluna.

Seguem-se alguns exemplos de structs:

  • Pressão arterial – {"timestamp": 1535761416, "systolic": 110, "diastolic": 70}
  • Produto: {"name": "iPhone", price: 1000}

Usa o tipo de dados STRUCT do BigQuery para representar estruturas.

Os valores Struct são automaticamente unidos em campos. O Vertex AI aplica a transformação de dados aos campos reduzidos de acordo com o respetivo tipo de transformação.

Matriz

É possível usar uma matriz para representar uma lista de valores. Os valores contidos têm de aceitar o mesmo tipo de transformação. Pode incluir estruturas em matrizes. Todas as estruturas na matriz têm de ter a mesma estrutura.

O Vertex AI processa matrizes como representativas do peso relativo. Por outras palavras, os itens que aparecem mais tarde na matriz têm um peso maior do que os itens que aparecem no início.

Seguem-se alguns exemplos de matrizes:

  • Categorias de produtos:

    ["Clothing", "Women", "Dress", ...]

  • Compras mais recentes:

    ["iPhone", "Laptop", "Suitcase", ...]

  • Registos de utilizadores:

    [{"name": "Joelle", ID: 4093}, {"name": "Chloe", ID: 2047}, {"name": "Neko", ID: 3432}, ...]

Usa o tipo de dados ARRAY do BigQuery para representar matrizes.

A transformação de dados que o Vertex AI aplica depende do tipo de transformação aplicado à matriz:

Tipo de matriz Transformação
Matriz numérica
  • Todas as transformações para tipos numéricos aplicadas à média dos últimos N itens, em que N = {1, 2, 4, 8, todos}. Assim, os itens mais enfatizados são os que se encontram no final da matriz e não no início.
  • A média de matrizes vazias é tratada como zero.
Matriz categorial
  • Para cada elemento na matriz dos últimos N itens, onde N = {1, 2, 4, 8, todos}, converta o nome da categoria num índice de pesquisa de dicionário e gere uma incorporação para cada índice. Combine a incorporação de todos os elementos numa única incorporação usando a média.
  • As matrizes vazias são tratadas como uma incorporação de zeros.
Matriz de texto
  • Concatene todos os valores de texto na matriz num único valor de texto usando um espaço (" ") como delimitador e, em seguida, trate o resultado como um único valor de texto. Aplicar as transformações para colunas de texto.
  • As matrizes vazias são tratadas como uma incorporação de zeros.
Matriz de indicações de tempo
  • Aplique as transformações para colunas numéricas à média dos últimos N itens da matriz. N = {1, 2, 4, 8, all}. Isto significa que os itens mais enfatizados são os que se encontram no final da matriz.
Matriz de estrutura
  • As structs na matriz são reduzidas a campos individuais e montadas em matrizes por campo. A transformação de matriz (conforme descrito nesta tabela) é aplicada de acordo com o tipo de campo dessa matriz.

Como são processados os valores em falta ou nulos

A forma como os valores em falta são processados depende do objetivo do modelo e da transformação aplicada a essa funcionalidade.

Classificação e regressão

Para modelos de classificação e regressão, os valores nulos resultam numa incorporação para transformações categóricas e de texto; para outras transformações, o valor nulo é deixado como nulo.

Previsão

Para modelos de previsão, os valores nulos são imputados a partir dos dados circundantes. (Não existe nenhuma opção para deixar um valor nulo como nulo.) Se preferir controlar a forma como os valores nulos são imputados, pode imputá-los explicitamente. Os melhores valores a usar podem depender dos seus dados e do problema da sua empresa.

As linhas em falta (por exemplo, nenhuma linha para uma data específica, com uma granularidade de dados diária) são permitidas, mas o Vertex AI não imputa valores para os dados em falta. Uma vez que as linhas em falta podem diminuir a qualidade do modelo, deve evitar linhas em falta sempre que possível. Por exemplo, se uma linha estiver em falta porque a quantidade de vendas para esse dia foi zero, adicione uma linha para esse dia e defina explicitamente os dados de vendas como 0.

Que valores são tratados como valores nulos

Quando prepara um modelo tabular do AutoML, o Vertex AI trata os seguintes valores como valores nulos:

  • Um valor NULL do BigQuery.

  • Valores numéricos infinitos ou NaN.

  • Uma string vazia. A Vertex AI não remove espaços das strings. Ou seja, " " não é considerado um valor nulo.

  • Uma string que pode ser convertida em NaN ou num valor numérico infinito.

    • Para "NAN": ignorar maiúsculas/minúsculas, com um sinal de mais ou menos opcional anteposto.
    • Para "INF": ignorar maiúsculas/minúsculas, com um sinal de mais ou menos opcional anteposto.
  • Valores em falta.

  • Valores numa coluna com uma transformação numérica ou de data/hora que não estejam num formato válido para a transformação da coluna. Neste caso, se tiver especificado que a linha com o valor inválido deve ser usada na preparação, o valor inválido é considerado nulo.

Formato de dados para previsões

O formato dos dados usados para a previsão tem de corresponder ao formato usado para a preparação.

Se tiver preparado o modelo com dados num ficheiro CSV no Cloud Storage, os dados eram do tipo STRING. Se estiver a usar um objeto JSON para enviar o seu pedido de previsão, certifique-se de que todos os valores nos pares de chave-valor também são do tipo STRING.

Se tiver preparado o seu modelo com dados armazenados no BigQuery e estiver a usar um objeto JSON para enviar o seu pedido de previsão, os tipos de dados dos valores nos pares de chave-valor JSON têm de seguir o mapeamento na tabela abaixo.

Tipo de dados do BigQuery Tipo de dados JSON
INT64 String
NUMERIC, BIGNUMERIC Número
FLOAT64 Número
BOOL Booleano
STRING String
DATA String
DATA/HORA String
HORA String
TIMESTAMP String
Matriz Matriz
STRUCT Objeto

Por exemplo, se os seus dados de preparação contiverem length caraterísticas do tipo FLOAT64, o seguinte par de chave-valor JSON está correto:

"length":3.6,

Por outro lado, o seguinte par de chave-valor JSON vai gerar um erro:

"length":"3.6",

O que se segue?