Dela via


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