Pré-processamento automático de caraterísticas

O BigQuery ML realiza o pré-processamento automático durante a preparação através da declaração CREATE MODEL. O pré-processamento automático consiste na imputação de valores em falta e nas transformações de caraterísticas.

Para informações sobre o suporte de pré-processamento de caraterísticas no BigQuery ML, consulte a vista geral do pré-processamento de caraterísticas.

Imputação de dados em falta

Em estatística, a imputação é usada para substituir dados em falta por valores substituídos. Quando treina um modelo no BigQuery ML, os valores NULL são tratados como dados em falta. Quando prevê resultados no BigQuery ML, podem ocorrer valores em falta quando o BigQuery ML encontra um valor NULL ou um valor nunca antes visto. O BigQuery ML processa os dados em falta de forma diferente, com base no tipo de dados na coluna.

Tipo de coluna Método de imputação
Numérico Tanto na preparação como na previsão, os valores NULL nas colunas numéricas são substituídos pelo valor médio da coluna fornecida, calculado pela coluna de funcionalidades nos dados de entrada originais.
Codificado com disparo único/disparos múltiplos Na preparação e na previsão, os valores NULL nas colunas codificadas são mapeados para uma categoria adicional que é adicionada aos dados. Os dados nunca vistos anteriormente são atribuídos a um peso de 0 durante a previsão.
TIMESTAMP As colunas TIMESTAMP usam uma combinação de métodos de imputação de colunas padronizadas e codificadas a quente. Para a coluna de tempo Unix gerada, o BigQuery ML substitui os valores pelo tempo Unix médio nas colunas originais. Para outros valores gerados, o BigQuery ML atribui-os à respetiva categoria NULL para cada funcionalidade extraída.
STRUCT No treino e na previsão, cada campo do STRUCT é imputado de acordo com o respetivo tipo.

Transformações de funcionalidades

Por predefinição, o BigQuery ML transforma as caraterísticas de entrada da seguinte forma:

Tipo de dados de entrada Método de transformação Detalhes
INT64
NUMERIC
BIGNUMERIC
FLOAT64
Normalização Para a maioria dos modelos, o BigQuery ML padroniza e centra as colunas numéricas em zero antes de as passar para a preparação. As exceções são os modelos de árvore melhorada e floresta aleatória, para os quais não ocorre normalização, e os modelos de k-means, em que a opção STANDARDIZE_FEATURES controla se as caraterísticas numéricas são normalizadas.
BOOL
STRING
BYTES
DATE
DATETIME
TIME
Codificado com um disparo único Para todas as colunas não numéricas e não de matrizes, exceto TIMESTAMP, o BigQuery ML executa uma transformação de codificação one-hot para todos os modelos, exceto os modelos de árvores de decisão otimizadas e de florestas aleatórias. Esta transformação gera uma funcionalidade separada para cada valor único na coluna. A transformação de codificação de etiquetas é aplicada para formar modelos de árvores melhoradas e de florestas aleatórias para converter cada valor único num valor numérico.
ARRAY Codificado com vários disparos Para todas as colunas ARRAY não numéricas, o BigQuery ML executa uma transformação de codificação multi-hot. Esta transformação gera uma funcionalidade separada para cada elemento único no ARRAY.
TIMESTAMP Transformação de data/hora Quando um modelo de regressão linear ou logística encontra uma coluna TIMESTAMP, extrai um conjunto de componentes da TIMESTAMP e executa uma combinação de normalização e codificação one-hot nos componentes extraídos. Para o componente de tempo epoch Unix em segundos, o BigQuery ML usa a normalização. Para todos os outros componentes, usa a codificação one-hot.

Para mais informações, consulte a seguinte tabela de transformação de caraterísticas de data/hora.
STRUCT Expansão de estruturas Quando o BigQuery ML encontra uma coluna STRUCT, expande os campos no interior de STRUCT para criar uma única coluna. Requer que todos os campos de STRUCT sejam denominados. Não são permitidos STRUCTs aninhados. Os nomes das colunas após a expansão estão no formato {struct_name}_{field_name}.
ARRAY de STRUCT Sem transformação
ARRAY de NUMERIC Sem transformação

TIMESTAMP transformação de funcionalidades

A tabela seguinte mostra os componentes extraídos das colunas TIMESTAMP e o método de transformação correspondente.

TIMESTAMP componente processed_input resultados Método de transformação
Tempo de época Unix em segundos [COLUMN_NAME] Normalização
Dia do mês _TS_DOM_[COLUMN_NAME] Codificação de disparo único
Dia da semana _TS_DOW_[COLUMN_NAME] Codificação de disparo único
Mês do ano _TS_MOY_[COLUMN_NAME] Codificação de disparo único
Hora do dia _TS_HOD_[COLUMN_NAME] Codificação de disparo único
Minuto da hora _TS_MOH_[COLUMN_NAME] Codificação de disparo único
Semana do ano (as semanas começam ao domingo) _TS_WOY_[COLUMN_NAME] Codificação de disparo único
Ano _TS_YEAR_[COLUMN_NAME] Codificação de disparo único

