Condividi tramite


Monitorare le tabelle delle metriche

Importante

Questa funzionalità è disponibile in anteprima pubblica.

Questa pagina descrive le tabelle delle metriche create da Databricks Lakehouse Monitoring. Per informazioni sul dashboard creato da un monitoraggio, vedere Usare il dashboard SQL generato.

Quando un monitoraggio viene eseguito in una tabella di Databricks, crea o aggiorna due tabelle delle metriche: una tabella delle metriche del profilo e una tabella delle metriche di deriva.

  • La tabella delle metriche del profilo contiene statistiche di riepilogo per ogni colonna e per ogni combinazione di colonne di intervallo temporale, sezione e raggruppamento. Per InferenceLog l'analisi, la tabella di analisi contiene anche metriche di accuratezza del modello.
  • La tabella delle metriche di deriva contiene statistiche che tengono traccia delle modifiche nella distribuzione per una metrica. Le tabelle di deriva possono essere usate per visualizzare o avvisare le modifiche apportate ai dati anziché valori specifici. Vengono calcolati i tipi di deriva seguenti:
    • La deriva consecutiva confronta una finestra con l'intervallo di tempo precedente. La deriva consecutiva viene calcolata solo se esiste un intervallo di tempo consecutivo dopo l'aggregazione in base alle granularità specificate.
    • La deriva di base confronta una finestra con la distribuzione di base determinata dalla tabella di base. La deriva di base viene calcolata solo se viene specificata una tabella di base.

Dove si trovano le tabelle delle metriche

Le tabelle delle metriche di monitoraggio vengono salvate in {output_schema}.{table_name}_profile_metrics e {output_schema}.{table_name}_drift_metrics, dove:

  • {output_schema} è il catalogo e lo schema specificati da output_schema_name.
  • {table_name} è il nome della tabella monitorata.

Come vengono calcolate le statistiche di monitoraggio

Ogni statistica e metrica nelle tabelle delle metriche viene calcolata per un intervallo di tempo specificato (denominato "finestra"). Per Snapshot l'analisi, l'intervallo di tempo è un singolo punto nel tempo corrispondente all'ora in cui la metrica è stata aggiornata. Per TimeSeries e InferenceLog l'analisi, l'intervallo di tempo si basa sulle granularità specificate in create_monitor e sui valori nell'oggetto timestamp_col specificato nell'argomento profile_type .

Le metriche vengono sempre calcolate per l'intera tabella. Inoltre, se si specifica un'espressione di sezionamento, le metriche vengono calcolate per ogni sezione di dati definita da un valore dell'espressione.

Ad esempio:

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

genera le sezioni seguenti: una per , una per col_2 > 10col_2 <= 10e una per ogni valore univoco in col1.

Le sezioni vengono identificate nelle tabelle delle metriche in base ai nomi slice_key delle colonne e slice_value. In questo esempio, una chiave di sezione sarà "col_2 > 10" e i valori corrispondenti sarebbero "true" e "false". L'intera tabella equivale a slice_key = NULL e slice_value = NULL. Le sezioni sono definite da una singola chiave di sezione.

Le metriche vengono calcolate per tutti i possibili gruppi definiti dalle finestre temporali e dai valori e dalle chiavi di sezione. Inoltre, per InferenceLog l'analisi, le metriche vengono calcolate per ogni ID modello. Per informazioni dettagliate, vedere Schemi di colonna per le tabelle generate.

Statistiche aggiuntive per il monitoraggio dell'accuratezza del modello (InferenceLog solo analisi)

Le statistiche aggiuntive vengono calcolate per InferenceLog l'analisi.

  • La qualità del modello viene calcolata se vengono forniti sia label_col che prediction_col .
  • Le sezioni vengono create automaticamente in base ai valori distinti di model_id_col.
  • Per i modelli di classificazione, le statistiche di equità e distorsione vengono calcolate per le sezioni con un valore booleano.

Tabelle delle metriche di analisi delle query e deviazioni

È possibile eseguire direttamente query sulle tabelle delle metriche. L'esempio seguente si basa sull'analisi InferenceLog :

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

Schemi di colonna per le tabelle generate

Per ogni colonna della tabella primaria, le tabelle delle metriche contengono una riga per ogni combinazione di colonne di raggruppamento. La colonna associata a ogni riga viene visualizzata nella colonna column_name.

Per le metriche basate su più colonne, ad esempio le metriche di accuratezza del modello, column_name è impostato su :table.

Per le metriche del profilo, vengono usate le colonne di raggruppamento seguenti:

  • intervallo di tempo
  • granularità (TimeSeries e InferenceLog solo analisi)
  • tipo di log - tabella di input o tabella di base
  • chiave di sezione e valore
  • id modello (InferenceLog solo analisi)

Per le metriche di deriva, vengono usate le colonne di raggruppamento aggiuntive seguenti:

  • intervallo di tempo di confronto
  • tipo drift (confronto con la finestra precedente o confronto con la tabella di base)

