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.
Utilizzare metriche derivate e metriche di deriva, laddove possibile, riduce al minimo la ricompilazione della 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, crea 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 usare 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 la variazione 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 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(),
)
Il codice seguente definisce una metrica personalizzata che calcola la media della differenza tra colonne f1
e f2
. In questo esempio viene illustrato l'uso di [":table"]
nel parametro input_columns
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 colonna critical
è True
, viene applicata una penalità più pesante quando il valore previsto per tale riga non corrisponde al valore effettivo. Poiché è definito nelle colonne non elaborate (prediction
e label
), viene definito come metrica di aggregazione. La colonna :table
indica che questa metrica viene calcolata da più colonne. I parametri Jinja {{prediction_col}}
e {{label_col}}
vengono sostituiti con il nome delle colonne delle etichette di stima e verità di base 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 metrica di aggregazione squared_avg
. 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 parametri {{current_df}}
e {{base_df}}
consentono alla metrica di fare riferimento ai valori weighted_error
dalla finestra corrente e dalla 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(),
)