Freigeben über


Verwenden von benutzerdefinierten Metriken mit Datenprofilerstellung

Auf dieser Seite wird beschrieben, wie Sie eine benutzerdefinierte Metrik in der Datenprofilerstellung erstellen. Zusätzlich zu den automatisch berechneten Analyse- und Driftstatistiken können Sie benutzerdefinierte Metriken erstellen. Sie können beispielsweise ein gewichtetes Mittel nachverfolgen, das einen Aspekt der Geschäftslogik erfasst oder eine benutzerdefinierte Modellqualitätsbewertung verwendet. Sie können auch benutzerdefinierte Driftmetriken erstellen, die Änderungen an den Werten in der Primärtabelle nachverfolgen (verglichen mit dem Basisplan oder dem vorherigen Zeitfenster).

Weitere Informationen zur Verwendung der MonitorMetric API finden Sie in der API-Referenz.

Typen von benutzerdefinierten Metriken

Die Datenprofilerstellung umfasst die folgenden Arten von benutzerdefinierten Metriken:

  • Aggregierte Metriken, die basierend auf Spalten in der Primärtabelle berechnet werden. Aggregierte Metriken werden in der Profilmetrikentabelle gespeichert.
  • Abgeleitete Metriken, die basierend auf zuvor berechneten Aggregatmetriken berechnet werden und nicht direkt Daten aus der Primärtabelle verwenden. Abgeleitete Metriken werden in der Profilmetrikentabelle gespeichert.
  • Driftmetriken, die zuvor berechnete aggregierte oder abgeleitete Metriken aus zwei verschiedenen Zeitfenstern oder zwischen der Primärtabelle und der Basisplantabelle vergleichen. Driftmetriken werden in der Driftmetrikentabelle gespeichert.

Die Verwendung abgeleiteter und Driftmetriken, sofern möglich, minimiert die Neukompilierung über die vollständige Primärtabelle. Nur aggregierte Metriken greifen auf Daten aus der primären Tabelle zu. Abgeleitete und Driftmetriken können dann direkt aus den aggregierten Metrikwerten berechnet werden.

Benutzerdefinierte Metrikparameter

Zum Definieren einer benutzerdefinierten Metrik erstellen Sie eine Jinja-Vorlage für einen SQL-Spaltenausdruck. In den Tabellen in diesem Abschnitt werden die Parameter beschrieben, die die Metrik definieren, und die Parameter, die in der Jinja-Vorlage verwendet werden.

Parameter Beschreibung
type Einer der folgenden Werte: MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE, MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED oder MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT.
name Spaltenname für die benutzerdefinierte Metrik in Metriktabellen.
input_columns Liste der Spaltennamen in der Eingabetabelle, für die die Metrik berechnet werden soll. Um anzugeben, dass mehr als eine Spalte in der Berechnung verwendet wird, verwenden Sie :table. Weitere Informationen finden Sie in den Beispielen in diesem Artikel.
definition Jinja-Vorlage für einen SQL-Ausdruck, der angibt, wie die Metrik berechnet wird. Siehe "Definition erstellen".
output_data_type Spark-Datentyp der Metrikausgabe in einem JSON-Zeichenfolgenformat.

Erstellen definition

Der definition Parameter muss ein einzelner Zeichenfolgenausdruck in Form einer Jinja-Vorlage sein. Es kann keine Verknüpfungen oder Unterabfragen enthalten.

In der folgenden Tabelle sind die Parameter aufgeführt, die Sie zum Erstellen einer SQL Jinja-Vorlage verwenden können, um anzugeben, wie die Metrik berechnet wird.

Parameter Beschreibung
{{input_column}} Spalte, die zum Berechnen der benutzerdefinierten Metrik verwendet wird.
{{prediction_col}} Spalte mit ML-Modellvorhersagen. Wird mit InferenceLog Analyse verwendet.
{{label_col}} Spalte mit Ground-Truth-Labels für das ML-Modell. Wird mit InferenceLog Analyse verwendet.
{{current_df}} Für Abweichung im Vergleich zum vorherigen Zeitfenster. Daten aus dem vorherigen Zeitfenster.
{{base_df}} Für Abweichungen im Vergleich zur Baseline-Tabelle. Basisdaten.

Aggregatmetrik (Beispiel)

Im folgenden Beispiel wird der Mittelwert des Quadrats der Werte in einer Spalte berechnet und auf die Spalten f1 und f2 angewendet. Die Ausgabe wird als neue Spalte in der Profilmetrikentabelle gespeichert und in den Analysezeilen angezeigt, die den Spalten f1 entsprechen.f2 Die entsprechenden Spaltennamen werden durch den Jinja-Parameter {{input_column}}ersetzt.

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

Der folgende Code definiert eine benutzerdefinierte Metrik, die den Mittelwert der Differenz zwischen Spalten f1 und f2 berechnet. Dieses Beispiel zeigt die Verwendung [":table"] im input_columns Parameter, um anzugeben, dass mehr als eine Spalte aus der Tabelle in der Berechnung verwendet wird.

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 diesem Beispiel wird eine gewichtete Modellqualitätsbewertung berechnet. Bei Beobachtungen, bei denen die critical Spalte True ist, wird eine schwerere Strafe verhängt, wenn der vorhergesagte Wert für diese Zeile nicht mit der Bodenwahrheit übereinstimmt. Da sie für die unformatierten Spalten definiert ist (prediction und label), wird sie als Aggregatmetrik definiert. Die :table Spalte gibt an, dass diese Metrik aus mehreren Spalten berechnet wird. Die Jinja-Parameter {{prediction_col}} und {{label_col}} werden durch den Namen der Vorhersage- und Ground-Truth-Label-Spalten für das Profil ersetzt.

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

Abgeleitetes Metrikbeispiel

Der folgende Code definiert eine benutzerdefinierte Metrik, die die Quadratwurzel der squared_avg zuvor in diesem Abschnitt definierten Metrik berechnet. Da es sich um eine abgeleitete Metrik handelt, wird nicht auf die Primärtabellendaten verwiesen und stattdessen in Bezug auf die squared_avg Aggregatmetrik definiert. Die Ausgabe wird als neue Spalte in der Profilmetrikentabelle gespeichert.

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

Beispiel für Driftmetriken

Der folgende Code definiert eine Driftmetrik, die die Änderung in der weighted_error zuvor in diesem Abschnitt definierten Metrik nachverfolgt. Die Parameter {{current_df}} und {{base_df}} erlauben es der Metrik, auf die weighted_error Werte aus dem aktuellen Fenster und dem Vergleichsfenster zu verweisen. Das Vergleichsfenster kann entweder die Basisplandaten oder die Daten aus dem vorherigen Zeitfenster sein. Driftmetriken werden in der Driftmetrikentabelle gespeichert.

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