Gli schemi delle tabelle delle metriche sono illustrati di seguito e sono illustrati anche nella documentazione di riferimento dell'API databricks Lakehouse Monitoring.

Schema della tabella delle metriche del profilo

La tabella seguente illustra lo schema della tabella delle metriche del profilo. Se una metrica non è applicabile a una riga, la cella corrispondente è Null.

Nome colonna Tipo Descrizione
Raggruppamento di colonne
Finestra Struct. Vedere [1] di seguito. Intervallo di tempo.
granularity string Durata della finestra, impostata per granularities parametro. [2]
model_id_col string Facoltativo. Utilizzato solo per InferenceLog il tipo di analisi.
log_type string Tabella usata per calcolare le metriche. BA edizione Standard LINE o INPUT.
slice_key string Espressione slice. NULL per impostazione predefinita, ovvero tutti i dati.
slice_value string Valore dell'espressione di sezionamento.
column_name string Nome della colonna nella tabella primaria. :table è un nome speciale per le metriche che si applicano all'intera tabella, ad esempio l'accuratezza del modello.
data_type string Tipo di dati Spark di column_name.
logging_table_commit_version int Ignora.
monitor_version bigint Versione della configurazione del monitoraggio usata per calcolare le metriche nella riga. Per informazioni dettagliate, vedere [3] di seguito.
Colonne delle metriche - Statistiche di riepilogo
numero bigint Numero di valori non Null.
num_nulls bigint Numero di valori Null in column_name.
avg double Media aritmetica della colonna, ingoring nulls.
quantili array<double> Matrice di 1000 quantili. Vedere [4] di seguito.
distinct_count bigint Numero di valori distinti in column_name.
min double Valore minimo in column_name.
max double Valore massimo in column_name.
stddev double Deviazione standard di column_name.
num_zeros bigint Numero di zeri in column_name.
num_nan bigint Numero di valori NaN in column_name.
min_size double Dimensioni minime di matrici o strutture in column_name.
max_size double Dimensione massima di matrici o strutture in column_name.
avg_size double Dimensione media di matrici o strutture in column_name.
min_len double Lunghezza minima dei valori stringa e binari in column_name.
max_len double Lunghezza massima dei valori stringa e binari in column_name.
avg_len double Lunghezza media dei valori stringa e binari in column_name.
frequent_items Struct. Vedere [1] di seguito. Primi 100 elementi che si verificano più frequentemente.
non_null_columns array<string> Elenco di colonne con almeno un valore non Null.
mediana double Valore mediano di column_name.
percent_null double Percentuale di valori Null in column_name.
percent_zeros double Percentuale di valori pari a zero in column_name.
percent_distinct double Percentuale di valori distinti in column_name.
Colonne delle metriche - Accuratezza del modello di classificazione [5]
accuracy_score double Accuratezza del modello, calcolata come (numero di stime corrette/numero totale di stime), ignorando i valori Null.
confusion_matrix Struct. Vedere [1] di seguito.
precisione Struct. Vedere [1] di seguito.
richiamo Struct. Vedere [1] di seguito.
f1_score Struct. Vedere [1] di seguito.
Colonne delle metriche - Accuratezza del modello di regressione [5]
mean_squared_error double Errore quadratico medio tra prediction_col e label_col.
root_mean_squared_error double Errore quadratico medio radice tra prediction_col e label_col.
mean_average_error double Errore medio medio tra prediction_col e label_col.
mean_absolute_percentage_error double Errore percentuale assoluta medio tra prediction_col e label_col.
r2_score double Punteggio R quadrato tra prediction_col e label_col.
Colonne delle metriche - equità e distorsione [6]
predictive_parity double Misura se i due gruppi hanno una precisione uguale in tutte le classi stimate. label_col è obbligatorio.
predictive_equality double Misura se i due gruppi hanno una frequenza di falsi positivi uguali in tutte le classi stimate. label_col è obbligatorio.
equal_opportunity double Misura se i due gruppi hanno un richiamo uguale in tutte le classi stimate. label_col è obbligatorio.
statistical_parity double Misura se i due gruppi hanno un tasso di accettazione uguale. Il tasso di accettazione qui è definito come probabilità empirica da stimare come una determinata classe, in tutte le classi stimate.

[1] Formato dello struct per confusion_matrix, precision, recalle f1_score:

Nome colonna Type
Finestra struct<start: timestamp, end: timestamp>
frequent_items array<struct<item: string, count: bigint>>
confusion_matrix struct<prediction: string, label: string, count: bigint>
precisione struct<one_vs_all: map<string,double>, macro: double, weighted: double>
richiamo 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] Per i profili di inferenza o serie temporale, il monitoraggio esamina 30 giorni dal momento in cui viene creato il monitoraggio. A causa di questo cutoff, la prima analisi potrebbe includere una finestra parziale. Ad esempio, il limite di 30 giorni potrebbe rientrare a metà di una settimana o di un mese, nel qual caso la settimana o il mese completo non è incluso nel calcolo. Questo problema interessa solo la prima finestra.

