Monitorowanie tabel metryk
Na tej stronie opisano tabele metryk utworzone przez usługę Databricks Lakehouse Monitoring. Aby uzyskać informacje o pulpicie nawigacyjnym utworzonym przez monitor, zobacz Korzystanie z wygenerowanego pulpitu nawigacyjnego SQL.
Gdy monitor jest uruchamiany w tabeli usługi Databricks, tworzy lub aktualizuje dwie tabele metryk: tabelę metryk profilu i tabelę metryk dryfu.
- Tabela metryk profilu zawiera podsumowanie statystyk dla każdej kolumny i dla każdej kombinacji przedziału czasu, wycinka i grupowania kolumn. Na potrzeby
InferenceLog
analizy tabela analizy zawiera również metryki dokładności modelu. - Tabela metryk dryfu zawiera statystyki śledzące zmiany rozkładu dla metryki. Tabele dryfu mogą służyć do wizualizacji lub zgłaszania alertów dotyczących zmian w danych zamiast określonych wartości. Obliczane są następujące typy dryfu:
- Kolejne dryfy porównuje okno z poprzednim oknem czasu. Kolejna dryf jest obliczana tylko wtedy, gdy kolejne przedziały czasu istnieją po agregacji zgodnie z określonymi stopniami szczegółowości.
- Dryf linii bazowej porównuje okno z rozkładem odniesienia określonym przez tabelę odniesienia. Dryf wg planu bazowego jest obliczany tylko wtedy, gdy zostanie podana tabela odniesienia.
Gdzie znajdują się tabele metryk
Tabele metryk monitora są zapisywane w systemach {output_schema}.{table_name}_profile_metrics
i {output_schema}.{table_name}_drift_metrics
, gdzie:
{output_schema}
to wykaz i schemat określony przezoutput_schema_name
.{table_name}
to nazwa monitorowanej tabeli.
Jak są obliczane statystyki monitorowania
Każda statystyka i metryka w tabelach metryk są obliczane dla określonego interwału czasu (nazywanego "oknem"). W przypadku Snapshot
analizy przedział czasu jest pojedynczym punktem w czasie odpowiadającym czasowi odświeżenia metryki. W przypadku TimeSeries
i InferenceLog
analizy przedział czasu jest oparty na stopniach szczegółowości określonych w create_monitor
i wartościach określonych w timestamp_col
argumencie profile_type
.
Metryki są zawsze obliczane dla całej tabeli. Ponadto w przypadku podania wyrażenia fragmentowania metryki są obliczane dla każdego wycinka danych zdefiniowanego przez wartość wyrażenia.
Na przykład:
slicing_exprs=["col_1", "col_2 > 10"]
Generuje następujące wycinki: jeden dla , jeden dla col_2 > 10
col_2 <= 10
, i jeden dla każdej unikatowej wartości w .col1
Wycinki są identyfikowane w tabelach metryk według nazw slice_key
kolumn i slice_value
. W tym przykładzie jeden klucz wycinka to "col_2 > 10", a odpowiednie wartości to "true" i "false". Cała tabela jest równoważna wartościom slice_key
= NULL i slice_value
= NULL. Wycinki są definiowane przez pojedynczy klucz wycinka.
Metryki są obliczane dla wszystkich możliwych grup zdefiniowanych przez okna czasowe i klucze i wartości fragmentów. Ponadto na potrzeby InferenceLog
analizy metryki są obliczane dla każdego identyfikatora modelu. Aby uzyskać szczegółowe informacje, zobacz Schematy kolumn dla wygenerowanych tabel.
Dodatkowe statystyki dotyczące monitorowania dokładności modelu (InferenceLog
tylko analiza)
Dodatkowe statystyki są obliczane na potrzeby InferenceLog
analizy.
- Jakość modelu jest obliczana, jeśli są dostępne zarówno,
label_col
jak iprediction_col
. - Wycinki są tworzone automatycznie na podstawie unikatowych wartości .
model_id_col
- W przypadku modeli klasyfikacji statystyki sprawiedliwości i stronniczości są obliczane dla wycinków, które mają wartość logiczną.
Tabele metryk analizy zapytań i dryfu
Tabele metryk można wysyłać bezpośrednio do zapytań. Poniższy przykład opiera się na InferenceLog
analizie:
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
Schematy kolumn dla wygenerowanych tabel
Dla każdej kolumny w tabeli podstawowej tabele metryk zawierają jeden wiersz dla każdej kombinacji kolumn grupowania. Kolumna skojarzona z każdym wierszem jest wyświetlana w kolumnie column_name
.
W przypadku metryk opartych na więcej niż jednej kolumnie, takiej jak metryki dokładności modelu, column_name
jest ustawiona na :table
wartość .
W przypadku metryk profilu są używane następujące kolumny grupowania:
- przedział czasu
- stopień szczegółowości (
TimeSeries
iInferenceLog
tylko analiza) - typ dziennika — tabela wejściowa lub tabela bazowa
- fragmentator klucza i wartości
- identyfikator modelu (
InferenceLog
tylko analiza)
W przypadku metryk dryfu są używane następujące dodatkowe kolumny grupowania:
- przedział czasu porównania
- dryf typ (porównanie z poprzednim oknem lub porównaniem z tabelą odniesienia)
Schematy tabel metryk przedstawiono poniżej i są również wyświetlane w dokumentacji referencyjnej interfejsu API monitorowania usługi Databricks Lakehouse.
Schemat tabeli metryk profilu
W poniższej tabeli przedstawiono schemat tabeli metryk profilu. Jeśli metryka nie ma zastosowania do wiersza, odpowiednia komórka ma wartość null.
Nazwa kolumny | Type | Opis |
---|---|---|
Grupowanie kolumn | ||
okno | Struct. Zobacz [1] poniżej. | Przedział czasu. |
ziarnistość | string | Czas trwania okna, ustawiony według granularities parametru. [2] |
model_id_col | string | Opcjonalny. Używane tylko dla InferenceLog typu analizy. |
log_type | string | Tabela używana do obliczania metryk. PUNKT ODNIESIENIA lub DANE WEJŚCIOWE. |
slice_key | string | Wyrażenie fragmentatora. Wartość NULL dla wartości domyślnej, czyli wszystkie dane. |
slice_value | string | Wartość wyrażenia fragmentowania. |
column_name | string | Nazwa kolumny w tabeli podstawowej. :table to specjalna nazwa metryk, które mają zastosowanie do całej tabeli, na przykład dokładność modelu. |
data_type | string | Typ danych platformy Spark .column_name |
logging_table_commit_version | int | Ignore. |
monitor_version | bigint | Wersja konfiguracji monitora używana do obliczania metryk w wierszu. Aby uzyskać szczegółowe informacje, zobacz [3] poniżej. |
Kolumny metryk — statystyki podsumowania | ||
count | bigint | Liczba wartości innych niż null. |
num_nulls | bigint | Liczba wartości null w elem.column_name |
średnio | double | Średnia arytmetyczna kolumny, wywłaszając wartości null. |
kwantyle | array<double> |
Tablica 1000 kwantyli. Zobacz [4] poniżej. |
distinct_count | bigint | Liczba unikatowych wartości w elem column_name . |
min | double | Wartość minimalna w pliku column_name . |
max | double | Wartość maksymalna w pliku column_name . |
stddev | double | Odchylenie standardowe .column_name |
num_zeros | bigint | Liczba zer w elem column_name . |
num_nan | bigint | Liczba wartości NaN w elem.column_name |
min_size | double | Minimalny rozmiar tablic lub struktur w obiekcie column_name . |
max_size | double | Maksymalny rozmiar tablic lub struktur w obiekcie column_name . |
avg_size | double | Średni rozmiar tablic lub struktur w obiekcie column_name . |
min_len | double | Minimalna długość ciągu i wartości binarnych w pliku column_name . |
max_len | double | Maksymalna długość ciągu i wartości binarnych w pliku column_name . |
avg_len | double | Średnia długość ciągu i wartości binarnych w pliku column_name . |
frequent_items | Struct. Zobacz [1] poniżej. | 100 najczęściej występujących elementów. |
non_null_columns | array<string> |
Lista kolumn z co najmniej jedną wartością inną niż null. |
mediana | double | Mediana wartości column_name . |
percent_null | double | Procent wartości null w elem column_name . |
percent_zeros | double | Procent wartości, które są zerowe w .column_name |
percent_distinct | double | Procent unikatowych wartości w elem column_name . |
Kolumny metryk — dokładność modelu klasyfikacji [5] | ||
accuracy_score | double | Dokładność modelu obliczana jako (liczba poprawnych przewidywań / łączna liczba przewidywań), ignorując wartości null. |
confusion_matrix | Struct. Zobacz [1] poniżej. | |
precyzja | Struct. Zobacz [1] poniżej. | |
trafność | Struct. Zobacz [1] poniżej. | |
f1_score | Struct. Zobacz [1] poniżej. | |
Kolumny metryk — dokładność modelu regresji [5] | ||
mean_squared_error | double | Błąd średniokwadratowy między prediction_col i label_col . |
root_mean_squared_error | double | Błąd średniokwadratowy od prediction_col do label_col . |
mean_average_error | double | Średni błąd między prediction_col i label_col . |
mean_absolute_percentage_error | double | Średni bezwzględny błąd procentowy między prediction_col i label_col . |
r2_score | double | Wynik z kwadratem R między prediction_col i label_col . |
Kolumny metryk — sprawiedliwość i stronniczość [6] | ||
predictive_parity | double | Mierzy, czy obie grupy mają równą precyzję we wszystkich przewidywanych klasach. Ciąg label_col jest wymagany. |
predictive_equality | double | Mierzy, czy obie grupy mają równe fałszywie dodatnie współczynniki we wszystkich przewidywanych klasach. Ciąg label_col jest wymagany. |
equal_opportunity | double | Mierzy, czy obie grupy mają równą kompletność we wszystkich przewidywanych klasach. Ciąg label_col jest wymagany. |
statistical_parity | double | Mierzy, czy obie grupy mają równy współczynnik akceptacji. W tym miejscu współczynnik akceptacji jest definiowany jako prawdopodobieństwo empiryczne, które ma być przewidywane jako określona klasa we wszystkich przewidywanych klasach. |
[1] Format struktury dla confusion_matrix
, precision
, recall
i f1_score
:
Nazwa kolumny | Typ |
---|---|
okno | struct<start: timestamp, end: timestamp> |
frequent_items | array<struct<item: string, count: bigint>> |
confusion_matrix | struct<prediction: string, label: string, count: bigint> |
precyzja | struct<one_vs_all: map<string,double>, macro: double, weighted: double> |
trafność | 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] W przypadku profilów szeregów czasowych lub wnioskowania monitor patrzy wstecz 30 dni od momentu utworzenia monitora. Ze względu na to odcięcie pierwsza analiza może zawierać częściowe okno. Na przykład limit 30 dni może spaść w środku tygodnia lub miesiąca, w tym przypadku pełny tydzień lub miesiąc nie jest uwzględniony w obliczeniu. Ten problem dotyczy tylko pierwszego okna.
[3] Wersja wyświetlana w tej kolumnie to wersja użyta do obliczenia statystyk w wierszu i może nie być bieżącą wersją monitora. Za każdym razem, gdy odświeżasz metryki, monitor próbuje ponownie skompilować wcześniej obliczone metryki przy użyciu bieżącej konfiguracji monitora. Bieżąca wersja monitora jest wyświetlana w informacjach monitora zwracanych przez interfejs API i klienta języka Python.
[4] Przykładowy kod pobierania 50. percentyla: SELECT element_at(quantiles, int((size(quantiles)+1)/2)) AS p50 ...
lub SELECT quantiles[500] ...
.
[5] Wyświetlane tylko wtedy, gdy monitor ma InferenceLog
typ analizy i są label_col
udostępniane.prediction_col
[6] Wyświetlane tylko wtedy, gdy monitor ma InferenceLog
typ analizy i problem_type
ma wartość classification
.
Schemat tabeli metryk dryfu
W poniższej tabeli przedstawiono schemat tabeli metryk dryfu. Tabela dryfu jest generowana tylko wtedy, gdy jest podana tabela odniesienia lub gdy istnieje kolejne przedziały czasu po agregacji zgodnie z określonymi poziomami szczegółowości.
Nazwa kolumny | Type | Opis |
---|---|---|
Grupowanie kolumn | ||
okno | struct<start: timestamp, end: timestamp> |
Przedział czasu. |
window_cmp | struct<start: timestamp, end: timestamp> |
Okno porównania dla drift_type CONSECUTIVE . |
drift_type | string | PUNKT ODNIESIENIA lub KOLEJNA. Niezależnie od tego, czy metryki dryfu są porównywane z poprzednim przedziałem czasu, czy z tabelą odniesienia. |
ziarnistość | string | Czas trwania okna, ustawiony według granularities parametru. [7] |
model_id_col | string | Opcjonalny. Używane tylko dla InferenceLog typu analizy. |
slice_key | string | Wyrażenie fragmentatora. Wartość NULL dla wartości domyślnej, czyli wszystkie dane. |
slice_value | string | Wartość wyrażenia fragmentowania. |
column_name | string | Nazwa kolumny w tabeli podstawowej. :table to specjalna nazwa metryk, które mają zastosowanie do całej tabeli, na przykład dokładność modelu. |
data_type | string | Typ danych platformy Spark .column_name |
monitor_version | bigint | Wersja konfiguracji monitora używana do obliczania metryk w wierszu. Aby uzyskać szczegółowe informacje, zobacz [8] poniżej. |
Kolumny metryk — dryf | Różnice są obliczane jako bieżące okno — okno porównania. | |
count_delta | double | Różnica w elem.count |
avg_delta | double | Różnica w elem.avg |
percent_null_delta | double | Różnica w elem.percent_null |
percent_zeros_delta | double | Różnica w elem.percent_zeros |
percent_distinct_delta | double | Różnica w elem.percent_distinct |
non_null_columns_delta | struct<added: int, missing: int> |
Liczba kolumn ze wzrostem lub zmniejszeniem wartości innych niż null. |
chi_squared_test | struct<statistic: double, pvalue: double> |
Test chi-kwadrat pod kątem dryfu w dystrybucji. |
ks_test | struct<statistic: double, pvalue: double> |
Test KS pod kątem dryfu w dystrybucji. Obliczane tylko dla kolumn liczbowych. |
tv_distance | double | Całkowita odległość odchylenia dla dryfu w rozkładie. |
l_infinity_distance | double | Odległość L-nieskończoność dla dryfu w rozkładie. |
js_distance | double | Jensen–Shannon odległość dryfu w dystrybucji. Obliczane tylko dla kolumn kategorii. |
wasserstein_distance | double | Dryf między dwoma rozkładami liczbowymi przy użyciu metryki odległości Wassersteina. |
population_stability_index | double | Metryka do porównywania dryfu między dwoma rozkładami liczbowymi przy użyciu metryki indeksu stabilności populacji. Aby uzyskać szczegółowe informacje, zobacz [9] poniżej. |
[7] W przypadku profilów szeregów czasowych lub wnioskowania monitor patrzy wstecz 30 dni od momentu utworzenia monitora. Ze względu na to odcięcie pierwsza analiza może zawierać częściowe okno. Na przykład limit 30 dni może spaść w środku tygodnia lub miesiąca, w tym przypadku pełny tydzień lub miesiąc nie jest uwzględniony w obliczeniu. Ten problem dotyczy tylko pierwszego okna.
[8] Wersja wyświetlana w tej kolumnie jest wersją, która została użyta do obliczenia statystyk w wierszu i może nie być bieżącą wersją monitora. Za każdym razem, gdy odświeżasz metryki, monitor próbuje ponownie skompilować wcześniej obliczone metryki przy użyciu bieżącej konfiguracji monitora. Bieżąca wersja monitora jest wyświetlana w informacjach monitora zwracanych przez interfejs API i klienta języka Python.
[9] Dane wyjściowe indeksu stabilności populacji to wartość liczbowa reprezentująca sposób, w jaki różnią się dwa rozkłady. Zakres to [0, inf). PSI < 0.1 nie oznacza znaczącej zmiany populacji. PSI < 0.2 wskazuje umiarkowaną zmianę populacji. PSI >= 0,2 wskazuje znaczną zmianę populacji.