Udostępnij za pośrednictwem


Używanie metryk niestandardowych z monitorowaniem usługi Databricks Lakehouse

Na tej stronie opisano sposób tworzenia niestandardowej metryki w usłudze Databricks Lakehouse Monitoring. Oprócz statystyk analizy i dryfu, które są automatycznie obliczane, można utworzyć metryki niestandardowe. Możesz na przykład śledzić ważoną średnią, która przechwytuje pewien aspekt logiki biznesowej lub użyj niestandardowego wskaźnika jakości modelu. Można również utworzyć niestandardowe metryki dryfu, które śledzą zmiany wartości w tabeli podstawowej (w porównaniu z punktem odniesienia lub poprzednim przedziałem czasu).

Aby uzyskać więcej informacji na temat korzystania z interfejsu API, zobacz dokumentację interfejsu MonitorMetricAPI.

Typy metryk niestandardowych

Monitorowanie usługi Databricks Lakehouse obejmuje następujące typy metryk niestandardowych:

  • Agregowanie metryk, które są obliczane na podstawie kolumn w tabeli podstawowej. Zagregowane metryki są przechowywane w tabeli metryk profilu.
  • Pochodne metryki, które są obliczane na podstawie wcześniej obliczonych zagregowanych metryk i nie używają bezpośrednio danych z tabeli podstawowej. Pochodne metryki są przechowywane w tabeli metryk profilu.
  • Metryki dryfu, które porównują wcześniej obliczone zagregowane lub pochodne metryki z dwóch różnych okien czasowych lub między tabelą podstawową a tabelą bazową. Metryki dryfu są przechowywane w tabeli metryk dryfu.

Używanie metryk pochodnych i dryfu, jeśli to możliwe, minimalizuje ponowną kompilację w pełnej tabeli podstawowej. Tylko agregowanie danych dostępu do metryk z tabeli podstawowej. Metryki pochodne i dryfu można następnie obliczać bezpośrednio z zagregowanych wartości metryk.

Parametry metryk niestandardowych

Aby zdefiniować metrykę niestandardową , należy utworzyć szablon Jinja dla wyrażenia kolumny SQL. W tabelach w tej sekcji opisano parametry definiujące metryki oraz parametry używane w szablonie Jinja.

Parametr Opis
type MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATEJeden z , MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVEDlub MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT.
name Nazwa kolumny dla metryki niestandardowej w tabelach metryk.
input_columns Lista nazw kolumn w tabeli wejściowej, dla których powinna zostać obliczona metryka. Aby wskazać, że w obliczeniach jest używana więcej niż jedna kolumna, użyj polecenia :table. Zapoznaj się z przykładami w tym artykule.
definition Szablon Jinja dla wyrażenia SQL, który określa sposób obliczania metryki. Zobacz Tworzenie definicji.
output_data_type Typ danych platformy Spark danych wyjściowych metryki w formacie ciągu JSON.

Tworzyć definition

Parametr definition musi być pojedynczym wyrażeniem ciągu w postaci szablonu Jinja. Nie może zawierać sprzężeń ani podzapytania.

W poniższej tabeli wymieniono parametry, których można użyć do utworzenia szablonu SQL Jinja, aby określić sposób obliczania metryki.

Parametr Opis
{{input_column}} Kolumna używana do obliczania metryki niestandardowej.
{{prediction_col}} Kolumna przechowując przewidywania modelu uczenia maszynowego. Używany z analizą InferenceLog .
{{label_col}} Kolumna zawierająca etykiety podstaw modelu uczenia maszynowego. Używany z analizą InferenceLog .
{{current_df}} W przypadku dryfu w porównaniu z poprzednim przedziałem czasu. Dane z poprzedniego przedziału czasu.
{{base_df}} W przypadku dryfu w porównaniu z tabelą odniesienia. Dane linii bazowej.

Przykład agregacji metryki

Poniższy przykład oblicza średnią kwadratu wartości w kolumnie i jest stosowany do kolumn f1 i f2. Dane wyjściowe są zapisywane jako nowa kolumna w tabeli metryk profilu i są wyświetlane w wierszach analizy odpowiadających kolumnom f1 i f2. Odpowiednie nazwy kolumn są zastępowane parametrem {{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(),
)

Poniższy kod definiuje niestandardową metrykę, która oblicza średnią różnicy między kolumnami f1 i f2. W tym przykładzie pokazano użycie elementu [":table"] w parametrze input_columns w celu wskazania, że w obliczeniach jest używana więcej niż jedna kolumna z tabeli.

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

W tym przykładzie obliczana jest ważona ocena jakości modelu. W przypadku obserwacji, w których kolumna critical to , przypisywana jest Trueostrza spora kara, gdy przewidywana wartość tego wiersza nie jest zgodna z prawem podstawy. Ponieważ jest ona zdefiniowana w nieprzetworzonych kolumnach (prediction i label), jest zdefiniowana jako metryka agregacji. Kolumna :table wskazuje, że ta metryka jest obliczana z wielu kolumn. Parametry {{prediction_col}} Jinja i {{label_col}} są zastępowane nazwą kolumn prediction i ground truth label dla monitora.

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

Przykład metryki pochodnej

Poniższy kod definiuje niestandardową metrykę, która oblicza pierwiastek squared_avg kwadratowy metryki zdefiniowanej wcześniej w tej sekcji. Ponieważ jest to metryka pochodna, nie odwołuje się do podstawowych danych tabeli i zamiast tego jest definiowana pod względem squared_avg metryki zagregowanej. Dane wyjściowe są zapisywane jako nowa kolumna w tabeli metryk profilu.

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

Przykład metryk dryfu

Poniższy kod definiuje metrykę dryfu, która śledzi zmianę metryki zdefiniowanej weighted_error wcześniej w tej sekcji. Parametry {{current_df}} i {{base_df}} umożliwiają metryce odwołanie weighted_error do wartości z bieżącego okna i okna porównania. Okno porównania może być danymi odniesienia lub danymi z poprzedniego przedziału czasu. Metryki dryfu są zapisywane w tabeli metryk dryfu.

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