Freigeben über


Überwachungsmetriktabellen

Auf dieser Seite werden die Metriktabellen beschrieben, die von Databricks Lakehouse Monitoring erstellt werden. Informationen zu dem durch einen Monitor erstellten Dashboard finden Sie unter Verwenden des generierten SQL-Dashboards.

Wenn eine Überwachung für eine Databricks-Tabelle ausgeführt wird, werden zwei Metriktabellen erstellt oder aktualisiert: eine Profilmetrikentabelle und eine Tabelle mit Datendriftmetriken.

  • Die Tabelle mit den Profilmetriken enthält zusammenfassende Statistiken für jede Spalte und für jede Kombination von Zeitfenster-, Slice- und Gruppierungsspalten. Für die InferenceLog-Analyse enthält die Analysetabelle auch Modellgenauigkeitsmetriken.
  • Die Datendrifttabelle enthält Statistiken, mit denen Änderungen in der Verteilung einer Metrik nachverfolgt werden. Datendrifttabellen können verwendet werden, um Änderungen in den Daten anstelle von bestimmten Werten zu visualisieren oder zu melden. Die folgenden Datendrifttypen werden berechnet:
    • Beim fortlaufenden Datendrift wird ein Fenster mit dem vorhergehenden Zeitfenster verglichen. Der fortlaufende Datendrift wird nur berechnet, wenn nach der Aggregation gemäß der angegebenen Granularität ein aufeinanderfolgendes Zeitfenster vorhanden ist.
    • Beim Baselinedatendrift wird ein Fenster mit der Baseline-Verteilung verglichen, die durch die Baselinetabelle bestimmt wird. Der Baselinedatendrift wird nur berechnet, wenn eine Baselinetabelle bereitgestellt wird.

Speicherort der Metriktabellen

Überwachungsmetriktabellen werden in {output_schema}.{table_name}_profile_metrics und {output_schema}.{table_name}_drift_metrics gespeichert, wobei Folgendes gilt:

  • {output_schema} ist der Katalog und das Schema, die von output_schema_name angegeben werden.
  • {table_name} ist der Name der Tabelle, die überwacht wird.

Berechnung der Überwachungsstatistiken

Jede Statistik und Metrik in den Metriktabellen wird für ein angegebenes Zeitintervall (ein sogenanntes „Zeitfenster“) berechnet. Für die Snapshot-Analyse ist das Zeitfenster ein einzelner Zeitpunkt, der dem Zeitpunkt entspricht, zu dem die Metrik aktualisiert wurde. Für die TimeSeries-Analyse und die InferenceLog-Analyse basiert das Zeitfenster auf der in create_monitor angegebenen Granularität und den Werten von timestamp_col, die im profile_type-Argument angegeben werden.

Metriken werden immer für die gesamte Tabelle berechnet. Wenn Sie einen Slicingausdruck angeben, werden außerdem Metriken für jeden durch einen Wert des Ausdrucks definierten Datenslice berechnet.

Beispiel:

slicing_exprs=["col_1", "col_2 > 10"]

generiert die folgenden Slices: einen für col_2 > 10, einen für col_2 <= 10 und einen für jeden eindeutigen Wert in col1.

Slices werden in den Metriktabellen anhand der Spaltennamen slice_key und slice_valueidentifiziert. In diesem Beispiel würde ein Sliceschlüssel „col_2 > 10“ lauten, und die zugehörigen Werte wären „true“ und „false“. Die gesamte Tabelle ist gleichbedeutend mit slice_key = NULL und slice_value = NULL. Slices werden durch einen einzelnen Sliceschlüssel definiert.

Metriken werden für alle möglichen Gruppen berechnet, die durch die Zeitfenster und Sliceschlüssel und -werte definiert sind. Darüber hinaus werden für die InferenceLog-Analyse Metriken für jede Modell-ID berechnet. Weitere Informationen finden Sie unter Spaltenschemata für generierte Tabellen.

Zusätzliche Statistiken für die Überwachung der Modellgenauigkeit (nur InferenceLog-Analyse)

Für die InferenceLog-Analyse werden zusätzliche Statistiken berechnet.

  • Die Modellqualität wird berechnet, wenn sowohl label_col als auch prediction_col angegeben werden.
  • Slices werden automatisch basierend auf den unterschiedlichen Werten von model_id_colerstellt.
  • Für Klassifizierungsmodelle werden Fairness- und Trendstatistiken für Slices mit einem booleschen Wert berechnet.

