Pular para o conteúdo principal

Use métricas personalizadas com o Databricks lakehouse monitoring

info

Visualização

Esse recurso está em Public Preview.

Esta página descreve como criar uma métrica personalizada em Databricks lakehouse monitoring. Além da análise e das estatísticas de desvio calculadas automaticamente, o senhor 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. O senhor também pode criar métricas de desvio personalizadas que rastreiam as alterações nos valores da 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 API MonitorMetric, consulte a referência da API.

Tipos de métricas personalizadas

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

  • Métricas agregadas, que são calculadas com base nas colunas da tabela primária. As métricas agregadas são armazenadas na tabela de métricas do perfil.
  • Métricas derivadas, que são calculadas com base em métricas agregadas previamente calculadas e não usam diretamente os dados da tabela primária. As métricas derivadas são armazenadas na tabela de métricas do perfil.
  • Métricas de desvio, que comparam métricas agregadas ou derivadas previamente computadas 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 desvio.

O uso de métricas derivadas e de desvio sempre que possível minimiza a recomputação de toda a tabela primária. Somente as métricas agregadas acessam os 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 personalizadas

Para definir uma métrica personalizada, o senhor cria um padrão Jinja para uma expressão de coluna SQL. As tabelas desta seção descrevem os parâmetros que definem as métricas e os parâmetros que são usados no padrão Jinja.

Parâmetro

Descrição

type

Um de MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE, MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVEDou MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT.

name

Nome da coluna para as métricas personalizadas nas tabelas de métricas.

input_columns

Lista de nomes de coluna na tabela de entrada para a qual as métricas devem ser computadas. Para indicar que mais de uma coluna é usada no cálculo, use :table. Veja os exemplos neste artigo.

definition

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

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 o senhor pode usar para criar um padrão SQL Jinja para especificar como calcular as métricas.

Parâmetro

Descrição

{{input_column}}

Coluna usada para compute as métricas personalizadas.

{{prediction_col}}

Coluna que contém as previsões do modelo ML. Usado com a análise InferenceLog.

{{label_col}}

Retenção de coluna ML modelo ground truth rótulo. Usado com a 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 deriva em comparação com a tabela de linha de base. Dados básicos.

Exemplo de métricas agregadas

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 das colunas aplicáveis são substituídos pelo parâmetro Jinja {{input_column}}.

Python
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. Esse exemplo mostra o uso de [":table"] no parâmetro input_columns para indicar que mais de uma coluna da tabela é usada no cálculo.

Python
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, uma penalidade mais pesada é atribuída quando o valor previsto para essa linha não corresponde à verdade fundamental. Como ela é definida nas colunas brutas (prediction e label), é definida 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 da previsão e da verdade básica do monitor.

Python
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 uma métrica personalizada que calcula a raiz quadrada da squared_avg métrica definida anteriormente nesta seção. Como se trata de 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 do perfil.

Python
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 uma métrica de desvio que rastreia a alteração na weighted_error métrica definida anteriormente nesta seção. Os parâmetros {{current_df}} e {{base_df}} permitem que as métricas façam 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.

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