Partilhar via


Use métricas personalizadas com o Databricks Lakehouse Monitoring

Esta página descreve como criar uma métrica personalizada no Databricks Lakehouse Monitoring. Além das estatísticas de análise e desvio que são calculadas automaticamente, você pode criar métricas personalizadas. Por exemplo, talvez você queira acompanhar uma média ponderada que capture algum aspeto da lógica de negócios ou usar uma pontuação de qualidade de modelo personalizada. Você também pode criar métricas de desvio personalizadas que rastreiam as alterações nos valores na tabela primária (em comparação com a linha de base ou a janela de tempo anterior).

Para obter mais detalhes sobre como usar a MonitorMetric API, consulte a referência da API.

Tipos de métricas personalizadas

O Databricks Lakehouse Monitoring inclui os seguintes tipos de métricas personalizadas:

  • Métricas agregadas, que são calculadas com base em colunas na tabela primária. As métricas agregadas são armazenadas na tabela de métricas de perfil.
  • Métricas derivadas, que são calculadas com base em métricas agregadas previamente calculadas e não usam diretamente dados da tabela primária. As métricas derivadas são armazenadas na tabela de métricas de perfil.
  • Métricas de desvio, que comparam métricas agregadas ou derivadas previamente calculadas de duas janelas de tempo diferentes, ou entre a tabela primária e a tabela de linha de base. As métricas de desvio são armazenadas na tabela de métricas de deriva.

O uso de métricas derivadas e de desvio sempre que possível minimiza a recomputação sobre a tabela primária completa. Somente métricas agregadas acessam dados da tabela primária. As métricas derivadas e de desvio podem então ser calculadas diretamente a partir dos valores métricos agregados.

Parâmetros de métricas personalizados

Para definir uma métrica personalizada, crie um modelo Jinja para uma expressão de coluna SQL. As tabelas nesta seção descrevem os parâmetros que definem a métrica e os parâmetros que são usados no modelo Jinja.

Parâmetro Description
type Um de MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE, MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVEDou MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT.
name Nome da coluna para a métrica personalizada em tabelas métricas.
input_columns Lista de nomes de colunas na tabela de entrada para a qual a métrica deve ser calculada. Para indicar que mais de uma coluna é usada no cálculo, use :table. Veja os exemplos neste artigo.
definition Modelo Jinja para uma expressão SQL que especifica como calcular a métrica. Consulte Criar definição.
output_data_type Tipo de dados Spark da saída da métrica em um formato de cadeia de caracteres JSON.

Criar definition

O definition parâmetro deve ser uma única expressão de cadeia de caracteres na forma de um modelo Jinja. Não pode conter junções ou subconsultas.

A tabela a seguir lista os parâmetros que você pode usar para criar um modelo SQL Jinja para especificar como calcular a métrica.

Parâmetro Description
{{input_column}} Coluna usada para calcular a métrica personalizada.
{{prediction_col}} Coluna que contém previsões do modelo de ML. Usado com InferenceLog análise.
{{label_col}} Coluna que contém rótulos de verdade fundamental do modelo ML. Usado com InferenceLog análise.
{{current_df}} Para a variação comparada à janela de tempo anterior. Dados da janela de tempo anterior.
{{base_df}} Desvio em comparação com a tabela de referência. Dados da linha de base.

Exemplo de métrica agregada

O exemplo a seguir calcula a média do quadrado dos valores em uma coluna e é aplicado às colunas f1 e f2. A saída é salva como uma nova coluna na tabela de métricas de perfil e é mostrada nas linhas de análise correspondentes às colunas f1 e f2. Os nomes de coluna aplicáveis são substituídos pelo parâmetro Jinja {{input_column}}.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE,
    name="squared_avg",
    input_columns=["f1", "f2"],
    definition="avg(`{{input_column}}`*`{{input_column}}`)",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)

O código a seguir define uma métrica personalizada que calcula a média da diferença entre as colunas f1 e f2. Este exemplo mostra o uso de [":table"] no parâmetro input_columns para indicar que mais de uma coluna da tabela é usada no cálculo.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE,
    name="avg_diff_f1_f2",
    input_columns=[":table"],
    definition="avg(f1 - f2)",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)

Este exemplo calcula uma pontuação de qualidade de modelo ponderada. Para observações em que a coluna critical é True, atribui-se uma penalidade mais pesada quando o valor previsto para essa linha não corresponde ao valor real. Como é definido nas colunas brutas (prediction e label), é definido como uma métrica agregada. A coluna :table indica que essa métrica é calculada a partir de várias colunas. Os parâmetros Jinja {{prediction_col}} e {{label_col}} são substituídos pelo nome das colunas de rótulo de previsão e rótulo verdadeiro para o monitor.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE,
    name="weighted_error",
    input_columns=[":table"],
    definition="""avg(CASE
      WHEN {{prediction_col}} = {{label_col}} THEN 0
      WHEN {{prediction_col}} != {{label_col}} AND critical=TRUE THEN 2
      ELSE 1 END)""",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)

Exemplo de métrica derivada

O código a seguir define uma métrica personalizada que calcula a raiz quadrada da squared_avg métrica definida anteriormente nesta seção. Como essa é uma métrica derivada, ela não faz referência aos dados da tabela primária e, em vez disso, é definida em termos da métrica agregada squared_avg. A saída é salva como uma nova coluna na tabela de métricas de perfil.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED,
    name="root_mean_square",
    input_columns=["f1", "f2"],
    definition="sqrt(squared_avg)",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)

Exemplo de métricas de deriva

O código a seguir define uma métrica de desvio que rastreia a weighted_error alteração na métrica definida anteriormente nesta seção. Os parâmetros {{current_df}} e {{base_df}} permitem que a métrica faça referência aos valores weighted_error da janela atual e da janela de comparação. A janela de comparação pode ser os dados da linha de base ou os dados da janela de tempo anterior. As métricas de desvio são salvas na tabela de métricas de deriva.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT,
    name="error_rate_delta",
    input_columns=[":table"],
    definition="{{current_df}}.weighted_error - {{base_df}}.weighted_error",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)