Abfrageanalyse und Datendriftmetriktabellen

Sie können die Metriktabellen direkt abfragen. Das folgende Beispiel beruht auf der InferenceLog-Analyse:

SELECT
  window.start, column_name, count, num_nulls, distinct_count, frequent_items
FROM census_monitor_db.adult_census_profile_metrics
WHERE model_id = 1    — Constrain to version 1
  AND slice_key IS NULL    — look at aggregate metrics over the whole data
  AND column_name = "income_predicted"
ORDER BY window.start

Spaltenschemata für generierte Tabellen

Metriktabellen enthalten für jede Spalte in der primären Tabelle eine Zeile für jede Kombination von Gruppierungsspalten. Die jeder Zeile zugeordnete Spalte wird in der Spalte column_name angezeigt.

Für Metriken, die auf mehreren Spalten basieren, z. B. Modellgenauigkeitsmetriken, wird column_name auf :table festgelegt.

Für Profilmetriken werden die folgenden Gruppierungsspalten verwendet:

  • Zeitfenster
  • Granularität (nur TimeSeries- und InferenceLog-Analyse)
  • Protokolltyp: Eingabetabelle oder Baselinetabelle
  • Sliceschlüssel und -wert
  • Modell-ID (nur InferenceLog-Analyse)

Für Datendriftmetriken werden die folgenden zusätzlichen Gruppierungsspalten verwendet:

  • Vergleichszeitfenster
  • Datendrifttyp (Vergleich mit dem vorhergehenden Fenster oder Vergleich mit der Baselinetabelle)

Die Metriktabellenschemata sind unten sowie in der Referenzdokumentation der Databricks Lakehouse-Überwachungs-API dargestellt.

Schema von Profilmetrikentabellen

Die folgende Tabelle zeigt das Schema der Profilmetrikentabelle. Wenn eine Metrik nicht auf eine Zeile anwendbar ist, ist die entsprechende Zelle NULL.

Spaltenname type Beschreibung
Gruppierungsspalten
Fenster Struktur. Siehe unten: [1]. Zeitfenster.
Granularität Zeichenfolge Fensterdauer, die durch den granularities-Parameter festgelegt wird. [2]
model_id_col Zeichenfolge Optional. Wird nur für den Analysetyp InferenceLog verwendet.
log_type Zeichenfolge Tabelle zum Berechnen von Metriken. BASELINE oder INPUT.
slice_key Zeichenfolge Sliceausdruck. NULL für den Standardwert, d. h. alle Daten.
slice_value Zeichenfolge Wert des Slicingausdrucks.
column_name Zeichenfolge Name der Spalte in der primären Tabelle. :table ist ein spezieller Name für Metriken, die für die gesamte Tabelle gelten, z. B. Modellgenauigkeit.
data_type Zeichenfolge Spark-Datentyp column_name.
logging_table_commit_version int Ignorieren:
monitor_version BIGINT Version der Überwachungskonfiguration, die zum Berechnen der Metriken in der Zeile verwendet wird. Nähere Informationen finden Sie unten unter [3].
Metrikspalten – zusammenfassende Statistiken
count BIGINT Anzahl der Nicht-NULL-Werte.
num_nulls BIGINT Anzahl der NULL-Werte in column_name.
avg double Arithmetisches Mittel der Spalte, wobei NULL-Werte ignoriert werden.
quantiles array<double> Array von 1000 Quantilen. Siehe unten: [4].
distinct_count BIGINT Anzahl unterschiedlicher Werte in column_name.
Min double Minimumwert in column_name.
max double Maximumwert in column_name.
stddev double Standardabweichung von column_name.
num_zeros BIGINT Anzahl der Nullen in column_name.
num_nan BIGINT Anzahl der NaN-Werte in column_name.
min_size double Mindestgröße der Arrays oder Strukturen in column_name.
max_size double Maximale Größe der Arrays oder Strukturen in column_name.
avg_size double Durchschnittliche Größe der Arrays oder Strukturen in column_name.
min_len double Mindestlänge der Zeichenfolgen- und Binärwerten in column_name.
max_len double Maximale Länge der Zeichenfolgen- und Binärwerten in column_name.
avg_len double Durchschnittliche Länge der Zeichenfolgen- und Binärwerten in column_name.
frequent_items Struktur. Siehe unten: [1]. Die 100 am häufigsten vorkommenden Elemente.
non_null_columns array<string> Liste der Spalten mit mindestens einem Wert ungleich NULL.
Median double Median von column_name.
percent_null double Prozentsatz der NULL-Werte in column_name.
percent_zeros double Prozentsatz der Werte, die in column_name Null (0) sind.
percent_distinct double Prozentsatz der Werte, die in column_name unterschiedlich sind.
Metrikspalten – Genauigkeit des Klassifizierungsmodells [5]
accuracy_score double Genauigkeit des Modells, die mit der Formel (Anzahl der korrekten Vorhersagen/Gesamtzahl der Vorhersagen) berechnet wird, wobei NULL-Werte ignoriert werden.
confusion_matrix Struktur. Siehe unten: [1].
precision Struktur. Siehe unten: [1].
Abruf Struktur. Siehe unten: [1].
f1_score Struktur. Siehe unten: [1].
Metrikspalten – Genauigkeit des Regressionsmodells [5]
mean_squared_error double Mittlere quadratische Abweichung zwischen prediction_col und label_col.
root_mean_squared_error double Mittlere quadratische Gesamtabweichung zwischen prediction_col und label_col.
mean_average_error double Mittlere durchschnittliche Abweichung zwischen prediction_col und label_col.
mean_absolute_percentage_error double Mittlere absolute prozentuale Abweichung zwischen prediction_col und label_col.
r2_score double Bestimmtheitsmaß zwischen prediction_col und label_col.
Metrikspalten – Fairness und Trend [6]
predictive_parity double Misst, ob die beiden Gruppen für alle vorhergesagten Klassen die gleiche Genauigkeit aufweisen. label_col ist erforderlich.
predictive_equality double Misst, ob die beiden Gruppen für alle vorhergesagten Klassen die gleiche False Positive-Rate aufweisen. label_col ist erforderlich.
equal_opportunity double Misst, ob die beiden Gruppen für alle vorhergesagten Klassen den gleichen Abruf aufweisen. label_col ist erforderlich.
statistical_parity double Misst, ob die beiden Gruppen die gleiche Akzeptanzrate aufweisen. Die Akzeptanzrate wird hier als empirische Wahrscheinlichkeit definiert, unter Berücksichtigung aller vorhergesagten Klassen als eine bestimmte Klasse vorhergesagt zu werden.

[1] Format der Struktur für confusion_matrix, precision, recall und f1_score:

Spaltenname Typ
Fenster struct<start: timestamp, end: timestamp>
frequent_items array<struct<item: string, count: bigint>>
confusion_matrix struct<prediction: string, label: string, count: bigint>
Präzision struct<one_vs_all: map<string,double>, macro: double, weighted: double>
Abruf struct<one_vs_all: map<string,double>, macro: double, weighted: double>
f1_score struct<one_vs_all: map<string,double>, macro: double, weighted: double>

[2] Bei Zeitreihen oder Rückschlussprofilen blickt der Monitor maximal 30 Tage ab der Erstellung des Monitors zurück. Aufgrund dieses Grenzwerts kann die erste Analyse ein Teilfenster enthalten. So kann beispielsweise die 30-Tage-Grenze in die Mitte einer Woche oder eines Monats fallen. In diesem Fall ist nicht die vollständige Woche oder der vollständige Monat in der Berechnung enthalten. Dieses Problem betrifft nur das erste Fenster.

[3] Die in dieser Spalte angezeigte Version ist die Version, die zum Berechnen der Statistiken in der Zeile verwendet wurde, und entspricht möglicherweise nicht der aktuellen Version der Überwachung. Jedes Mal, wenn Sie die Metriken aktualisieren, versucht die Überwachung, zuvor berechnete Metriken mithilfe der aktuellen Überwachungkonfiguration neu zu berechnen. Die aktuelle Überwachungsversion ist in den von der API und dem Python-Client zurückgegebenen Überwachungsinformationen enthalten.

[4] Beispielcode zum Abrufen des 50. Perzentils: SELECT element_at(quantiles, int((size(quantiles)+1)/2)) AS p50 ... oder SELECT quantiles[500] ... .

[5] Wird nur angezeigt, wenn die Überwachung den Analysetyp InferenceLog hat und sowohl label_col als auch prediction_col angegeben werden.

[6] Wird nur angezeigt, wenn die Überwachung den Analysetyp InferenceLog hat und problem_type gleich classification sind.

Schema von Datendriftmetrikentabellen

Die folgende Tabelle zeigt das Schema der Datendriftmetrikentabelle. Die Datendrifttabelle wird nur generiert, wenn eine Baselinetabelle bereitgestellt wird oder wenn nach der Aggregation gemäß der angegebenen Granularität ein aufeinanderfolgendes Zeitfenster vorhanden ist.

