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