Función ML.EVALUATE

Función ML.EVALUATE

Usa la función ML.EVALUATE para evaluar las métricas de modelos. La función ML.EVALUATE puede usarse con modelos de serie temporal de regresión lineal, regresión logística, k-means, factorización de matrices y basados en ARIMA. También puedes usar la función ML.ROC_CURVE para evaluar los modelos de regresión logística, pero ML.ROC_CURVE no es compatible con los modelos multiclase.

El resultado de la función ML.EVALUATE es una sola fila que contiene métricas comunes aplicables al tipo de modelo proporcionado.

ML.EVALUATE muestra las siguientes columnas para un modelo de regresión logística o multiclase:

  • precision
  • recall
  • accuracy
  • f1_score
  • log_loss
  • roc_auc

ML.EVALUATE muestra las siguientes columnas para un modelo de factorización de matrices explícita o de regresión lineal:

  • mean_absolute_error
  • mean_squared_error
  • mean_squared_log_error
  • median_absolute_error
  • r2_score
  • explained_variance

ML.EVALUATE muestra las siguientes columnas para un modelo k-means:

ML.EVALUATE muestra las siguientes columnas para un modelo de factorización de matrices implícita:

ML.EVALUATE muestra las siguientes columnas para los modelos de serie temporal basados en ARIMA:

  • time_series_id
  • non_seasonal_p
  • non_seasonal_d
  • non_seasonal_q
  • has_drift
  • log_likelihood
  • AIC
  • variance
  • seasonal_periods

Limitaciones de ML.EVALUATE

La función ML.EVALUATE está sujeta a las siguientes limitaciones:

Sintaxis de ML.EVALUATE

ML.EVALUATE(MODEL model_name
           [, {TABLE table_name | (query_statement)}]
           [, STRUCT(<T> AS threshold)])

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 (opcional). 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”.

Si se especifica table_name, los nombres de las columnas de entrada en la tabla deben coincidir con 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. La entrada debe tener una columna que coincida con el nombre de la columna de la etiqueta proporcionada durante el entrenamiento. Este valor se proporciona con la opción input_label_cols. Si no se especifica input_label_cols, se usa la columna “label” en los datos de entrenamiento.

Si no se especifica table_name ni query_statement, ML.EVALUATE calcula los resultados de la evaluación de la siguiente manera:

  • Si los datos se dividen durante el entrenamiento, los datos de la evaluación dividida se utilizan para calcular los resultados de la evaluación.
  • Si los datos no se dividen durante el entrenamiento, toda la información de entrenamiento se usará para calcular los resultados de la evaluación.

query_statement

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

Si se especifica query_statement, los nombres de la columna de entrada de la consulta deben coincidir con los nombres de la columna en el modelo, y sus tipos deben ser compatibles según las reglas de coerción implícitas de BigQuery. La entrada debe tener una columna que coincida con el nombre de la columna de la etiqueta proporcionada durante el entrenamiento. Este valor se proporciona con la opción input_label_cols. Si no se especifica input_label_cols, se usa la columna “label” en los datos de entrenamiento. Las columnas adicionales se ignoran.

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

Si no se especifica table_name ni query_statement, ML.EVALUATE calcula los resultados de la evaluación de la siguiente manera:

  • Si los datos se dividen durante el entrenamiento, los datos de la evaluación dividida se utilizan para calcular los resultados de la evaluación.
  • Si los datos no se dividen durante el entrenamiento, toda la información de entrenamiento se utilizará para calcular los resultados de la evaluación. Debido a que los modelos k-means no permiten la división de datos, llamar a ML.EVALUATE en un modelo de k-means sin especificar un query_statement o table_name calculará los resultados en toda la entrada de entrenamiento.

threshold

threshold es un límite personalizado a fin de que tu modelo de regresión logística se use para la evaluación (opcional). El valor predeterminado es 0.5. El valor del límite que se proporciona debe ser del tipo STRUCT.

Un valor cero para precisión o recuperación significa que el límite seleccionado no produjo etiquetas verdaderos positivos. Un valor de NaN para precisión significa que el límite seleccionado no produjo etiquetas positivas, ni verdaderos positivos ni falsos positivos.

Si tanto table_name como query_statement no están especificados, no puedes usar un límite. Además, threshold no se puede usar con modelos de regresión logística multiclase.

Ejemplos de ML.EVALUATE

ML.EVALUATE sin datos de entrada especificados

La siguiente consulta se utiliza para evaluar un modelo sin datos de entrada especificados.

SELECT
  *
FROM
  ML.EVALUATE(MODEL `mydataset.mymodel`)

ML.EVALUATE con un límite personalizado y datos de entrada

La siguiente consulta evalúa el modelo mediante la especificación de datos de entrada y un límite personalizado de 0.55.

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