Preprocesamiento automático de funciones

BigQuery ML realiza un preprocesamiento automático durante el entrenamiento mediante la instrucción CREATE MODEL. El preprocesamiento automático consta de imputación de valores que faltan y transformaciones de características.

Para obtener información sobre la compatibilidad con el preprocesamiento de características en BigQuery ML, consulta el resumen del preprocesamiento de características.

Imputación de datos que faltan

En estadística, la imputación se usa para sustituir los datos que faltan por valores sustituidos. Cuando entrenas un modelo en BigQuery ML, los valores NULL se tratan como datos que faltan. Cuando predices resultados en BigQuery ML, pueden producirse valores que faltan cuando BigQuery ML encuentra un valor NULL o un valor que no se ha visto antes. BigQuery ML gestiona los datos que faltan de forma diferente en función del tipo de datos de la columna.

Tipo de columna Método de imputación
Numérico Tanto en el entrenamiento como en la predicción, los valores NULL de las columnas numéricas se sustituyen por el valor medio de la columna en cuestión, calculado por la columna de características de los datos de entrada originales.
Codificación one-hot o multi-hot Tanto en el entrenamiento como en la predicción, los valores NULL de las columnas codificadas se asignan a una categoría adicional que se añade a los datos. A los datos que no se han visto antes se les asigna un peso de 0 durante la predicción.
TIMESTAMP Las columnas TIMESTAMP usan una combinación de métodos de imputación de columnas estandarizadas y codificadas mediante codificación one-hot. En el caso de la columna de hora Unix generada, BigQuery ML sustituye los valores por la media de la hora Unix de las columnas originales. En el caso de otros valores generados, BigQuery ML los asigna a la categoría NULL correspondiente de cada característica extraída.
STRUCT Tanto en el entrenamiento como en la predicción, cada campo de STRUCT se imputa según su tipo.

Transformaciones de funciones

De forma predeterminada, BigQuery ML transforma las funciones de entrada de la siguiente manera:

Tipo de datos de entrada Método de transformación Detalles
INT64
NUMERIC
BIGNUMERIC
FLOAT64
Estandarización En la mayoría de los modelos, BigQuery ML estandariza y centra las columnas numéricas en cero antes de usarlas en el entrenamiento. Las excepciones son los modelos de árbol de decisión reforzado y de bosque aleatorio, en los que no se produce ninguna estandarización, y los modelos de k-means, en los que la opción STANDARDIZE_FEATURES controla si las características numéricas se estandarizan.
BOOL
STRING
BYTES
DATE
DATETIME
TIME
Codificación one-hot En el caso de todas las columnas no numéricas y no de matriz que no sean TIMESTAMP, BigQuery ML realiza una transformación de codificación one-hot para todos los modelos, excepto los de árbol de refuerzo y de bosque aleatorio. Esta transformación genera una función independiente para cada valor único de la columna. La transformación de codificación de etiquetas se aplica para entrenar modelos de árbol de refuerzo y de bosque aleatorio para convertir cada valor único en un valor numérico.
ARRAY Codificación multi-hot En todas las columnas ARRAY no numéricas, BigQuery ML realiza una transformación de codificación multi-hot. Esta transformación genera una función independiente para cada elemento único del ARRAY.
TIMESTAMP Transformación de marca de tiempo Cuando un modelo de regresión lineal o logística se encuentra con una columna TIMESTAMP, extrae un conjunto de componentes de la TIMESTAMP y realiza una combinación de estandarización y codificación one-hot en los componentes extraídos. Para el componente de tiempo de época de Unix en segundos, BigQuery ML usa la estandarización. En el resto de los componentes, se usa la codificación one-hot.

Para obtener más información, consulta la siguiente tabla de transformación de características de marca de tiempo.
STRUCT Expansión de struct Cuando BigQuery ML encuentra una columna STRUCT, expande los campos de su interior para crear una sola columna.STRUCT Requiere que se asignen nombres a todos los campos de STRUCT. No se permiten STRUCTs anidadas. Los nombres de las columnas después de la expansión tienen el formato {struct_name}_{field_name}.
ARRAY de STRUCT Sin transformación
ARRAY de NUMERIC Sin transformación

Transformación de la función TIMESTAMP

En la siguiente tabla se muestran los componentes extraídos de las columnas TIMESTAMP y el método de transformación correspondiente.

