La función ML.PREDICT

Función ML.PREDICT

La función ML.PREDICT se puede usar para predecir resultados mediante el modelo. La predicción se puede hacer durante la creación del modelo, después de la creación del modelo o después de una falla (siempre que haya finalizado al menos 1 iteración). ML.PREDICT siempre usa los pesos del modelo de la última iteración exitosa.

El resultado de la función ML.PREDICT tiene tantas filas como la tabla de entrada y también incluye todas las columnas de la tabla de entrada y todas las columnas de resultado del modelo. Los nombres de las columnas de resultado para el modelo son predicted_<label_column_name> y, para los modelos de regresión logística, predicted_<label_column_name>_probs. En ambas columnas, label_column_name es el nombre de la columna de etiqueta de entrada que se usa durante el entrenamiento.

  • Para los modelos de regresión logística:

    • La columna de resultado predicted_<label_column_name>_probs es un arreglo de STRUCT de tipo [<label, prob>] que contiene la probabilidad prevista de cada etiqueta.
    • La columna de resultado predicted_<label_column_name> es una de las dos etiquetas de entrada, según la etiqueta que tenga la mayor probabilidad prevista.
  • Para modelos de regresión logística multiclase:

    • La columna de resultado predicted_<label_column_name>_probs es la probabilidad para cada etiqueta de clase que se calcula mediante una función softmax.
    • La columna de resultado predicted_<label_column_name> es la etiqueta con la puntuación de probabilidad prevista más alta.
  • Para los modelos de regresión lineal:

    • La columna de resultado predicted_<label_column_name> es el valor previsto de la etiqueta.
  • Para los modelos k-means:

    • Muestra las columnas etiquetadas centroid_id y nearest_centroids_distance. nearest_centroids_distance contiene un ARREGLO de STRUCT llamado nearest_centroids_distance, que tiene las distancias a los clústeres k más cercanos, donde k es igual al menor de num_clusters o 5. Si este modelo se creó con la opción standardize_features configurada en TRUE, entonces el modelo procesa estas distancias con atributos estandarizados; de lo contrario, las procesa con atributos no estandarizados.
  • Para los modelos TensorFlow:

    • La entrada debe ser convertible al tipo esperado por el modelo.
    • El resultado es el del método de predicción del modelo de TensorFlow.

Permisos para ML.PREDICT

Para ejecutar ML.PREDICT, se requieren bigquery.models.create y bigquery.models.getData.

Sintaxis de ML.PREDICT

ML.PREDICT(MODEL model_name,
          {TABLE table_name | (query_statement)}
          [, STRUCT<threshold FLOAT64> settings)])

model_name

model_name es el nombre del modelo que estás evaluando. Si no tienes un proyecto predeterminado configurado, antepone el ID del proyecto al nombre del modelo en el siguiente formato: “[PROJECT_ID].[DATASET].[MODEL]” (incluidos los acentos graves); por ejemplo, “myproject.mydataset.mymodel”.

table_name

table_name es el nombre de la tabla de entrada que contiene los datos de evaluación. Si no tienes configurado un proyecto predeterminado, antepone el ID del proyecto al nombre de la tabla en el siguiente formato: “[PROJECT_ID].[DATASET].[TABLE]” (incluidos los acentos graves); por ejemplo, “myproject.mydataset.mytable”.

Los nombres de las columnas de entrada en la tabla deben contener los nombres de las columnas en el modelo, y sus tipos deben ser compatibles de acuerdo con las reglas de coerción implícitas de BigQuery.

Si hay columnas no utilizadas de la tabla, se pasarán a las columnas de resultado.

query_statement

La cláusula query_statement especifica la consulta de SQL estándar que se utiliza para generar los datos de evaluación. Consulta la página Sintaxis de consultas de SQL estándar para conocer la sintaxis de SQL admitida de la cláusula query_statement.

Los nombres de las columnas de entrada de la consulta deben contener los nombres de las columnas en el modelo, y sus tipos deben ser compatibles de acuerdo con las reglas de coerción implícita de BigQuery.

Si hay columnas de la consulta que no se usan, se pasarán a las columnas de resultado.

Si la cláusula TRANSFORM estaba presente en la instrucción CREATE MODEL que creó model_name, entonces solo las columnas de entrada presentes en la cláusula TRANSFORM deben estar en query_statement.

threshold

El límite es un límite personalizado para tu modelo de regresión logística binaria y se utiliza como el límite entre las dos etiquetas (opcional). Las predicciones por encima del límite se consideran predicciones positivas. Las predicciones por debajo del límite son predicciones negativas. El valor del límite es de tipo FLOAT64 y forma parte de la configuración STRUCT. El valor predeterminado es 0.5.

Asignación

En las estadísticas, la asignación se usa para reemplazar los datos faltantes con valores sustituidos. Cuando entrenas un modelo en BigQuery ML, los valores NULL se tratan como datos faltantes. Cuando predices resultados en BigQuery ML, puede haber valores faltantes cuando BigQuery ML encuentra un valor NULL o un valor nunca visto anteriormente. BigQuery ML maneja los datos faltantes en función de si la columna es numérica, tiene codificación one-hot o es una marca de tiempo.

Columnas numéricas

Tanto en el entrenamiento como en la predicción, los valores NULL de las columnas numéricas se reemplazan por el valor promedio que calcula la columna de atributos en los datos de entrada originales.

Columnas con codificación one-hot o multi-hot

Tanto en el entrenamiento como en la predicción, los valores NULL en las columnas codificadas se asignan a una categoría adicional que se agrega a los datos. Los datos no vistos anteriormente tienen asignado un peso de 0 durante la predicción.

Columnas de marca de tiempo

Las columnas TIMESTAMP usan una combinación de métodos de asignación de columnas estandarizadas y con codificación one-hot. Para la columna de tiempo de Unix generada, BigQuery ML reemplaza los valores con el tiempo promedio de Unix en las columnas originales. Para otros valores generados, BigQuery ML los asigna a la categoría NULL correspondiente para cada atributo extraído.

Columnas STRUCT

Tanto en el entrenamiento como en la predicción, cada campo de STRUCT se asigna según su tipo.

Ejemplos de ML.PREDICT

En los siguientes ejemplos, se supone que el modelo y la tabla de entrada están en tu proyecto predeterminado.

Predice un resultado

En la siguiente consulta, se usa la función ML.PREDICT para predecir un resultado. La consulta muestra estas columnas:

  • predicted_label
  • label
  • column1
  • column2
SELECT
  *
FROM
  ML.PREDICT(MODEL `mydataset.mymodel`,
    (
    SELECT
      label,
      column1,
      column2
    FROM
      `mydataset.mytable`))

Compara predicciones de dos modelos diferentes

En este ejemplo, se usa la siguiente consulta para crear el primer modelo.

CREATE MODEL
  `mydataset.mymodel1`
OPTIONS
  (model_type='linear_reg',
    input_label_cols=['label'],
  ) AS
SELECT
  label,
  input_column1
FROM
  `mydataset.mytable`

La siguiente consulta se utiliza para crear el segundo modelo.

CREATE MODEL
  `mydataset.mymodel2`
OPTIONS
  (model_type='linear_reg',
    input_label_cols=['label'],
  ) AS
SELECT
  label,
  input_column2
FROM
  `mydataset.mytable`

En la siguiente consulta, se usa la función ML.PREDICT para comparar el resultado de los dos modelos.

SELECT
  label,
  predicted_label1,
  predicted_label AS predicted_label2
FROM
  ML.PREDICT(MODEL `mydataset.mymodel2`,
    (
    SELECT
      * EXCEPT (predicted_label),
          predicted_label AS predicted_label1
    FROM
      ML.PREDICT(MODEL `mydataset.mymodel1`,
        TABLE `mydataset.mytable`)))

Especifica un límite personalizado

En la siguiente consulta, se usa la función ML.PREDICT mediante la especificación de datos de entrada y un límite personalizado de 0.55.

SELECT
  *
FROM
  ML.PREDICT(MODEL `mydataset.mymodel`,
    (
    SELECT
      custom_label,
      column1,
      column2
    FROM
      `mydataset.mytable`),
    STRUCT(0.55 AS threshold))

Predice un resultado con un modelo importado de TensorFlow

En la siguiente consulta, se usa la función ML.PREDICT para predecir resultados con un modelo importado de TensorFlow. La tabla input_data contiene las entradas del esquema que espera my_model. Consulta la declaración CREATE MODEL para los modelos TensorFlow a fin de obtener más información.

SELECT *
FROM ML.PREDICT(MODEL `my_project`.my_dataset.my_model,
               (SELECT * FROM input_data))

Predice un resultado con un modelo entrenado con la cláusula TRANSFORM

En la siguiente consulta, se crea un modelo mediante la cláusula TRANSFORM:

CREATE MODEL m
  TRANSFORM(f1 + f2 as c, label)
  OPTIONS(...)
AS SELECT f1, f2, f3, label FROM t;

Debido a que la columna f3 no aparece en la cláusula TRANSFORM, en la siguiente consulta de predicción, se omite esa columna en query_statement:

SELECT * FROM ML.PREDICT(
  MODEL m, (SELECT f1, f2 FROM t1));

Si se proporciona f3 en la instrucción SELECT, no se usa a fin de calcular predicciones, sino que se pasa para usarlo en el resto de la instrucción de SQL.