Codificação de caraterísticas de categorias

Para funcionalidades com codificação one-hot, pode especificar um método de codificação predefinido diferente através da opção do modelo CATEGORY_ENCODING_METHOD. Para os modelos lineares generalizados (GLM), pode definir CATEGORY_ENCODING_METHOD para um dos seguintes valores:

Codificação de disparo único

A codificação one-hot mapeia cada categoria que uma funcionalidade tem para a sua própria funcionalidade binária, em que 0 representa a ausência da funcionalidade e 1 representa a presença (conhecida como uma variável fictícia). Este mapeamento cria N colunas de novas funcionalidades, em que N é o número de categorias únicas para a funcionalidade na tabela de preparação.

Por exemplo, suponhamos que a sua tabela de preparação tem uma coluna de caraterísticas denominada fruit com as categorias Apple, Banana e Cranberry, como as seguintes:

Linha fruta
1 Apple
2 Banana
3 Arando

Neste caso, a opção CATEGORY_ENCODING_METHOD='ONE_HOT_ENCODING' transforma a tabela na seguinte representação interna:

Linha fruit_Apple fruit_Banana fruit_Cranberry
1 1 0 0
2 0 1 0
3 0 0 1

A codificação de disparo único é suportada por modelos de regressão linear e logística e árvore de reforço.

Codificação fictícia

A codificação fictícia é semelhante à codificação de disparo único, em que uma caraterística por categoria é transformada num conjunto de variáveis de marcadores de posição. A codificação fictícia usa variáveis de marcador de posição N-1 em vez de variáveis de marcador de posição N para representar categorias N de uma funcionalidade. Por exemplo, se definir CATEGORY_ENCODING_METHOD como 'DUMMY_ENCODING' para a mesma coluna de caraterísticas fruit apresentada no exemplo de codificação one-hot anterior, a tabela é transformada na seguinte representação interna:

Linha fruit_Apple fruit_Banana
1 1 0
2 0 1
3 0 0

A categoria com mais ocorrências no conjunto de dados de preparação é ignorada. Quando várias categorias têm o maior número de ocorrências, é eliminada uma categoria aleatória desse conjunto.

O conjunto final de ponderações de ML.WEIGHTS continua a incluir a categoria excluída, mas a respetiva ponderação é sempre 0.0. Para ML.ADVANCED_WEIGHTS, o erro padrão e o valor p da variável eliminada são NaN.

Se warm_start for usado num modelo que foi inicialmente preparado com 'DUMMY_ENCODING', a mesma variável de marcador de posição é ignorada na primeira execução de preparação. Os modelos não podem alterar os métodos de codificação entre execuções de preparação.

A codificação fictícia é suportada por modelos de regressão linear e logística.

Codificação das etiquetas

A codificação de etiquetas transforma o valor de uma caraterística categórica num valor INT64 em [0, <number of categories>].

Por exemplo, se tivesse um conjunto de dados de livros como o seguinte:

Título Género
Livro 1 Fantasia
Livro 2 Cozinhar
Livro 3 Histórico
Livro 4 Cozinhar

Os valores codificados da etiqueta podem ter um aspeto semelhante ao seguinte:

Título Género (texto) Género (numérico)
Livro 1 Fantasia 1
Livro 2 Cozinhar 2
Livro 3 Histórico 3
Livro 4 Cozinhar 2

O vocabulário de codificação é ordenado alfabeticamente. Os valores e as categorias NULL que não estão no vocabulário são codificados como 0.

A codificação de etiquetas é suportada por modelos de árvores melhoradas.

Codificação de destino

A codificação de destino substitui o valor da caraterística categórica pela probabilidade de o destino para modelos de classificação ou pelo valor esperado do destino para modelos de regressão.

As funcionalidades que foram codificadas por destino podem ter um aspeto semelhante ao seguinte exemplo:

# Classification model
+------------------------+----------------------+
| original value         | target encoded value |
+------------------------+----------------------+
| (category_1, target_1) |     0.5              |
| (category_1, target_2) |     0.5              |
| (category_2, target_1) |     0.0              |
+------------------------+----------------------+

# Regression model
+------------------------+----------------------+
| original value         | target encoded value |
+------------------------+----------------------+
| (category_1, 2)        |     2.5              |
| (category_1, 3)        |     2.5              |
| (category_2, 1)        |     1.5              |
| (category_2, 2)        |     1.5              |
+------------------------+----------------------+

A codificação de destino é suportada por modelos de árvores melhoradas.

O que se segue?

Para mais informações acerca das funções e declarações SQL suportadas para modelos que suportam o pré-processamento automático de caraterísticas, consulte os seguintes documentos: