Ü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 vonoutput_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_value
identifiziert. 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 auchprediction_col
angegeben werden. - Slices werden automatisch basierend auf den unterschiedlichen Werten von
model_id_col
erstellt. - 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
- undInferenceLog
-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.