Compartir a través de


Supervisión de tablas de métricas

En esta página se describen las tablas de métricas creadas por Databricks Lakehouse Monitoring. Para obtener información sobre el panel creado por un monitor, consulte Uso del panel de SQL generado .

Cuando un monitor se ejecuta en una tabla de Databricks, crea o actualiza dos tablas de métricas: una tabla de métricas de perfil y una tabla de métricas de desfase.

  • La tabla de métricas de perfil contiene estadísticas de resumen para cada columna y para cada combinación de columnas de período de tiempo, segmento y agrupación. Para el InferenceLog análisis, la tabla de análisis también contiene métricas de precisión del modelo.
  • La tabla de métricas de desfase contiene estadísticas que realizan un seguimiento de los cambios en la distribución de una métrica. Las tablas de desfase se pueden usar para visualizar o alertar sobre los cambios en los datos en lugar de valores específicos. Se calculan los siguientes tipos de desfase:
    • El desfase consecutivo compara una ventana con la ventana de tiempo anterior. El desfase consecutivo solo se calcula si existe un período de tiempo consecutivo después de la agregación según las granularidades especificadas.
    • El desfase de línea base compara una ventana con la distribución de línea base determinada por la tabla de línea base. El desfase de línea base solo se calcula si se proporciona una tabla de línea base.

Dónde se encuentran las tablas de métricas

Las tablas de métricas de supervisión se guardan en {output_schema}.{table_name}_profile_metrics y {output_schema}.{table_name}_drift_metrics, donde:

  • {output_schema} es el catálogo y el esquema especificados por output_schema_name.
  • {table_name} es el nombre de la tabla que se está supervisando.

Cómo se calculan las estadísticas de supervisión

Cada estadística y métrica de las tablas de métricas se calcula para un intervalo de tiempo especificado (denominado "ventana"). En Snapshot el caso del análisis, el período de tiempo es un único punto en el tiempo correspondiente al momento en que se actualizó la métrica. Para TimeSeries y InferenceLog el análisis, el período de tiempo se basa en las granularidades especificadas en create_monitor y los valores del timestamp_col especificado en el profile_type argumento.

Las métricas siempre se calculan para toda la tabla. Además, si proporciona una expresión de segmentación, las métricas se calculan para cada segmento de datos definido por un valor de la expresión.

Por ejemplo:

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

genera los segmentos siguientes: uno para col_2 > 10, uno para col_2 <= 10y otro para cada valor único de col1.

Los segmentos se identifican en las tablas de métricas por los nombres de columna slice_key y slice_value. En este ejemplo, una clave de segmento sería "col_2 > 10" y los valores correspondientes serían "true" y "false". Toda la tabla es equivalente a slice_key = NULL y slice_value = NULL. Los segmentos se definen mediante una sola clave de segmento.

Las métricas se calculan para todos los grupos posibles definidos por las ventanas de tiempo y las claves y los valores de segmento. Además, para InferenceLog el análisis, las métricas se calculan para cada identificador de modelo. Para más información, consulte Esquemas de columna para tablas generadas.

Estadísticas adicionales para la supervisión de precisión del modelo (InferenceLog solo análisis)

Se calculan estadísticas adicionales para InferenceLog el análisis.

  • La calidad del modelo se calcula si se proporcionan label_col y prediction_col.
  • Los segmentos se crean automáticamente en función de los distintos valores de model_id_col.
  • Para los modelos de clasificación, las estadísticas de equidad y sesgo se calculan para segmentos que tienen un valor booleano.

Tablas de métricas de desfase y análisis de consultas

Puede consultar las tablas de métricas directamente. El ejemplo siguiente se basa en el InferenceLog análisis:

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

Esquemas de columna para tablas generadas

Para cada columna de la tabla principal, las tablas de métricas contienen una fila para cada combinación de columnas de agrupación. La columna asociada a cada fila se muestra en la columna column_name.

En el caso de las métricas basadas en más de una columna, como las métricas de precisión del modelo, column_name se establece en :table.

Para las métricas de perfil, se usan las siguientes columnas de agrupación:

  • período de tiempo
  • granularidad (TimeSeries y InferenceLog solo análisis)
  • tipo de registro: tabla de entrada o tabla de línea base
  • clave y valor de segmento
  • id. de modelo (InferenceLog solo análisis)

En el caso de las métricas de desfase, se usan las siguientes columnas de agrupación adicionales:

  • período de tiempo de comparación
  • tipo de desfase (comparación con la ventana anterior o la comparación con la tabla de línea base)

A continuación se muestran los esquemas de las tablas de métricas y también se muestran en la documentación de referencia de Databricks Lakehouse Monitoring API.

