Compartir a través de


Uso de métricas personalizadas con la supervisión de Databricks Lakehouse

Importante

Esta característica está en versión preliminar pública.

En esta página se describe cómo crear una métrica personalizada en la supervisión de Databricks Lakehouse. Además del análisis y las estadísticas de desfase que es calculado automáticamente, puede crear métricas personalizadas. Por ejemplo, es posible que desee realizar un seguimiento de una media ponderada que capture algún aspecto de la lógica de negocios o use una puntuación de calidad del modelo personalizado. También puede crear métricas de desfase personalizadas que realicen un seguimiento de los cambios en los valores de la tabla principal (en comparación con la línea de base o la ventana de tiempo anterior).

Para más información sobre cómo usar la MonitorMetric API, consulte la referencia de API.

Tipos de métricas personalizadas

La supervisión de Databricks Lakehouse incluye los siguientes tipos de métricas personalizadas:

  • Métricas agregadas, que se calculan en base a las columnas de la tabla primaria. Las métricas de agregado se almacenan en la tabla de métricas de perfil.
  • Métricas derivadas, que se calculan en base a métricas agregadas calculadas previamente y no usan directamente datos de la tabla primaria. Las métricas derivadas se almacenan en la tabla de métricas de perfil.
  • Métricas de desfase, que comparan métricas agregadas o derivadas procesadas anteriormente de dos ventanas de tiempo diferentes, o entre la tabla principal y la tabla de línea base. Las métricas de desfase se almacenan en la tabla de métricas de desfase.

El uso de métricas derivadas y desfasadas siempre que sea posible minimiza la recomputación en la tabla principal completa. Solo las métricas de agregado acceden a los datos de la tabla principal. Las métricas derivadas y desfasadas pueden procesarse directamente desde los valores de métrica agregados.

Parámetros de métricas personalizados

Para definir una métrica personalizada, crear una plantilla de Jinja para una expresión de columna SQL. En las tablas de esta sección se describen los parámetros que definen la métrica y los parámetros que se usan en la plantilla de Jinja.

Parámetro Descripción
type Uno deMonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE, MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED o MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT.
name Nombre de columna de la métrica personalizada en tablas de métricas.
input_columns Lista de nombres de columnas de la tabla de entrada para la que debe procesarse la métrica. Para indicar que se usa más de una columna en el cálculo, use :table. Vea los ejemplos de este artículo.
definition Plantilla de Jinja para una expresión SQL que especifica cómo procesar la métrica. Consulte Crear definición.
output_data_type Tipo de datos de Spark de la salida de métrica en un formato de cadena JSON.

Crear definition

El parámetro definition debe ser una expresión de cadena única en el formulario de una plantilla Jinja. No puede contener combinaciones ni subconsultas. Para construir definiciones complejas, puede usar funciones auxiliares de Python.

En la tabla siguiente se enumeran los parámetros que puede usar para crear una plantilla de SQL Jinja para especificar cómo calcular la métrica.

Parámetro Descripción
{{input_column}} Columna usada para calcular la métrica personalizada.
{{prediction_col}} Columna que contiene predicciones del modelo de ML. Se usa con InferenceLog análisis.
{{label_col}} Columna que contiene etiquetas verdaderas del modelo de ML. Se usa con InferenceLog análisis.
{{current_df}} Para el desfase en comparación con la ventana de la hora anterior. Datos de la ventana horaria anterior.
{{base_df}} Para el desfase en comparación con la tabla de línea base. Datos de línea base.

Ejemplo de métrica de agregado

En el ejemplo siguiente se calcula el promedio del cuadrado de los valores de una columna y se aplica a las columnas f1 y f2. La salida se guarda como una columna nueva en la tabla de métricas de perfil y se muestra en las filas de análisis correspondientes a las columnas f1 y f2. Los nombres de columna aplicables se reemplazan por el 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(),
)

El código siguiente define una métrica personalizada que procesa el promedio de la diferencia entre las columnas f1 y f2. En este ejemplo se muestra el uso de [":table"]en el parámetro input_columns para indicar que se usa más de una columna de la tabla en el 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 ejemplo procesa una puntuación ponderada de la calidad del modelo. En el caso de las observaciones en las que la columna critical es True, se asigna una penalización mayor cuando el valor previsto para esa fila no coincide con la verdad del suelo. Dado que se define en las columnas básicas (prediction y label), se define como una métrica de agregado. La columna :table indica que esta métrica se calcula a partir de varias columnas. Los parámetros Jinja{{prediction_col}} y {{label_col}} se reemplazan por el nombre de las columnas de etiqueta de predicción y verdad básica para la supervisión.

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

Ejemplo de métrica derivada

El código siguiente define una métrica personalizada que calcula la raíz cuadrada de la métrica squared_avg definida anteriormente en esta sección. Dado que se trata de una métrica derivada, no hace referencia a los datos de la tabla principal y, en su lugar, se define en términos de la squared_avg métrica de agregado. La salida se guarda como una nueva columna en la tabla 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(),
)

Ejemplo de métricas de desfase

El código siguiente define una métrica de desfase que realiza un seguimiento del cambio en la weighted_error métrica definida anteriormente en esta sección. Los parámetros{{current_df}} y {{base_df}} permiten que la métrica haga a los valores weighted_error de la ventana actual y la ventana de comparación. La ventana de comparación puede ser los datos de línea base o los datos del período de tiempo anterior. Las métricas de desfase se guardan en la tabla de métricas de desfase.

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