Componente TIMESTAMP processed_input resultado Método de transformación
Tiempo de época de Unix en segundos. [COLUMN_NAME] Estandarización
Día del mes _TS_DOM_[COLUMN_NAME] Codificación one-hot
Día de la semana _TS_DOW_[COLUMN_NAME] Codificación one-hot
Mes del año _TS_MOY_[COLUMN_NAME] Codificación one-hot
Hora del día _TS_HOD_[COLUMN_NAME] Codificación one-hot
Minuto de la hora _TS_MOH_[COLUMN_NAME] Codificación one-hot
Semana del año (las semanas empiezan el domingo) _TS_WOY_[COLUMN_NAME] Codificación one-hot
Año _TS_YEAR_[COLUMN_NAME] Codificación one-hot

Codificación de funciones de categoría

En el caso de las características que se codifican con un solo valor activo, puedes especificar otro método de codificación predeterminado mediante la opción de modelo CATEGORY_ENCODING_METHOD. En el caso de los modelos lineales generalizados (GLM), puedes asignar a CATEGORY_ENCODING_METHOD uno de los siguientes valores:

Codificación one-hot

La codificación one-hot asigna a cada categoría que tiene una característica su propia característica binaria, donde 0 representa la ausencia de la característica y 1 representa la presencia (conocida como variable ficticia). Esta asignación crea N columnas de características nuevas, donde N es el número de categorías únicas de la característica en la tabla de entrenamiento.

Por ejemplo, supongamos que tu tabla de entrenamiento tiene una columna de características llamada fruit con las categorías Apple, Banana y Cranberry, como se muestra a continuación:

Acceso fruta
1 Apple
2 Amarillo huevo
3 Arándano rojo

En este caso, la opción CATEGORY_ENCODING_METHOD='ONE_HOT_ENCODING' transforma la tabla en la siguiente representación interna:

Acceso fruit_Apple fruit_Banana fruit_Cranberry
1 1 0 0
2 0 1 0
3 0 0 1

La codificación one-hot es compatible con los modelos de regresión lineal y logística y de árbol de refuerzo.

Codificación ficticia

La codificación ficticia es similar a la codificación one-hot, en la que una característica categórica se transforma en un conjunto de variables de marcador de posición. La codificación ficticia usa variables de marcador de posición N-1 en lugar de variables de marcador de posición N para representar las categorías N de una función. Por ejemplo, si asignas el valor CATEGORY_ENCODING_METHOD a 'DUMMY_ENCODING' en la misma columna de características fruit que se muestra en el ejemplo de codificación one-hot anterior, la tabla se transforma en la siguiente representación interna:

Acceso fruit_Apple fruit_Banana
1 1 0
2 0 1
3 0 0

Se elimina la categoría con más apariciones en el conjunto de datos de entrenamiento. Cuando varias categorías tienen el mayor número de ocurrencias, se elimina una categoría aleatoria de ese conjunto.

El conjunto final de pesos de ML.WEIGHTS sigue incluyendo la categoría eliminada, pero su peso siempre es 0.0. En el caso de ML.ADVANCED_WEIGHTS, el error estándar y el valor p de la variable eliminada son NaN.

Si se usa warm_start en un modelo que se entrenó inicialmente con 'DUMMY_ENCODING', la misma variable de marcador de posición se elimina de la primera ejecución del entrenamiento. Los modelos no pueden cambiar los métodos de codificación entre ejecuciones de entrenamiento.

La codificación ficticia es compatible con los modelos de regresión lineal y logística.

Codificación de etiquetas

La codificación de etiquetas transforma el valor de una característica categórica en un INT64 en [0, <number of categories>].

Por ejemplo, si tuvieras un conjunto de datos de libros como el siguiente:

Título Género
Libro 1 Fantasía
Libro 2 Cocina
Libro 3 Historial
Libro 4 Cocina

Los valores codificados de la etiqueta pueden ser similares a los siguientes:

Título Género (texto) Género (numérico)
Libro 1 Fantasía 1
Libro 2 Cocina 2
Libro 3 Historial 3
Libro 4 Cocina 2

El vocabulario de codificación se ordena alfabéticamente. Los valores y las categorías de NULL que no están en el vocabulario se codifican como 0.

Los modelos de árbol potenciado admiten la codificación de etiquetas.

Codificación de destino

La codificación de destino sustituye el valor de la función categórica por la probabilidad del destino en los modelos de clasificación o por el valor esperado del destino en los modelos de regresión.

Las funciones que se han codificado por objetivo pueden tener un aspecto similar al del siguiente ejemplo:

# 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              |
+------------------------+----------------------+

La codificación de destino es compatible con los modelos de árbol potenciado.

Siguientes pasos

Para obtener más información sobre las instrucciones y funciones de SQL admitidas en los modelos que admiten el preprocesamiento automático de características, consulta los siguientes documentos: