Função ML.ROC_CURVE

Função ML.ROC_CURVE

Use a função ML.ROC_CURVE para avaliar métricas específicas da regressão logística. ML.ROC_CURVE só avalia modelos de regressão logística.

A função ML.ROC_CURVE de saída inclui várias linhas com métricas para diferentes valores de limite para o modelo. As métricas incluem:

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

Limitações da ML.ROC_CURVE

A função ML.ROC_CURVE está sujeita às seguintes limitações:

Sintaxe ML.ROC_CURVE

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

model_name

model_name é o nome do modelo que você está avaliando. Na falta de um projeto padrão configurado, adicione o ID do projeto ao nome do modelo no seguinte formato: `[PROJECT_ID].[DATASET].[MODEL]` (incluindo os acentos graves); por exemplo, `myproject.mydataset.mymodel`.

table_name

(Opcional) table_name é o nome da tabela de entrada que contém os dados de avaliação. Na falta de um projeto padrão configurado, adicione o ID do projeto ao nome da tabela no seguinte formato: `[PROJECT_ID].[DATASET].[TABLE]` (incluindo os acentos graves); por exemplo, `myproject.mydataset.mytable`.

Se table_name for especificado, os nomes das colunas de entrada no modelo devem corresponder aos nomes das colunas na tabela, e seus tipos devem ser compatíveis de acordo com regras de coerção implícitas do BigQuery. A entrada precisa ter uma coluna correspondente ao nome da coluna de rótulo, fornecido durante o treinamento. Bastar usar a opção input_label_cols para obter esse valor. Se input_label_cols não for especificada, a coluna chamada “label” nos dados de treinamento será usada.

Se nenhum table_name e query_statement for especificado, ML.ROC_CURVE calculará os resultados da curva roc da seguinte maneira:

  • Se os dados forem divididos durante o treinamento, os dados de avaliação de divisão serão usados para calcular os resultados da curva roc.
  • Se os dados não forem divididos durante o treinamento, toda a entrada de treinamento será usada para calcular os resultados da curva roc.

query_statement

(Opcional) A cláusula query_statement especifica a consulta do SQL padrão usada para gerar os dados de avaliação. Para saber qual a sintaxe SQL compatível com a cláusula query_statement, consulte a página Sintaxe de consulta do SQL padrão.

Se query_statement for especificado, os nomes das colunas de entrada da consulta precisarão corresponder aos nomes das colunas do modelo e seus tipos precisarão ser compatíveis de acordo com as regras implícitas de coerção do BigQuery. A entrada precisa ter uma coluna correspondente ao nome da coluna de rótulo, fornecido durante o treinamento. Bastar usar a opção input_label_cols para obter esse valor. Se input_label_cols não for especificada, a coluna chamada “label” nos dados de treinamento será usada. As colunas extras são ignoradas.

Se a cláusula TRANSFORM estiver presente na instrução CREATE MODEL que criou model_name, somente as colunas de entrada presentes na cláusula TRANSFORM aparecerão em query_statement.

Se nenhum table_name e query_statement for especificado, ML.ROC_CURVE calculará os resultados da curva roc da seguinte maneira:

  • Se os dados forem divididos durante o treinamento, os dados de avaliação de divisão serão usados para calcular os resultados da curva roc.
  • Se os dados não forem divididos durante o treinamento, toda a entrada de treinamento será usada para calcular os resultados da curva roc.

thresholds

(Opcional) thresholds são os valores percentuais da saída de previsão fornecida pela função GENERATE_ARRAY. Os valores fornecidos devem ser do tipo DOUBLE.

Se você não especificar os limites a serem usados, eles serão escolhidos automaticamente com base nos valores da saída de previsão usando aproximadamente 100 quantis: APPROX_QUANTILES(predicted_label, 100).

Exemplos de ML.ROC_CURVE

Nos exemplos a seguir, pressupomos que o modelo e a tabela de entrada estão no projeto padrão.

Como avaliar a curva ROC de um modelo de regressão logística

A consulta a seguir retorna estas colunas: threshold, recall, false_positive_rate, true_positives, false_positives, true_negatives e false_negatives. A taxa de recall e falsos positivos pode ser representada graficamente para uma curva ROC. Os valores de limite retornados são escolhidos com base nos valores percentuais de saída da previsão.

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

Como avaliar uma curva ROC com limites personalizados

A consulta a seguir retorna as mesmas colunas do exemplo anterior. Os valores de limite retornados são escolhidos com base na saída da função GENERATE_ARRAY.

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

Como avaliar a curva de recall de precisão

A consulta a seguir, em vez de receber uma curva ROC (a taxa de recall versus taxa de falso positivo), é calculada com base na precisão das contagens positivas e falsas positivas.

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