Använda anpassade mått med Databricks Lakehouse Monitoring
Den här sidan beskriver hur du skapar ett anpassat mått i Databricks Lakehouse Monitoring. Förutom den analys och avdriftsstatistik som beräknas automatiskt kan du skapa anpassade mått. Du kanske till exempel vill spåra ett viktat medelvärde som samlar in någon aspekt av affärslogik eller använder en anpassad modellkvalitetspoäng. Du kan också skapa anpassade driftmått som spårar ändringar av värdena i den primära tabellen (jämfört med baslinjen eller föregående tidsfönster).
Mer information om hur du använder API:et MonitorMetric
finns i API-referensen.
Typer av anpassade mått
Databricks Lakehouse Monitoring innehåller följande typer av anpassade mått:
- Aggregerade mått som beräknas baserat på kolumner i den primära tabellen. Aggregerade mått lagras i tabellen för profilmått.
- Härledda mått, som beräknas baserat på tidigare beräknade aggregeringsmått och inte använder data direkt från den primära tabellen. Härledda mått lagras i tabellen för profilmått.
- Driftmått, som jämför tidigare beräknade aggregerings- eller härledda mått från två olika tidsfönster, eller mellan den primära tabellen och baslinjetabellen. Driftmått lagras i tabellen med driftmått.
Med hjälp av härledda mått och driftmått där det är möjligt minimeras omkomputationen över den fullständiga primära tabellen. Endast aggregerade mått får åtkomst till data från den primära tabellen. Härledda mått och driftmått kan sedan beräknas direkt från de aggregerade måttvärdena.
Anpassade måttparametrar
Om du vill definiera ett anpassat mått skapar du en Jinja-mall för ett SQL-kolumnuttryck. Tabellerna i det här avsnittet beskriver de parametrar som definierar måttet och de parametrar som används i Jinja-mallen.
Parameter | Description |
---|---|
type |
En av MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE , MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED eller MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT . |
name |
Kolumnnamn för det anpassade måttet i måtttabeller. |
input_columns |
Lista över kolumnnamn i indatatabellen som måttet ska beräknas för. Om du vill ange att mer än en kolumn används i beräkningen använder du :table . Se exemplen i den här artikeln. |
definition |
Jinja-mall för ett SQL-uttryck som anger hur måttet ska beräknas. Se Skapa definition. |
output_data_type |
Spark-datatyp för måttutdata i ett JSON-strängformat. |
Skapa definition
Parametern definition
måste vara ett enda stränguttryck i form av en Jinja-mall. Den får inte innehålla kopplingar eller underfrågor.
I följande tabell visas de parametrar som du kan använda för att skapa en SQL Jinja-mall för att ange hur måttet ska beräknas.
Parameter | Description |
---|---|
{{input_column}} |
Kolumn som används för att beräkna det anpassade måttet. |
{{prediction_col}} |
Kolumn med ML-modellförutsägelser. Används med InferenceLog analys. |
{{label_col}} |
Kolumn med sanningsetiketter för ML-modell. Används med InferenceLog analys. |
{{current_df}} |
För drift jämfört med föregående tidsfönster. Data från föregående tidsfönster. |
{{base_df}} |
För drift jämfört med baslinjetabellen. Baslinjedata. |
Exempel på aggregerade mått
I följande exempel beräknas medelvärdet av kvadraten för värdena i en kolumn och tillämpas på kolumner f1
och f2
. Utdata sparas som en ny kolumn i tabellen profilmått och visas i de analysrader som motsvarar kolumnerna f1
och f2
. De tillämpliga kolumnnamnen ersätts med jinjaparametern {{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(),
)
Följande kod definierar ett anpassat mått som beräknar medelvärdet av skillnaden mellan kolumner f1
och f2
. Det här exemplet visar användningen av [":table"]
i parametern input_columns
för att indikera att mer än en kolumn från tabellen används i beräkningen.
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(),
)
I det här exemplet beräknas en viktad modellkvalitetspoäng. För observationer där critical
kolumnen är True
tilldelas en tyngre straff när det förutsagda värdet för den raden inte matchar grundsanningen. Eftersom den definieras på de råa kolumnerna (prediction
och label
) definieras den som ett aggregerat mått. Kolumnen :table
anger att det här måttet beräknas från flera kolumner. Jinja-parametrarna {{prediction_col}}
och {{label_col}}
ersätts med namnet på kolumnerna förutsägelse och mald sanningsetikett för övervakaren.
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(),
)
Exempel på härledda mått
Följande kod definierar ett anpassat mått som beräknar kvadratroten för måttet squared_avg
som definierades tidigare i det här avsnittet. Eftersom det här är ett härlett mått refererar det inte till de primära tabelldata och definieras i stället i termer av det aggregerade måttet squared_avg
. Utdata sparas som en ny kolumn i tabellen för profilmått.
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(),
)
Exempel på driftmått
Följande kod definierar ett driftmått som spårar ändringen i måttet weighted_error
som definierades tidigare i det här avsnittet. Parametrarna {{current_df}}
och {{base_df}}
tillåter att måttet weighted_error
refererar till värdena från det aktuella fönstret och jämförelsefönstret. Jämförelsefönstret kan vara antingen baslinjedata eller data från föregående tidsfönster. Driftmått sparas i tabellen driftmått.
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(),
)