Utilizzare metriche personalizzate con Il monitoraggio di Databricks Lakehouse

Questa pagina descrive come creare una metrica personalizzata in Databricks Lakehouse Monitoring. Oltre alle statistiche di analisi e deviazione calcolate automaticamente, è possibile creare metriche personalizzate. Ad esempio, è possibile tenere traccia di una media ponderata che acquisisce alcuni aspetti della logica di business o utilizzare un punteggio di qualità del modello personalizzato. È anche possibile creare metriche di deriva personalizzate che tengono traccia delle modifiche apportate ai valori nella tabella primaria (rispetto alla linea di base o all’intervallo di tempo precedente).

Per altre informazioni su come utilizzare l’APIMonitorMetric, vedere le informazioni di riferimento sulle API.

Tipi di metriche personalizzate

Il monitoraggio di Databricks Lakehouse include i tipi di metriche personalizzate seguenti:

  • Metriche di aggregazione, calcolate in base alle colonne della tabella primaria. Le metriche di aggregazione vengono archiviate nella tabella delle metriche del profilo.
  • Metriche derivate, calcolate in base alle metriche aggregate calcolate in precedenza e non usano direttamente i dati della tabella primaria. Le metriche derivate vengono archiviate nella tabella delle metriche del profilo.
  • Metriche di deriva, che confrontano le metriche aggregate calcolate in precedenza o derivate da due finestre temporali diverse o tra la tabella primaria e la tabella di base. Le metriche di deriva vengono archiviate nella tabella delle metriche di deriva.

Usando le metriche derivate e di derivazione, laddove possibile, riduce al minimo la ricompilazione sulla tabella primaria completa. Solo le metriche aggregate accedono ai dati dalla tabella primaria. Le metriche derivate e di derivazione possono quindi essere calcolate direttamente dai valori delle metriche aggregate.

Parametri delle metriche personalizzate

Per definire una metrica personalizzata, creare un modello Jinja per un’espressione di colonna SQL. Le tabelle di questa sezione descrivono i parametri che definiscono la metrica e i parametri usati nel modello Jinja.

Parametro Descrizione
type Uno tra MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE, MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED e MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT.
name Nome della colonna per la metrica personalizzata nelle tabelle delle metriche.
input_columns Elenco di nomi di colonna nella tabella di input per cui deve essere calcolata la metrica. Per indicare che nel calcolo vengono utilizzate più colonne, utilizzare :table. Vedere gli esempi nell’articolo.
definition Modello Jinja per un’espressione SQL che specifica come calcolare la metrica. Vedere Creare una definizione.
output_data_type Tipo di dati Spark dell’output della metrica in formato stringa JSON.

Crearedefinition

Il definition parametro deve essere una singola espressione stringa sotto forma di modello Jinja. Non può contenere join o sottoquery.

Nella tabella seguente sono elencati i parametri che è possibile utilizzare per creare un modello di SQL Jinja per specificare come calcolare la metrica.

Parametro Descrizione
{{input_column}} Colonna usata per calcolare la metrica personalizzata.
{{prediction_col}} Colonna che contiene stime del modello di Machine Learning. Utilizzato con l’analisi InferenceLog .
{{label_col}} Colonna che contiene etichette di verità del modello di Machine Learning. Utilizzato con l’analisi InferenceLog .
{{current_df}} Per deriva rispetto all’intervallo di tempo precedente. Dati dell’intervallo di tempo precedente.
{{base_df}} Per deriva rispetto alla tabella di base. Dati di base.

Esempio di metrica di aggregazione

Nell’esempio seguente viene calcolata la media del quadrato dei valori in una colonna e viene applicata alle colonne f1 e f2. L’output viene salvato come nuova colonna nella tabella delle metriche del profilo e viene visualizzato nelle righe di analisi corrispondenti alle colonne f1 e f2. I nomi di colonna applicabili vengono sostituiti con il parametro {{input_column}}Jinja .

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

Il codice seguente definisce una metrica personalizzata che calcola la media della differenza tra le colonne f1 e f2. In questo esempio viene illustrato l’utilizzo di [":table"] nel input_columns parametro per indicare che nel calcolo vengono utilizzate più colonne della tabella.

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

In questo esempio viene calcolato un punteggio di qualità del modello ponderato. Per le osservazioni in cui la critical colonna è True, viene assegnata una penalità più pesante quando il valore stimato per tale riga non corrisponde alla verità del terreno. Poiché è definito nelle colonne non elaborate (prediction e label), viene definito come metrica di aggregazione. La :table colonna indica che questa metrica viene calcolata da più colonne. I parametri {{prediction_col}} Jinja e {{label_col}} vengono sostituiti con il nome delle colonne delle etichette di stima e verità di terra per il monitoraggio.

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

Esempio di metrica derivata

Il codice seguente definisce una metrica personalizzata che calcola la radice quadrata della squared_avg metrica definita in precedenza in questa sezione. Poiché si tratta di una metrica derivata, non fa riferimento ai dati della tabella primaria e viene invece definita in termini di squared_avg metrica di aggregazione. L’output viene salvato come nuova colonna nella tabella delle metriche del profilo.

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

Esempio di metriche di deriva

Il codice seguente definisce una metrica di deriva che tiene traccia della modifica nella weighted_error metrica definita in precedenza in questa sezione. I {{current_df}} parametri e {{base_df}} consentono alla metrica di fare riferimento weighted_error ai valori della finestra corrente e della finestra di confronto. La finestra di confronto può essere i dati di base o i dati dell’intervallo di tempo precedente. Le metriche di deriva vengono salvate nella tabella delle metriche di 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(),
)