Surveiller les tables de métriques
Cette page décrit les tables de métriques créées par Databricks Lakehouse Monitoring. Pour plus d’informations sur le tableau de bord créé par un moniteur, consultez Utiliser le tableau de bord SQL généré.
Lorsqu’un moniteur s’exécute sur une table Databricks, il crée ou met à jour deux tables de métriques : une table de métriques de profil et une table de métriques de dérive.
- La table des métriques de profil contient des statistiques récapitulatives pour chaque colonne et pour chaque combinaison de colonnes de fenêtre de temps, de tranche et de regroupement. Pour
InferenceLog
l’analyse, la table d’analyse contient également des métriques de précision du modèle. - La table des métriques de dérive contient des statistiques qui suivent les changements dans la distribution d’une métrique. Les tables de dérive peuvent être utilisées pour visualiser ou alerter sur les modifications apportées aux données au lieu de valeurs spécifiques. Les types de dérive suivants sont calculés :
- La dérive consécutive compare une fenêtre à la fenêtre de temps précédente. La dérive consécutive est calculée uniquement si une fenêtre de temps consécutive existe après l’agrégation en fonction des granularités spécifiées.
- La dérive de base compare une fenêtre à la distribution de base déterminée par la table de référence. La dérive de base est calculée uniquement si une table de référence est fournie.
Emplacement des tables de métriques
Les tables de métriques moniteur sont enregistrées dans {output_schema}.{table_name}_profile_metrics
et {output_schema}.{table_name}_drift_metrics
, où :
{output_schema}
est le catalogue et le schéma spécifiés paroutput_schema_name
.{table_name}
est le nom de la table surveillée.
Comment les statistiques de supervision sont calculées
Chaque statistique et métrique dans les tables de métriques est calculée pour un intervalle de temps spécifié (appelé « fenêtre »). Pour l’analyse Snapshot
, la fenêtre de temps est un seul point dans le temps correspondant à l’heure à laquelle la métrique a été actualisée. Pour l’analyse TimeSeries
et InferenceLog
, la fenêtre de temps est basée sur les granularités spécifiées dans create_monitor
et les valeurs dans le timestamp_col
spécifié dans l’argument profile_type
.
Les métriques sont toujours calculées pour l’ensemble de la table. En outre, si vous fournissez une expression de découpage, les métriques sont calculées pour chaque tranche de données définie par une valeur de l’expression.
Par exemple :
slicing_exprs=["col_1", "col_2 > 10"]
génère les tranches suivantes : une pour col_2 > 10
, une pour col_2 <= 10
et une pour chaque valeur unique dans col1
.
Les tranches sont identifiées dans les tables de métriques par les noms de colonnes slice_key
et slice_value
. Dans cet exemple, une clé de tranche est « col_2 > 10 » et les valeurs correspondantes sont « true » et « false ». La table entière équivaut à slice_key
= NULL et slice_value
= NULL. Les tranches sont définies par une seule clé de segment.
Les métriques sont calculées pour tous les groupes possibles définis par les fenêtres de temps et les clés et valeurs de segment. En outre, pour l’analyse InferenceLog
, les métriques sont calculées pour chaque ID de modèle. Pour plus d’informations, consultez Schémas de colonne pour les tables générées.
Statistiques supplémentaires pour la surveillance de la précision du modèle (InferenceLog
analyse uniquement)
Des statistiques supplémentaires sont calculées à des fins d’analyse InferenceLog
.
- La qualité du modèle est calculée si
label_col
etprediction_col
sont fournis. - Les tranches sont créées automatiquement en fonction des valeurs distinctes de
model_id_col
. - Pour les modèles de classification, les statistiques d’impartialité et de biais sont calculées pour les tranches qui ont une valeur booléenne.
Tables d’analyse des requêtes et de métriques de dérive
Vous pouvez interroger les tables de métriques directement. L’exemple suivant est basé sur l’analyse 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
Schémas de colonnes pour les tables générées
Pour chaque colonne de la table primaire, les tables de métriques contiennent une ligne pour chaque combinaison de colonnes de regroupement. La colonne associée à chaque ligne s’affiche dans la colonne column_name
.
Pour les métriques basées sur plusieurs colonnes, telles que les métriques de précision du modèle, column_name
est défini sur :table
.
Pour les métriques de profil, les colonnes de regroupement suivantes sont utilisées :
- fenêtre de temps
- granularité (
TimeSeries
etInferenceLog
analyse uniquement) - type de journal : table d’entrée ou table de référence
- clé et valeur de segment
- id de modèle (
InferenceLog
analyse uniquement)
Pour les métriques de dérive, les colonnes de regroupement supplémentaires suivantes sont utilisées :
- fenêtre de temps de comparaison
- type de dérive (comparaison à la fenêtre précédente ou comparaison à la table de base)
Les schémas des tables de métriques sont présentés ci-dessous et figurent également dans la documentation de référence de l’API Databricks Lakehouse Monitoring.
Schéma de table de métriques de profil
Le tableau suivant montre le schéma de la table des métriques de profil. Lorsqu’une métrique n’est pas applicable à une ligne, la cellule correspondante a la valeur Null.
Nom de la colonne | Type | Description |
---|---|---|
Regroupement de colonnes | ||
window | Struct. Voir [1] ci-dessous. | Fenêtre de temps. |
granularité | string | Durée de la fenêtre, définie par le paramètre granularities . [2] |
model_id_col | string | facultatif. Utilisé uniquement pour le InferenceLog type d’analyse. |
log_type | string | Table utilisée pour calculer les métriques. LIGNE DE BASE ou ENTRÉE. |
slice_key | string | Expression de segment. NULL pour la valeur par défaut, c’est-à-dire toutes les données. |
slice_value | string | Valeur de l’expression de découpage. |
column_name | string | Nom de la colonne dans la table primaire. :table est un nom spécial pour les métriques qui s’appliquent à l’ensemble de la table, telles que la précision du modèle. |
data_type | string | Type de données Spark de column_name . |
logging_table_commit_version | int | Ignorer. |
monitor_version | bigint | Version de la configuration du moniteur utilisée pour calculer les métriques dans la ligne. Pour plus d’informations, consultez [3] ci-dessous. |
Colonnes de métriques - statistiques récapitulatives | ||
count | bigint | Nombre de valeurs non null. |
num_nulls | bigint | Nombre de valeurs Null dans column_name . |
avg | double | Moyenne arithmétique de la colonne, ingoring null. |
Quantiles | array<double> |
Tableau de 1 000 quantiles. Voir [4] ci-dessous. |
distinct_count | bigint | Nombre de valeurs distinctes dans column_name |
min | double | La valeur minimale est column_name . |
max | double | La valeur maximale est column_name . |
stddev | double | Écart type de column_name . |
num_zeros | bigint | Nombre de zéros dans column_name . |
num_nan | bigint | Nombre de valeurs NaN dans column_name . |
min_size | double | Taille minimale des tableaux ou structures dans column_name . |
max_size | double | Taille maximale des tableaux ou structures dans column_name . |
avg_size | double | Taille moyenne des tableaux ou structures dans column_name . |
min_len | double | Longueur minimale des valeurs de chaîne et binaires dans column_name . |
max_len | double | Longueur maximale des chaînes de caractères et des valeurs binaires en column_name . |
avg_len | double | Longueur moyenne des chaînes de caractères et des valeurs binaires en column_name . |
frequent_items | Struct. Voir [1] ci-dessous. | Top 100 des éléments les plus fréquemment présents. |
non_null_columns | array<string> |
Liste de colonnes avec au moins une valeur non null. |
médiane | double | Valeur médiane de column_name . |
percent_null | double | Pourcentage de valeurs Null dans column_name . |
percent_zeros | double | Pourcentage de valeurs qui sont nulles dans column_name . |
percent_distinct | double | Pourcentage de valeurs distinctes dans column_name . |
Colonnes de métriques : précision du modèle de classification [5] | ||
accuracy_score | double | Précision du modèle, calculée en tant que (nombre de prédictions correctes / nombre total de prédictions), en ignorant les valeurs null. |
confusion_matrix | Struct. Voir [1] ci-dessous. | |
precision | Struct. Voir [1] ci-dessous. | |
Rappeler | Struct. Voir [1] ci-dessous. | |
f1_score | Struct. Voir [1] ci-dessous. | |
Colonnes de métriques : précision du modèle de régression [5] | ||
mean_squared_error | double | Erreur quadratique moyenne entre prediction_col et label_col . |
root_mean_squared_error | double | Erreur quadratique moyenne racine entre prediction_col et label_col . |
mean_average_error | double | Erreur moyenne moyenne entre prediction_col et label_col . |
mean_absolute_percentage_error | double | Erreur en pourcentage absolu moyen entre prediction_col et label_col . |
r2_score | double | Score au carré R entre prediction_col et label_col . |
Colonnes de métriques : impartialité et biais [6] | ||
predictive_parity | double | Mesure si les deux groupes ont une précision égale pour toutes les classes prédites. label_col est obligatoire. |
predictive_equality | double | Mesure si les deux groupes ont un taux de faux positifs égal à toutes les classes prédites. label_col est obligatoire. |
equal_opportunity | double | Mesure si les deux groupes ont un rappel égal dans toutes les classes prédites. label_col est obligatoire. |
statistical_parity | double | Mesure si les deux groupes ont un taux d’acceptation égal. Ici, le taux d’acceptation est défini comme la probabilité empirique d’être prédit comme une certaine classe, dans toutes les classes prédites. |
[1] Format de struct pour confusion_matrix
, precision
, recall
et f1_score
:
Nom de la colonne | Type |
---|---|
window | 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> |
Rappeler | 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] Pour une série chronologique ou des profils d’inférence, le moniteur regarde 30 jours en arrière à partir de sa date de création. En raison de ce seuil, la première analyse peut inclure une fenêtre partielle. Par exemple, la limite de 30 jours peut tomber au milieu d’une semaine ou d’un mois, auquel cas la semaine ou le mois complet n’est pas inclus dans le calcul. Ce problème affecte uniquement la première fenêtre.
[3] La version indiquée dans cette colonne est la version qui a été utilisée pour calculer les statistiques dans la ligne et peut ne pas être la version actuelle du moniteur. Chaque fois que vous actualisez les métriques, le moniteur tente de recalculer les métriques précédemment calculées à l’aide de la configuration actuelle du moniteur. La version actuelle du moniteur apparaît dans les informations du moniteur retournées par l’API et le client Python.
[4] Exemple de code pour récupérer le 50e centile : SELECT element_at(quantiles, int((size(quantiles)+1)/2)) AS p50 ...
ou SELECT quantiles[500] ...
.
[5] Affiché uniquement si le moniteur a le type d’analyse InferenceLog
et que label_col
et prediction_col
sont fournis.
[6] Affiché uniquement si le moniteur a le type d’analyse InferenceLog
et que problem_type
a la valeur classification
.
Schéma de table de métriques de dérive
Le tableau suivant montre le schéma de la table des métriques de dérive. La table de dérive est générée uniquement si une table de référence est fournie ou si une fenêtre de temps consécutive existe après l’agrégation en fonction des granularités spécifiées.
Nom de la colonne | Type | Description |
---|---|---|
Regroupement de colonnes | ||
window | struct<start: timestamp, end: timestamp> |
Fenêtre de temps. |
window_cmp | struct<start: timestamp, end: timestamp> |
Fenêtre de comparaison pour drift_type CONSECUTIVE . |
drift_type | string | LIGNE DE BASE ou CONSÉCUTIVE. Si les métriques de dérive sont comparées à la fenêtre de temps précédente ou à la table de référence. |
granularité | string | Durée de la fenêtre, définie par le paramètre granularities . [7] |
model_id_col | string | facultatif. Utilisé uniquement pour le InferenceLog type d’analyse. |
slice_key | string | Expression de segment. NULL pour la valeur par défaut, c’est-à-dire toutes les données. |
slice_value | string | Valeur de l’expression de découpage. |
column_name | string | Nom de la colonne dans la table primaire. :table est un nom spécial pour les métriques qui s’appliquent à l’ensemble de la table, telles que la précision du modèle. |
data_type | string | Type de données Spark de column_name . |
monitor_version | bigint | Version de la configuration du moniteur utilisée pour calculer les métriques dans la ligne. Pour plus d’informations, consultez [8] ci-dessous. |
Colonnes de métriques - dérive | Les différences sont calculées en tant que fenêtre actuelle - fenêtre de comparaison. | |
count_delta | double | Différence en count . |
avg_delta | double | Différence en avg . |
percent_null_delta | double | Différence en percent_null . |
percent_zeros_delta | double | Différence en percent_zeros . |
percent_distinct_delta | double | Différence en percent_distinct . |
non_null_columns_delta | struct<added: int, missing: int> |
Nombre de colonnes avec une augmentation ou une diminution de valeurs non null. |
chi_squared_test | struct<statistic: double, pvalue: double> |
Test chi-carré pour la dérive dans la distribution. |
ks_test | struct<statistic: double, pvalue: double> |
Test KS pour la dérive dans la distribution. Calculé pour les colonnes numériques uniquement. |
tv_distance | double | Distance de variation totale pour la dérive dans la distribution. |
l_infinity_distance | double | Distance L-infini pour la dérive dans la distribution. |
js_distance | double | Distance de variation totale pour la dérive dans la distribution. Calculé pour les colonnes catégorielles uniquement. |
wasserstein_distance | double | Dérive entre deux distributions numériques à l’aide de la métrique de distance de Wasserstein. |
population_stability_index | double | Métrique pour comparer la dérive entre deux distributions numériques à l’aide de la métrique d’index de stabilité de la population. Pour plus d’informations, consultez [9] ci-dessous. |
[7] Pour une série chronologique ou des profils d’inférence, le moniteur regarde 30 jours en arrière à partir de sa date de création. En raison de ce seuil, la première analyse peut inclure une fenêtre partielle. Par exemple, la limite de 30 jours peut tomber au milieu d’une semaine ou d’un mois, auquel cas la semaine ou le mois complet n’est pas inclus dans le calcul. Ce problème affecte uniquement la première fenêtre.
[8] La version indiquée dans cette colonne est la version qui a été utilisée pour calculer les statistiques dans la ligne et peut ne pas être la version actuelle du moniteur. Chaque fois que vous actualisez les métriques, le moniteur tente de recalculer les métriques précédemment calculées à l’aide de la configuration actuelle du moniteur. La version actuelle du moniteur apparaît dans les informations du moniteur retournées par l’API et le client Python.
[9] La sortie de l’index de stabilité de la population est une valeur numérique qui représente la différence entre deux distributions. La plage est [0, inf). PSI < 0.1 signifie qu’il n’y a pas de changement significatif de population. PSI < 0.2 indique un changement modéré de la population. PSI >= 0,2 indique un changement significatif de population.