Share via


Utilizar métricas personalizadas com a Monitorização do Databricks Lakehouse

Importante

Esta funcionalidade está em Pré-visualização Pública.

Esta página descreve como criar uma métrica personalizada na Monitorização do Databricks Lakehouse. Além das estatísticas de análise e desvio que são calculadas automaticamente, pode criar métricas personalizadas. Por exemplo, poderá querer controlar uma média ponderada que captura algum aspeto da lógica de negócio ou utiliza uma classificação de qualidade de modelo personalizada. Também pode criar métricas de desvio personalizadas que registam as alterações aos 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 utilizar a databricks.lakehouse_monitoring.Metric API, veja a Referência da API.

Tipos de métricas personalizadas

A Monitorização do Databricks Lakehouse inclui os seguintes tipos de métricas personalizadas:

  • Agregar métricas, que são calculadas com base em colunas na tabela primária. As métricas de agregação 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 utilizam 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 anteriormente 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 desvio.

A utilização de métricas derivadas e de desfasamento sempre que possível minimiza a recomputação na tabela primária completa. Apenas as métricas agregadas acedem aos dados da tabela primária. As métricas derivadas e de desfasamento podem ser calculadas diretamente a partir dos valores de métricas agregadas.

Parâmetros de métricas personalizadas

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

Parâmetro Descrição
type Um dos aggregate, derivedou drift.
name Nome da coluna para a métrica personalizada nas tabelas de 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 do que uma coluna é utilizada no cálculo, utilize :table. Veja os exemplos neste artigo.
definition Modelo Jinja para uma expressão SQL que especifica como calcular a métrica. Veja Criar metric_definition.
output_data_type Tipo de dados do Spark da saída da métrica.

Criar definition

O definition parâmetro tem de ser uma expressão de cadeia única sob a forma de um modelo Jinja. Não pode conter associações ou subconsultas. Para construir definições complexas, pode utilizar funções auxiliares do Python.

A tabela seguinte lista os parâmetros que pode utilizar para criar um Modelo Jinja do SQL para especificar como calcular a métrica.

Parâmetro Descrição
{{input_column}} Coluna utilizada para calcular a métrica personalizada.
{{prediction_col}} Coluna com predições de modelos de ML. Utilizado com InferenceLog a análise.
{{label_col}} Coluna que contém etiquetas de verdade básica do modelo de ML. Utilizado com InferenceLog a análise.
{{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 de linha de base.

Exemplo de métrica agregada

O exemplo seguinte calcula a média do quadrado dos valores numa coluna e é aplicado a colunas f1 e f2. O resultado é guardado como uma nova coluna na tabela de métricas de perfil e é apresentado nas linhas de análise correspondentes às colunas f1 e f2. Os nomes das colunas aplicáveis são substituídos pelo parâmetro {{input_column}}Jinja .

from databricks import lakehouse_monitoring as lm
from pyspark.sql import types as T

lm.Metric(
  type="aggregate",
  name="squared_avg",
  input_columns=["f1", "f2"],
  definition="avg(`{{input_column}}`*`{{input_column}}`)",
  output_data_type=T.DoubleType()
  )

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

from databricks import lakehouse_monitoring as lm
from pyspark.sql import types as T

lm.Metric(
  type="aggregate",
  name="avg_diff_f1_f2",
  input_columns=[":table"],
  definition="avg(f1 - f2)",
  output_data_type=T.DoubleType())

Este exemplo calcula uma classificação de qualidade de modelo ponderada. Para observações em que a critical coluna é True, é atribuída uma penalização mais pesada quando o valor previsto para essa linha não corresponde à verdade básica. Uma vez que está definido nas colunas não processadas (prediction e label), é definido como uma métrica agregada. A :table coluna indica que esta métrica é calculada a partir de múltiplas colunas. Os parâmetros Jinja e {{label_col}} são substituídos {{prediction_col}} pelo nome das colunas prediction e ground truth label para o monitor.

from databricks import lakehouse_monitoring as lm
from pyspark.sql import types as T

lm.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.DoubleType()
)

Exemplo de métrica derivada

O código seguinte define uma métrica personalizada que calcula a raiz quadrada da squared_avg métrica definida anteriormente nesta secção. Uma vez que se trata de uma métrica derivada, não faz referência aos dados da tabela primária e, em vez disso, é definida em termos da squared_avg métrica agregada. O resultado é guardado como uma nova coluna na tabela de métricas de perfil.

from databricks import lakehouse_monitoring as lm
from pyspark.sql import types as T

lm.Metric(
  type="derived",
  name="root_mean_square",
  input_columns=["f1", "f2"],
  definition="sqrt(squared_avg)",
  output_data_type=T.DoubleType())

Exemplo de métricas de desvio

O código seguinte define uma métrica de desvio que controla a alteração na weighted_error métrica definida anteriormente nesta secção. Os {{current_df}} parâmetros e {{base_df}} permitem que a métrica referencie os weighted_error valores da janela atual e da janela de comparação. A janela de comparação pode ser os dados de linha de base ou os dados da janela de tempo anterior. As métricas de desvio são guardadas na tabela de métricas de desvio.

from databricks import lakehouse_monitoring as lm
from pyspark.sql import types as T

lm.Metric(
  type="drift",
  name="error_rate_delta",
  input_columns=[":table"],
  definition="{{current_df}}.weighted_error - {{base_df}}.weighted_error",
  output_data_type=T.DoubleType()
)