Spaltenname type Beschreibung
Gruppierungsspalten
Fenster struct<start: timestamp, end: timestamp> Zeitfenster.
window_cmp struct<start: timestamp, end: timestamp> Vergleichsfenster für drift_type CONSECUTIVE.
drift_type Zeichenfolge BASELINE oder CONSECUTIVE. Gibt an, ob die Datendriftmetriken mit dem vorhergehenden Zeitfenster oder der Baselinetabelle verglichen werden.
Granularität Zeichenfolge Fensterdauer, die durch den granularities-Parameter festgelegt wird. [7]
model_id_col Zeichenfolge Optional. Wird nur für den Analysetyp InferenceLog verwendet.
slice_key Zeichenfolge Sliceausdruck. NULL für den Standardwert, d. h. alle Daten.
slice_value Zeichenfolge Wert des Slicingausdrucks.
column_name Zeichenfolge Name der Spalte in der primären Tabelle. :table ist ein spezieller Name für Metriken, die für die gesamte Tabelle gelten, z. B. Modellgenauigkeit.
data_type Zeichenfolge Spark-Datentyp column_name.
monitor_version BIGINT Version der Überwachungskonfiguration, die zum Berechnen der Metriken in der Zeile verwendet wird. Nähere Informationen finden Sie unten unter [8].
Metrikspalten – Drift Unterschiede werden als Differenz zwischen dem aktuellen Fenster und dem Vergleichsfenster berechnet.
count_delta double Unterschied in count.
avg_delta double Unterschied in avg.
percent_null_delta double Unterschied in percent_null.
percent_zeros_delta double Unterschied in percent_zeros.
percent_distinct_delta double Unterschied in percent_distinct.
non_null_columns_delta struct<added: int, missing: int> Anzahl von Spalten mit einer beliebigen Erhöhung oder Verringerung bei Werten ungleich NULL.
chi_squared_test struct<statistic: double, pvalue: double> Chi-Quadrat-Test auf Datendrift in der Verteilung.
ks_test struct<statistic: double, pvalue: double> KS-Test auf Datendrift in der Verteilung. Wird nur für numerische Spalten berechnet.
tv_distance double Gesamtvariationsabstand für den Datendrift in der Verteilung.
l_infinity_distance double L-Unendlichkeitsentfernung für den Datendrift in der Verteilung.
js_distance double Jensen-Shannon-Entfernung für den Datendrift in der Verteilung. Wird nur für kategorische Spalten berechnet.
wasserstein_distance double Datendrift zwischen zwei numerischen Verteilungen mithilfe der Wasserstein-Entfernungsmetrik.
population_stability_index double Metrik zum Vergleichen der Abweichung zwischen zwei numerischen Verteilungen unter Verwendung der Metrik für den Populationsstabilitätsindex. Nähere Informationen finden Sie unten unter [9].

[7] Bei Zeitreihen oder Rückschlussprofilen blickt der Monitor maximal 30 Tage ab der Erstellung des Monitors zurück. Aufgrund dieses Grenzwerts kann die erste Analyse ein Teilfenster enthalten. So kann beispielsweise die 30-Tage-Grenze in die Mitte einer Woche oder eines Monats fallen. In diesem Fall ist nicht die vollständige Woche oder der vollständige Monat in der Berechnung enthalten. Dieses Problem betrifft nur das erste Fenster.

[8] Die in dieser Spalte angezeigte Version ist die Version, die zum Berechnen der Statistiken in der Zeile verwendet wurde, und entspricht möglicherweise nicht der aktuellen Version der Überwachung. Jedes Mal, wenn Sie die Metriken aktualisieren, versucht die Überwachung, zuvor berechnete Metriken mithilfe der aktuellen Überwachungkonfiguration neu zu berechnen. Die aktuelle Überwachungsversion ist in den von der API und dem Python-Client zurückgegebenen Überwachungsinformationen enthalten.

[9] Die Ausgabe des Populationsstabilitätsindex ist ein numerischer Wert, der angibt, wie unterschiedlich zwei Verteilungen sind. Der Bereich entspricht [0, inf). PSI < 0,1 bedeutet, dass keine signifikante Änderung der Population vorliegt. PSI < 0,2 gibt eine moderate Änderung der Population an. PSI >= 0,2 zeigt eine signifikante Bevölkerungsänderung an.