Esquema de la tabla de métricas de perfil

En la tabla siguiente se muestra el esquema de la tabla de métricas de perfil. Cuando una métrica no es aplicable a una fila, la celda correspondiente es null.

Nombre de la columna Tipo Descripción
Agrupación de columnas
periodo Estructura. Vea [1] a continuación. Período de tiempo.
granularidad cadena Duración de la ventana, establecida por granularities parámetro. [2]
model_id_col cadena Opcional. Solo se usa para InferenceLog el tipo de análisis.
log_type cadena Tabla que se usa para calcular métricas. LÍNEA BASE o ENTRADA.
slice_key cadena Expresión de segmento. NULL para el valor predeterminado, que es todos los datos.
slice_value cadena Valor de la expresión de segmentación.
column_name cadena Nombre de columna en la tabla principal. :table es un nombre especial para las métricas que se aplican a toda la tabla, como la precisión del modelo.
data_type cadena Tipo de datos de Spark de column_name.
logging_table_commit_version int Ignore.
monitor_version bigint Versión de la configuración del monitor usada para calcular las métricas de la fila. Consulte [3] a continuación para obtener más información.
Columnas de métricas: estadísticas de resumen
count bigint Número de valores no NULL.
num_nulls bigint Número de valores NULL en column_name.
avg doble Media aritmética de la columna, ignorando nulls.
Cuantiles array<double> Matriz de 1000 cuantiles. Consulte [4] a continuación.
distinct_count bigint Número de valores distintos en column_name.
Min doble El valor mínimo es column_name.
max doble El valor máximo es column_name.
stddev doble Desviación estándar de column_name.
num_zeros bigint Número de ceros en column_name.
num_nan bigint Número de valores NaN en column_name.
min_size doble Tamaño mínimo de matrices o estructuras en column_name.
max_size doble Tamaño máximo de matrices o estructuras en column_name.
avg_size doble Tamaño promedio de matrices o estructuras en column_name.
min_len doble Longitud mínima de valores binarios y de cadena en column_name.
max_len doble Longitud máxima de valores binarios y de cadena en column_name.
avg_len doble Longitud promedio de valores binarios y de cadena en column_name.
frequent_items Estructura. Vea [1] a continuación. Los 100 elementos más frecuentes.
non_null_columns array<string> Lista de columnas con al menos un valor distinto de NULL.
mediana doble Valor medio de column_name.
percent_null doble Porcentaje de valores NULL en column_name.
percent_zeros doble Porcentaje de valores que son cero en column_name.
percent_distinct doble Porcentaje de valores que son distintos en column_name.
Columnas de métricas: precisión del modelo de clasificación [5]
accuracy_score doble Precisión del modelo, calculada como (número de predicciones correctas/número total de predicciones), ignorando los valores NULL.
confusion_matrix Estructura. Vea [1] a continuación.
precision Estructura. Vea [1] a continuación.
recuperación Estructura. Vea [1] a continuación.
f1_score Estructura. Vea [1] a continuación.
Columnas de métricas: precisión del modelo de regresión [5]
mean_squared_error doble Error cuadrático medio entre prediction_col y label_col.
root_mean_squared_error doble Error cuadrático medio raíz entre prediction_col y label_col.
mean_average_error doble Promedio medio de error entre prediction_col y label_col.
mean_absolute_percentage_error doble Error de porcentaje de desviación media entre prediction_col ylabel_col.
r2_score doble Puntuación de R cuadrado entre prediction_col y label_col.
Columnas de métricas: equidad y sesgo [6]
predictive_parity doble Mide si los dos grupos tienen la misma precisión en todas las clases previstas. label_col es obligatorio.
predictive_equality doble Mide si los dos grupos tienen una tasa de falsos positivos igual en todas las clases previstas. label_col es obligatorio.
equal_opportunity doble Mide si los dos grupos tienen una coincidencia igual en todas las clases previstas. label_col es obligatorio.
statistical_parity doble Mide si los dos grupos tienen una tasa de aceptación igual. La tasa de aceptación aquí se define como la probabilidad empírica de predecirse como una clase determinada, en todas las clases predichas.

[1] Formato de estructura para confusion_matrix, precision, recally f1_score:

Nombre de la columna Tipo
periodo struct<start: timestamp, end: timestamp>
frequent_items array<struct<item: string, count: bigint>>
confusion_matrix struct<prediction: string, label: string, count: bigint>
precision struct<one_vs_all: map<string,double>, macro: double, weighted: double>
recuperación 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] En el caso de los perfiles de serie temporal o de inferencia, el monitor examina 30 días a partir del momento en que se crea el monitor. Debido a este corte, el primer análisis podría incluir una ventana parcial. Por ejemplo, el límite de 30 días podría caer a mitad de una semana o mes, en cuyo caso la semana completa o el mes no se incluye en el cálculo. Este problema afecta solo a la primera ventana.

