Partager via


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 par output_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 <= 10et 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_colet prediction_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 et InferenceLog 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, recallet 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.