Condividi tramite


Monitorare le tabelle delle metriche

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 Strutt. Vedere [1] di seguito. Intervallo di tempo.
granularità corda Durata della finestra, impostata per granularities parametro. [2]
model_id_col corda Facoltativo. Utilizzato solo per InferenceLog il tipo di analisi.
tipo di registro corda Tabella usata per calcolare le metriche. BASELINE o INPUT.
slice_key corda Espressione slice. NULL per impostazione predefinita, ovvero tutti i dati.
slice_value corda Valore dell'espressione di sezionamento.
column_name corda 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.
tipo di dati corda Tipo di dati Spark di column_name.
versione_impegno_tabella_logging Int Ignora.
versione_monitor 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.
medio doppio Media aritmetica della colonna, ingoring nulls.
quantili array<double> Matrice di 1000 quantili. Vedere [4] di seguito.
distinct_count bigint Numero approssimativo di valori distinti in column_name. In questo modo viene usata la approx_count_distinct funzione , quindi il risultato potrebbe non essere esatto.
minuto doppio Valore minimo in column_name.
massimo doppio Valore massimo in column_name.
stddev doppio Deviazione standard di column_name.
num_zeros bigint Numero di zeri in column_name.
numero_nan bigint Numero di valori NaN in column_name.
dimensione_minima doppio Dimensioni minime di matrici o strutture in column_name.
dimensione_massima doppio Dimensione massima di matrici o strutture in column_name.
avg_size doppio Dimensione media di matrici o strutture in column_name.
lunghezza_minima doppio Lunghezza minima dei valori stringa e binari in column_name.
max_len doppio Lunghezza massima dei valori stringa e binari in column_name.
avg_len doppio Lunghezza media dei valori stringa e binari in column_name.
articoli frequenti Strutt. Vedere [1] di seguito. Primi 100 elementi che si verificano più frequentemente.
colonne_non_nulle array<string> Elenco di colonne con almeno un valore non Null.
mediana doppio Valore mediano di column_name.
percentuale_nulla doppio Percentuale di valori Null in column_name.
percentuale_di_zeri doppio Percentuale di valori pari a zero in column_name.
percentuale_distinta doppio Percentuale di valori distinti in column_name.
Colonne delle metriche - Accuratezza del modello di classificazione [5]
punteggio_di_accuratezza doppio Accuratezza del modello, calcolata come (numero di stime corrette/numero totale di stime), ignorando i valori Null.
matrice di confusione Strutt. Vedere [1] di seguito.
precisione Strutt. Vedere [1] di seguito.
richiamo Strutt. Vedere [1] di seguito.
f1_score Strutt. Vedere [1] di seguito.
Colonne delle metriche - Accuratezza del modello di regressione [5]
errore quadratico medio doppio Errore quadratico medio tra prediction_col e label_col.
errore quadratico medio radice doppio Errore quadratico medio radice tra prediction_col e label_col.
errore medio assoluto doppio Errore medio medio tra prediction_col e label_col.
errore percentuale assoluto medio doppio Errore percentuale assoluta medio tra prediction_col e label_col.
r2_score doppio Punteggio R quadrato tra prediction_col e label_col.
Colonne delle metriche - equità e distorsione [6]
parità predittiva doppio Misura se i due gruppi hanno una precisione uguale in tutte le classi stimate. label_col è obbligatorio.
uguaglianza predittiva doppio Misura se i due gruppi hanno una frequenza di falsi positivi uguali in tutte le classi stimate. label_col è obbligatorio.
pari_opportunità doppio Misura se i due gruppi hanno un richiamo uguale in tutte le classi stimate. label_col è obbligatorio.
equità statistica doppio 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 Tipo
finestra struct<start: timestamp, end: timestamp>
articoli frequenti array<struct<item: string, count: bigint>>
matrice di confusione 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.
tipo di deriva corda BASELINE o CONSECUTIVE. Indica se le metriche di deriva vengono confrontate con l'intervallo di tempo precedente o con la tabella di base.
granularità corda Durata della finestra, impostata per granularities parametro. [7]
model_id_col corda Facoltativo. Utilizzato solo per InferenceLog il tipo di analisi.
chiave_di_sezione corda Espressione slice. NULL per impostazione predefinita, ovvero tutti i dati.
slice_value corda Valore dell'espressione di sezionamento.
column_name corda 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.
tipo di dati corda Tipo di dati Spark di column_name.
versione_monitor 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 doppio Differenza in count.
avg_delta doppio Differenza in avg.
percentuale_null_delta doppio Differenza in percent_null.
percentuale_delta_zeri doppio Differenza in percent_zeros.
percent_distinct_delta doppio Differenza in percent_distinct.
colonne_non_nulle_delta struct<added: int, missing: int> Numero di colonne con qualsiasi aumento o diminuzione di valori non Null.
test del chi quadrato 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 doppio Distanza di variazione totale per la deriva nella distribuzione.
distanza l_infinito doppio Distanza l-infinito per la deriva nella distribuzione.
js_distance doppio Distanza di Jensen-Shannon per la deriva nella distribuzione. Calcolato solo per le colonne categorica.
distanza di Wasserstein doppio Deriva tra due distribuzioni numeriche usando la metrica della distanza Brustein.
indice di stabilità della popolazione doppio 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.