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 poroutput_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 <= 10
y 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
yprediction_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
yInferenceLog
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
, recall
y 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.