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 STRUCT s 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:
- Percursos do utilizador completos para modelos de ML
- Percursos do utilizador completos para modelos de previsão de séries cronológicas