Use métricas personalizadas com o monitoramento Databricks Lakehouse

Esta página descreve como criar um medidor personalizado no monitoramento databricks lakehouse . 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 rastrear uma média ponderada que capture algum aspecto da lógica de negócios ou usar um índice de qualidade de modelo personalizado. Você também pode criar métricas de desvio personalizadas que acompanham as alterações nos valores na tabela principal (em comparação com a linha de base ou a janela de tempo anterior).

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

Tipos de métricas personalizadas

Databricks lakehouse monitoramento inclui os seguintes tipos de métricas personalizadas:

  • Métricas agregadas, que são calculadas com base nas colunas da tabela primária. 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 compute anteriormente e não usam dados diretamente da tabela primária. Métricas derivadas são armazenadas na tabela de métricas de perfil.

  • Métricas de desvio, que comparam métricas agregadas ou derivadas compute anteriores de duas janelas de tempo diferentes ou entre a tabela principal e a tabela de linha de base. As métricas de desvio são armazenadas na tabela de métricas de desvio.

O uso de métricas derivadas e de desvio sempre que possível minimiza o recálculo sobre toda a tabela primária. Apenas dados de acesso de métricas agregadas da tabela primária. As métricas derivadas e de desvio podem então ser compute diretamente dos valores de métricas agregadas.

Parâmetros de métricas personalizadas

Para definir um indicador customizado, você cria um Jinja padrão para uma expressão de coluna SQL. As tabelas nesta seção descrevem os parâmetros que definem as métricas e os parâmetros que são usados no Jinja padrão.

Parâmetro

Descrição

type

Um de MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE, MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED ou MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT.

name

Nome da coluna para a métrica personalizada nas tabelas de métricas.

input_columns

Lista de nomes de coluna na tabela de entrada para a qual os indicadores devem ser compute . Para indicar que mais de uma coluna é usada no cálculo, use :table. Veja os exemplos nestes artigos.

definition

Jinja padrão para uma expressão SQL que especifica como compute as métricas. Veja a definição de Criar.

output_data_type

Spark Tipo de dados da saída de métricas em um formato de cadeia de caracteres JSON.

Criar definition

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

A tabela a seguir lista os parâmetros que você pode usar para criar um SQL Jinja padrão para especificar como calcular as métricas.

Parâmetro

Descrição

{{input_column}}

Coluna usada para compute as métricas personalizadas.

{{prediction_col}}

Coluna contendo previsões do modelo de ML. Usado com análise InferenceLog .

{{label_col}}

Coluna contendo rótulos de informações básicas do modelo de ML. Usado com análise InferenceLog .

{{current_df}}

Para desvio em comparação com a janela de tempo anterior. Dados da janela de tempo anterior.

{{base_df}}

Para desvio em comparação com a tabela de linha de base. Dados básicos.

Exemplo de métricas agregadas

O exemplo a seguir compute 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 colunas 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 um indicador personalizado que compute 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 compute um índice de qualidade de modelo ponderado. Para observações em que a coluna critical é True, uma penalidade mais pesada é atribuída quando o valor previsto para essa linha não corresponde à verdade básica. Por ser definido nas colunas brutas (prediction e label), é definido como uma medição agregada. A coluna :table indica que este indicador é calculado 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 predição e verdade básica 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étricas derivadas

O código a seguir define um indicador personalizado que compute a raiz quadrada do indicador squared_avg definido anteriormente nesta seção. Como esta é uma medição derivada, ela não faz referência aos dados da tabela primária e, em vez disso, é definida em termos da medição agregada squared_avg . A saída é salva como uma nova coluna na tabela de métricas do 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 desvio

O código a seguir define um indicador de desvio que rastreia a alteração no indicador weighted_error definido anteriormente nesta seção. Os parâmetros {{current_df}} e {{base_df}} permitem que o medidor 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 desvio.

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(),
)