[3] La versione illustrata in questa colonna è la versione usata per calcolare le statistiche nella riga e potrebbe non essere la versione corrente del monitoraggio. Ogni volta che si aggiornano le metriche, il monitoraggio tenta di ricompilare le metriche calcolate in precedenza usando la configurazione di monitoraggio corrente. La versione corrente del monitoraggio viene visualizzata nelle informazioni sul monitoraggio restituite dall'API e dal client Python.

[4] Codice di esempio per recuperare il 50° percentile: SELECT element_at(quantiles, int((size(quantiles)+1)/2)) AS p50 ... o SELECT quantiles[500] ... .

[5] Viene visualizzato solo se il monitoraggio ha InferenceLog il tipo di analisi e vengono forniti entrambi label_col e prediction_col .

[6] Viene visualizzato solo se il monitoraggio ha InferenceLog il tipo di analisi e problem_type è classification.

Schema della tabella delle metriche di deriva

La tabella seguente illustra lo schema della tabella delle metriche di deriva. La tabella drift viene generata solo se viene specificata una tabella di base o se esiste un intervallo di tempo consecutivo dopo l'aggregazione in base alle granularità specificate.

Nome colonna Tipo Descrizione
Raggruppamento di colonne
Finestra struct<start: timestamp, end: timestamp> Intervallo di tempo.
window_cmp struct<start: timestamp, end: timestamp> Finestra di confronto per drift_type CONSECUTIVE.
drift_type string BA edizione Standard LINE o CON edizione Standard CUTIVE. Indica se le metriche di deriva vengono confrontate con l'intervallo di tempo precedente o con la tabella di base.
granularity string Durata della finestra, impostata per granularities parametro. [7]
model_id_col string Facoltativo. Utilizzato solo per InferenceLog il tipo di analisi.
slice_key string Espressione slice. NULL per impostazione predefinita, ovvero tutti i dati.
slice_value string Valore dell'espressione di sezionamento.
column_name string Nome della colonna nella tabella primaria. :table è un nome speciale per le metriche che si applicano all'intera tabella, ad esempio l'accuratezza del modello.
data_type string Tipo di dati Spark di column_name.
monitor_version bigint Versione della configurazione del monitoraggio usata per calcolare le metriche nella riga. Per informazioni dettagliate, vedere [8] di seguito.
Colonne delle metriche - deriva Le differenze vengono calcolate come finestra corrente: finestra di confronto.
count_delta double Differenza in count.
avg_delta double Differenza in avg.
percent_null_delta double Differenza in percent_null.
percent_zeros_delta double Differenza in percent_zeros.
percent_distinct_delta double Differenza in percent_distinct.
non_null_columns_delta struct<added: int, missing: int> Numero di colonne con qualsiasi aumento o diminuzione di valori non Null.
chi_squared_test struct<statistic: double, pvalue: double> Test chi quadrato per la deriva nella distribuzione.
ks_test struct<statistic: double, pvalue: double> Test KS per la deriva nella distribuzione. Calcolato solo per le colonne numeriche.
tv_distance double Distanza di variazione totale per la deriva nella distribuzione.
l_infinity_distance double Distanza l-infinito per la deriva nella distribuzione.
js_distance double Distanza di Jensen-Shannon per la deriva nella distribuzione. Calcolato solo per le colonne categorica.
wasserstein_distance double Deriva tra due distribuzioni numeriche usando la metrica della distanza Brustein.
population_stability_index double Metrica per confrontare la deriva tra due distribuzioni numeriche usando la metrica dell'indice di stabilità della popolazione. Per informazioni dettagliate, vedere [9] di seguito.

[7] Per i profili di inferenza o serie temporale, il monitoraggio esamina 30 giorni dal momento in cui viene creato il monitoraggio. A causa di questo cutoff, la prima analisi potrebbe includere una finestra parziale. Ad esempio, il limite di 30 giorni potrebbe rientrare a metà di una settimana o di un mese, nel qual caso la settimana o il mese completo non è incluso nel calcolo. Questo problema interessa solo la prima finestra.

[8] La versione illustrata in questa colonna è la versione usata per calcolare le statistiche nella riga e potrebbe non essere la versione corrente del monitoraggio. Ogni volta che si aggiornano le metriche, il monitoraggio tenta di ricompilare le metriche calcolate in precedenza usando la configurazione di monitoraggio corrente. La versione corrente del monitoraggio viene visualizzata nelle informazioni sul monitoraggio restituite dall'API e dal client Python.

[9] L'output dell'indice di stabilità della popolazione è un valore numerico che rappresenta la differenza tra due distribuzioni. L'intervallo è [0, inf). PSI < 0,1 significa che nessun cambiamento significativo della popolazione. PSI < 0.2 indica una variazione moderata della popolazione. PSI >= 0,2 indica una variazione significativa della popolazione.