Função ML.EVALUATE

Função ML.EVALUATE

Use a função ML.EVALUATE para avaliar as métricas do modelo. A função ML.EVALUATE pode ser usada com modelos de regressão linear, regressão logística, k-means e fatoração de matriz. Embora seja possível usar a função ML.ROC_CURVE para avaliar modelos de regressão logística, ML.ROC_CURVE não é compatível com modelos de multiclasse.

A saída da função ML.EVALUATE consiste em uma linha única que contém métricas comuns aplicáveis ao tipo de modelo fornecido.

ML.EVALUATE retorna as seguintes colunas para um modelo de regressão logística ou multiclasse:

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

ML.EVALUATE retorna as seguintes colunas para uma regressão linear ou modelo de fatoração de matrizes explícita:

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

ML.EVALUATE retorna as seguintes colunas para um modelo k-means:

ML.EVALUATE retorna as seguintes colunas para um modelo de fatoração de matrizes implícita:

Limitações da ML.EVALUATE

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

Sintaxe de ML.EVALUATE

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

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 da tabela precisarão corresponder aos nomes das colunas do modelo e seus tipos precisarão ser compatíveis de acordo com 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.

Se table_name e query_statement não forem especificados, ML.EVALUATE calculará os resultados da avaliação da seguinte maneira:

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

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 table_name e query_statement não forem especificados, ML.EVALUATE calculará os resultados da avaliação da seguinte maneira:

  • Se os dados forem divididos durante o treinamento, os dados da avaliação de divisão serão usados para calcular os resultados da avaliação.
  • Se os dados não forem divididos durante o treinamento, toda a entrada de treinamento será usada para calcular os resultados da avaliação. Como os modelos k-means não permitem divisão de dados, chamar ML.EVALUATE em um modelo k-means sem especificar query_statement ou table_name fará com que os resultados de toda a entrada de treinamento sejam calculados.

threshold

(Opcional) threshold é um limite personalizado para que o modelo de regressão logística seja usado para avaliação. O valor padrão é 0,5. É preciso que o valor limite fornecido seja do tipo STRUCT.

Um valor zero para precisão ou recuperação mostra que o limite selecionado não produziu rótulos positivos verdadeiros. Um valor NaN para precisão mostra que o limite selecionado não produziu rótulos positivos, nem positivos verdadeiros nem falsos positivos.

Se table_name e query_statement não forem especificados, não será possível usar um limite. Além disso, threshold não pode ser usado com modelos de regressão logística multiclasse.

Exemplos de ML.EVALUATE

ML.EVALUATE sem dados de entrada especificados

A consulta a seguir é usada para avaliar um modelo sem dados de entrada especificados.

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

ML.EVALUATE com um limite personalizado e dados de entrada

A consulta a seguir avalia o modelo especificando os dados de entrada e um limite personalizado de 0,55.

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