[3] La versión que se muestra en esta columna es la versión que se usó para calcular las estadísticas de la fila y podría no ser la versión actual del monitor. Cada vez que actualice las métricas, el monitor intenta volver a calcular las métricas calculadas anteriormente mediante la configuración del monitor actual. La versión actual del monitor aparece en la información de supervisión devuelta por la API y el cliente de Python.

[4] Código de ejemplo para recuperar el percentil 50: SELECT element_at(quantiles, int((size(quantiles)+1)/2)) AS p50 ... o SELECT quantiles[500] ... .

[5] Solo se muestra si el monitor tiene InferenceLog tipo de análisis y se proporcionan label_col y prediction_col.

[6] Solo se muestra si el monitor tiene InferenceLog tipo de análisis y problem_type es classification.

Esquema de tabla de métricas de desfase

En la tabla siguiente se muestra el esquema de la tabla de métricas de desfase. La tabla de desfase solo se genera si se proporciona una tabla de línea base o si existe un período de tiempo consecutivo después de la agregación según las granularidades especificadas.

Nombre de la columna Tipo Descripción
Agrupación de columnas
periodo struct<start: timestamp, end: timestamp> Período de tiempo.
window_cmp struct<start: timestamp, end: timestamp> Ventana de comparación de drift_type CONSECUTIVE.
drift_type cadena LÍNEA BASE o CONSECUTIVA. Si las métricas de desfase se comparan con la ventana de tiempo anterior o con la tabla de línea base.
granularidad cadena Duración de la ventana, establecida por granularities parámetro. [7]
model_id_col cadena Opcional. Solo se usa para InferenceLog el tipo de análisis.
slice_key cadena Expresión de segmento. NULL para el valor predeterminado, que es todos los datos.
slice_value cadena Valor de la expresión de segmentación.
column_name cadena Nombre de columna en la tabla principal. :table es un nombre especial para las métricas que se aplican a toda la tabla, como la precisión del modelo.
data_type cadena Tipo de datos de Spark de column_name.
monitor_version bigint Versión de la configuración del monitor usada para calcular las métricas de la fila. Consulte [8] a continuación para más información.
Columnas de métricas: desfase Las diferencias se calculan como ventana actual: ventana de comparación.
count_delta doble Diferencia en count.
avg_delta doble Diferencia en avg.
percent_null_delta doble Diferencia en percent_null.
percent_zeros_delta doble Diferencia en percent_zeros.
percent_distinct_delta doble Diferencia en percent_distinct.
non_null_columns_delta struct<added: int, missing: int> Número de columnas con cualquier aumento o disminución en valores no NULL.
chi_squared_test struct<statistic: double, pvalue: double> Prueba chi cuadrado para el desfase en la distribución.
ks_test struct<statistic: double, pvalue: double> Prueba de KS para el desfase en la distribución. Se calcula solo para columnas numéricas.
tv_distance doble Distancia de variación total para el desfase en la distribución.
l_infinity_distance doble Distancia de L-infinito para el desfase en la distribución.
js_distance doble Distancia de Shen-Shannon para el desfase en la distribución. Se calcula solo para columnas de categorías.
wasserstein_distance doble Desfase entre dos distribuciones numéricas mediante la métrica de distancia Wasserstein.
population_stability_index doble Métrica para comparar el desfase entre dos distribuciones numéricas mediante la métrica de índice de estabilidad de población. Consulte [9] a continuación para más información.

[7] En el caso de los perfiles de serie temporal o de inferencia, el monitor examina 30 días a partir del momento en que se crea el monitor. Debido a este corte, el primer análisis podría incluir una ventana parcial. Por ejemplo, el límite de 30 días podría caer a mitad de una semana o mes, en cuyo caso la semana completa o el mes no se incluye en el cálculo. Este problema afecta solo a la primera ventana.

[8] La versión que se muestra en esta columna es la versión que se usó para calcular las estadísticas de la fila y podría no ser la versión actual del monitor. Cada vez que actualice las métricas, el monitor intenta volver a calcular las métricas calculadas anteriormente mediante la configuración del monitor actual. La versión actual del monitor aparece en la información de supervisión devuelta por la API y el cliente de Python.

[9] La salida del índice de estabilidad de población es un valor numérico que representa la diferencia entre dos distribuciones. El intervalo es [0, inf). PSI < 0.1 significa que no hay ningún cambio significativo en la población. PSI < 0.2 indica un cambio moderado de población. PSI >= 0,2 indica un cambio significativo en la población.