Función ML.ROC_CURVE

Función ML.ROC_CURVE

Usa la función ML.ROC_CURVE para evaluar métricas específicas de regresión logística. ML.ROC_CURVE solo evalúa los modelos de regresión logística.

La función de resultado ML.ROC_CURVE incluye varias filas con métricas para distintos valores de umbral del modelo. Las métricas incluyen lo siguiente:

  • threshold
  • recall
  • false_positive_rate
  • true_positives
  • false_positives
  • true_negatives
  • false_negatives

Limitaciones de ML.ROC_CURVE

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

Sintaxis de ML.ROC_CURVE

ML.ROC_CURVE(MODEL model_name
            [, {TABLE table_name | (query_statement)}]
            [, GENERATE_ARRAY(thresholds)])

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 del modelo deben coincidir con los de las columnas de la tabla y 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.

Si no se especifica table_name ni query_statement, ML.ROC_CURVE calcula los resultados de la curva ROC de la siguiente manera:

  • Si los datos se dividen durante el entrenamiento, los datos de la evaluación divididos se utilizan para calcular los resultados de la curva ROC.
  • Si los datos no se dividen durante el entrenamiento, toda la entrada de entrenamiento se utiliza para calcular los resultados de la curva de ROC.

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 instrucción CREATE MODEL que creó model_name, solo las columnas de entrada presentes en la cláusula TRANSFORM aparecerán en query_statement.

Si no se especifica table_name ni query_statement, ML.ROC_CURVE calcula los resultados de la curva ROC de la siguiente manera:

  • Si los datos se dividen durante el entrenamiento, los datos de la evaluación divididos se utilizan para calcular los resultados de la curva ROC.
  • Si los datos no se dividen durante el entrenamiento, toda la entrada de entrenamiento se utiliza para calcular los resultados de la curva de ROC.

thresholds

(Opcional) thresholds son los valores de percentil del resultado de la predicción suministrada a través de la función GENERATE_ARRAY. Los valores proporcionados deben ser del tipo DOUBLE.

Si no especificas umbrales, se elegirán automáticamente según los valores del resultado de la predicción con 100 cuantiles aproximados: APPROX_QUANTILES(predicted_label, 100).

Ejemplos de ML.ROC_CURVE

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

Evaluación de la curva ROC de un modelo de regresión logística

La siguiente consulta muestra estas columnas: threshold, recall, false_positive_rate, true_positives, false_positives, true_negatives y false_negatives. La tasa de recuperación y de falsos positivos se puede graficar para una curva ROC. Los valores de umbral que se muestran se eligen según los valores de percentil del resultado de la predicción.

SELECT
  *
FROM
  ML.ROC_CURVE(MODEL `mydataset.mymodel`,
    TABLE `mydataset.mytable`)

Evaluación de una curva ROC con umbrales personalizados

La siguiente consulta muestra las mismas columnas que el ejemplo anterior. Los valores de umbral que se muestran se eligen en función del resultado de la función GENERATE_ARRAY.

SELECT
  *
FROM
  ML.ROC_CURVE(MODEL `mydataset.mymodel`,
    TABLE `mydataset.mytable`,
    GENERATE_ARRAY(0.4,0.6,0.01))

Evaluación de la curva de precisión-recuperación

En la siguiente consulta, en lugar de obtener una curva ROC (la tasa de recuperación frente a la tasa de falsos positivos), se calcula una curva de precisión-recuperación con la precisión de los recuentos verdaderos y falsos positivos.

SELECT
  recall,
  true_positives / (true_positives + false_positives) AS precision
FROM
  ML.ROC_CURVE(MODEL `mydataset.mymodel`,
    TABLE `mydataset.mytable`)