Aller au contenu principal

Tables de métriques de profilage des données

Cette page décrit les tables de métriques créées par le profilage des données. Pour plus d'informations sur le tableau de bord créé par un profil, consultez le tableau de bord de profilage des données.

Lorsqu’un profil est exécuté sur une table Databricks, il crée ou met à jour deux tables de métriques : une table des métriques de profil et une table des métriques de drift.

  • La table des métriques de profil contient des statistiques récapitulatives pour chaque colonne et pour chaque combinaison de fenêtre temporelle, de tranche et de colonnes de regroupement. Pour l'InferenceLog analyse, la table d'analyse contient également les métriques de précision du modèle.
  • La table des métriques de drift contient des statistiques qui suivent les changements de distribution pour une métrique. Les tables de drift peuvent être utilisées pour visualiser les modifications des données ou alerter sur celles-ci, au lieu de valeurs spécifiques. Les types de drift suivants sont calculés :
    • La dérive (drift) consécutive compare une fenêtre à la fenêtre de temps précédente. La dérive (drift) consécutive n'est calculée que si une fenêtre temporelle consécutive existe après agrégation selon les granularités spécifiées.
    • Le drift de référence compare une fenêtre à la distribution de référence déterminée par la table de référence. Le drift de référence n'est calculé que si une table de référence est fournie.

Où se trouvent les tables de métriques

Les tables de métriques 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 en cours de profilage.

Comment les statistiques de profilage sont calculées

Chaque statistique et métrique des tables de métriques est calculée pour un intervalle de temps spécifié (appelé une « fenêtre »). Pour l'analyse Snapshot, la fenêtre temporelle est un seul point dans le temps correspondant au moment où la métrique a été actualisée. Pour l'analyse TimeSeries et InferenceLog, la fenêtre temporelle est basée sur les granularités spécifiées dans create_monitor et les valeurs de timestamp_col spécifiées dans l'argument profile_type.

Les indicateurs sont toujours calculés pour l'ensemble de la table. De plus, 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 de col1.

Les tranches sont identifiées dans les tables de métriques par les noms des colonnes slice_key et slice_value. Dans cet exemple, une clé de tranche serait « col_2 > 10 » et les valeurs correspondantes seraient « 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 tranche.

Les métriques sont calculées pour tous les groupes possibles définis par les fenêtres temporelles, ainsi que les clés et valeurs de tranche. De plus, pour l'analyse InferenceLog, les métriques sont calculées pour chaque ID de modèle. Pour plus de détails, voir Schémas de colonne pour les tables générées.

Statistiques supplémentaires pour la précision du modèle (InferenceLog analyse uniquement)

Des statistiques supplémentaires sont calculées pour l'analyse InferenceLog.

  • La qualité du modèle est calculée si label_col et prediction_col sont fournis.
  • Les tranches sont automatiquement créées en fonction des valeurs distinctes de model_id_col.
  • Pour les modèles de classification, les statistiques d'équité et de biais sont calculées pour les tranches qui ont une valeur booléenne.

Tables des métriques de query, d'analyse et de drift

Vous pouvez interroger directement les tables de métriques. L'exemple suivant est basé sur l'analyse InferenceLog :

SQL
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 colonne pour les tables générées

Pour chaque colonne de la table principale, les tables de métriques contiennent une ligne pour chaque combinaison de colonnes de regroupement. La colonne associée à chaque ligne est affichée dans la colonne column_name.

Pour les métriques basées sur plusieurs colonnes, telles que les métriques de précision de 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 temporelle
  • granularité (analyse TimeSeries et InferenceLog uniquement)
  • type de log - table d'entrée ou table de base
  • clé et valeur de segment
  • ID du modèle (InferenceLog analyse uniquement)

Pour les métriques de drift, les colonnes de regroupement supplémentaires suivantes sont utilisées :

  • fenêtre de comparaison temporelle
  • type de drift (comparaison à la fenêtre précédente ou à la table de référence)

Les schémas des tables de métriques sont présentés ci-dessous et sont également présentés dans la documentation de référence de l'API de profilage des données.

Schéma de la table des métriques de profil

Le tableau suivant présente le schéma de la table des métriques de profil. Lorsqu'une métrique n'est pas applicable à une ligne, la cellule correspondante est null.

Nom de colonne

Type

Description

Colonnes de regroupement

fenêtre

Structure. Voir [1] ci-dessous.

Fenêtre de temps.

granularité

chaîne

Durée de la fenêtre, définie par le paramètre granularities. [2]

model_id_col

chaîne

Facultatif. Utilisé uniquement pour le type d’analyse InferenceLog.

Type de journal

chaîne

Table utilisée pour calculer les métriques. BASELINE ou INPUT.

slice_key

chaîne

Expression de découpage. NULL for default, which is all data.

slice_value

chaîne

Valeur de l'expression de découpage.

column_name

chaîne

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.

type de données

chaîne

Type de données Spark de column_name.

logging_table_commit_version

int

Ignorer.

monitor_version

bigint

Version de la configuration du profil utilisée pour calculer les métriques de la ligne. Voir [3] ci-dessous pour plus de détails.

Colonnes de métriques – statistiques de synthèse

Décompte

bigint

Nombre de valeurs non nulles.

Nombre de valeurs nulles

bigint

Nombre de valeurs nulles dans column_name.

moy.

double

Moyenne arithmétique de la colonne, en ignorant les valeurs nulles.

quantiles

array<double>

Tableau de 1000 quantiles. Voir [4] ci-dessous.

distinct_count

bigint

Nombre approximatif de valeurs distinctes dans column_name. Cela utilise la fonction approx_count_distinct, de sorte que le résultat peut ne pas être exact.

min

double

Valeur minimale dans column_name.

max

double

Valeur maximale dans 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 des structures dans column_name.

max_size

double

Taille maximale des tableaux ou des structures dans column_name.

avg_size

double

Taille moyenne des tableaux ou des 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 valeurs de chaîne et binaires dans column_name.

avg_len

double

Longueur moyenne des valeurs de chaîne et binaires dans column_name.

éléments fréquents

Structure. Voir [1] ci-dessous.

Les 100 éléments les plus fréquents.

non_null_columns

array<string>

Liste des colonnes avec au moins une valeur non nulle.

médiane

double

Valeur médiane de column_name.

percent_null

double

Pourcentage de valeurs nulles dans column_name.

percent_zeros

double

Pourcentage des valeurs 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 comme suit :

Équation de précision.

Les valeurs nulles sont ignorées.

log_loss

double

Perte de log pour les problèmes de classification, calculée comme suit :

Équation de perte de log.

prediction_proba_col est requis. Les prédictions ou étiquettes NULL sont ignorées.

roc_auc_score

Structure. Voir [1] ci-dessous.

Score ROC AUC pour la classification binaire et multi-classe. Nécessite prediction_proba_col. Renvoie des scores pondérés un contre un et avec moyenne macro. Les étiquettes ou prédictions nulles sont ignorées.

confusion_matrix

Structure. Voir [1] ci-dessous.

Précision

Structure. Voir [1] ci-dessous.

rappel

Structure. Voir [1] ci-dessous.

f1_score

Structure. 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.

erreur quadratique moyenne

double

Erreur quadratique moyenne entre prediction_col et label_col.

erreur_moyenne_absolue

double

Erreur moyenne entre prediction_col et label_col.

erreur_pourcentage_absolue_moyenne

double

Erreur de pourcentage absolue moyenne entre prediction_col et label_col.

r2_score

double

Score R-carré entre prediction_col et label_col.

Colonnes de métriques – équité et biais [6]

parité_prédictive

double

Mesure si les deux groupes ont une précision égale sur toutes les classes prédites. label_col est requis.

predictive_equality

double

Mesure si les deux groupes ont un taux de faux positifs égal pour toutes les classes prédites. label_col est requis.

égalité des chances

double

Mesure si les deux groupes ont un rappel égal sur toutes les classes prédites. label_col est requis.

parité statistique

double

Mesure si les deux groupes ont un taux d'acceptation égal. Le taux d'acceptation est ici défini comme la probabilité empirique d'être prédit comme une certaine classe, parmi toutes les classes prédites.

Nom de colonne

Type

Description

Colonnes de regroupement

fenêtre

Structure. Voir [1] ci-dessous.

Fenêtre de temps.

granularité

chaîne

Durée de la fenêtre, définie par le paramètre granularities. [2]

model_id_col

chaîne

Facultatif. Utilisé uniquement pour le type d’analyse InferenceLog.

Type de journal

chaîne

Table utilisée pour calculer les métriques. BASELINE ou INPUT.

slice_key

chaîne

Expression de découpage. NULL for default, which is all data.

slice_value

chaîne

Valeur de l'expression de découpage.

column_name

chaîne

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.

type de données

chaîne

Type de données Spark de column_name.

logging_table_commit_version

int

Ignorer.

monitor_version

bigint

Version de la configuration du profil utilisée pour calculer les métriques de la ligne. Voir [3] ci-dessous pour plus de détails.

Colonnes de métriques – statistiques de synthèse

Décompte

bigint

Nombre de valeurs non nulles.

Nombre de valeurs nulles

bigint

Nombre de valeurs nulles dans column_name.

moy.

double

Moyenne arithmétique de la colonne, en ignorant les valeurs nulles.

quantiles

array<double>

Tableau de 1000 quantiles. Voir [4] ci-dessous.

distinct_count

bigint

Nombre approximatif de valeurs distinctes dans column_name. Cela utilise la fonction approx_count_distinct, de sorte que le résultat peut ne pas être exact.

min

double

Valeur minimale dans column_name.

max

double

Valeur maximale dans 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 des structures dans column_name.

max_size

double

Taille maximale des tableaux ou des structures dans column_name.

avg_size

double

Taille moyenne des tableaux ou des 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 valeurs de chaîne et binaires dans column_name.

avg_len

double

Longueur moyenne des valeurs de chaîne et binaires dans column_name.

éléments fréquents

Structure. Voir [1] ci-dessous.

Les 100 éléments les plus fréquents.

non_null_columns

array<string>

Liste des colonnes avec au moins une valeur non nulle.

médiane

double

Valeur médiane de column_name.

percent_null

double

Pourcentage de valeurs nulles dans column_name.

percent_zeros

double

Pourcentage des valeurs 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 comme suit :

Équation de précision.

Les valeurs nulles sont ignorées.

log_loss

double

Perte de log pour les problèmes de classification, calculée comme suit :

Équation de perte de log.

prediction_proba_col est requis. Les prédictions ou étiquettes NULL sont ignorées.

roc_auc_score

Structure. Voir [1] ci-dessous.

Score ROC AUC pour la classification binaire et multi-classe. Nécessite prediction_proba_col. Renvoie des scores pondérés un contre un et avec moyenne macro. Les étiquettes ou prédictions nulles sont ignorées.

confusion_matrix

Structure. Voir [1] ci-dessous.

Précision

Structure. Voir [1] ci-dessous.

rappel

Structure. Voir [1] ci-dessous.

f1_score

Structure. 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.

erreur quadratique moyenne

double

Erreur quadratique moyenne entre prediction_col et label_col.

erreur_moyenne_absolue

double

Erreur moyenne entre prediction_col et label_col.

erreur_pourcentage_absolue_moyenne

double

Erreur de pourcentage absolue moyenne entre prediction_col et label_col.

r2_score

double

Score R-carré entre prediction_col et label_col.

Colonnes de métriques – équité et biais [6]

parité_prédictive

double

Mesure si les deux groupes ont une précision égale sur toutes les classes prédites. label_col est requis.

predictive_equality

double

Mesure si les deux groupes ont un taux de faux positifs égal pour toutes les classes prédites. label_col est requis.

égalité des chances

double

Mesure si les deux groupes ont un rappel égal sur toutes les classes prédites. label_col est requis.

parité statistique

double

Mesure si les deux groupes ont un taux d'acceptation égal. Le taux d'acceptation est ici défini comme la probabilité empirique d'être prédit comme une certaine classe, parmi toutes les classes prédites.

[1] Format de la structure pour confusion_matrix, precision, recall, f1_score et roc_auc_score:

Nom de colonne

Type

fenêtre

struct<start: timestamp, end: timestamp>

éléments fréquents

array<struct<item: string, count: bigint>>

confusion_matrix

struct<prediction: string, label: string, count: bigint>

Précision

struct<one_vs_all: map<string,double>, macro: double, weighted: double>

rappel

struct<one_vs_all: map<string,double>, macro: double, weighted: double>

f1_score

struct<one_vs_all: map<string,double>, macro: double, weighted: double>

roc_auc_score

struct<one_vs_one: struct<weighted: double, macro: double>>

Nom de colonne

Type

fenêtre

struct<start: timestamp, end: timestamp>

éléments fréquents

array<struct<item: string, count: bigint>>

confusion_matrix

struct<prediction: string, label: string, count: bigint>

Précision

struct<one_vs_all: map<string,double>, macro: double, weighted: double>

rappel

struct<one_vs_all: map<string,double>, macro: double, weighted: double>

f1_score

struct<one_vs_all: map<string,double>, macro: double, weighted: double>

roc_auc_score

struct<one_vs_one: struct<weighted: double, macro: double>>

[2] Pour les profils de séries chronologiques ou d'inférence, le profil remonte à 30 jours à compter de la date de création du profil. En raison de cette coupure, la première analyse pourrait inclure une fenêtre partielle. Par exemple, la limite de 30 jours pourrait 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 n'affecte que la première fenêtre.

[3] La version affichée dans cette colonne est celle qui a été utilisée pour calculer les statistiques dans la ligne et pourrait ne pas être la version actuelle du profil. Chaque fois que vous refresh les métriques, le profil tente de recalculer les métriques précédemment calculées à l’aide de la configuration de profil actuelle. La version actuelle du profil apparaît dans les informations de profil renvoyées par l’API et le client Python.

[4] Exemple de code pour récupérer le 50e percentile : SELECT element_at(quantiles, int((size(quantiles)+1)/2)) AS p50 ... ou SELECT quantiles[500] ....

[5] Affiché uniquement si le profil a le type d'analyse InferenceLog et que label_col et prediction_col sont fournis.

[6] Affiché uniquement si le profil a le type d'analyse InferenceLog et que problem_type est classification.

Schéma de la table des métriques de drift

Le tableau suivant présente le schéma de la table des métriques de drift. La table de drift n'est générée que si une table de référence est fournie ou si une fenêtre temporelle consécutive existe après agrégation selon les granularités spécifiées. Lorsqu'une métrique n'est pas applicable à une ligne, la cellule correspondante est nulle.

Nom de colonne

Type

Description

Colonnes de regroupement

fenêtre

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

chaîne

DE RÉFÉRENCE ou CONSÉCUTIF. Si les métriques de drift sont comparées à la fenêtre temporelle précédente ou à la table de référence.

granularité

chaîne

Durée de la fenêtre, définie par le paramètre granularities. [7]

model_id_col

chaîne

Facultatif. Utilisé uniquement pour le type d’analyse InferenceLog.

slice_key

chaîne

Expression de découpage. NULL for default, which is all data.

slice_value

chaîne

Valeur de l'expression de découpage.

column_name

chaîne

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.

type de données

chaîne

Type de données Spark de column_name.

monitor_version

bigint

Version de la configuration du moniteur utilisée pour calculer les métriques de la ligne. Consultez [8] ci-dessous pour plus de détails.

Colonnes de métriques - drift

Les différences sont calculées comme fenêtre actuelle - fenêtre de comparaison.

count_delta

double

Différence dans count.

avg_delta

double

Différence dans avg.

percent_null_delta

double

Différence dans percent_null.

percent_zeros_delta

double

Différence dans percent_zeros.

percent_distinct_delta

double

Différence dans percent_distinct.

non_null_columns_delta

struct<added: int, missing: int>

Nombre de colonnes avec une augmentation ou une diminution des valeurs non nulles.

chi_squared_test

struct<statistic: double, pvalue: double>

Test du chi-carré de drift de la distribution. Calculé uniquement pour les colonnes catégorielles. null pour les colonnes numériques.

ks_test

struct<statistic: double, pvalue: double>

Test de KS pour la drift de la distribution. Calculé pour les colonnes numériques uniquement. null pour les colonnes catégorielles.

tv_distance

double

Distance de variation totale pour le drift dans la distribution. Calculé uniquement pour les colonnes catégorielles. null pour les colonnes numériques.

l_infinity_distance

double

Distance L-infini pour le drift de distribution. Calculé uniquement pour les colonnes catégorielles. null pour les colonnes numériques.

js_distance

double

Distance de Jensen–Shannon pour le drift dans la distribution. Calculé uniquement pour les colonnes catégorielles. null pour les colonnes numériques.

wasserstein_distance

double

Drift entre deux distributions numériques à l’aide de la métrique de distance de Wasserstein. Calculé pour les colonnes numériques uniquement. null pour les colonnes catégorielles.

indice de stabilité de la population

double

Métrique permettant de comparer le drift entre deux distributions numériques à l’aide de la métrique d’indice de stabilité de la population. Consultez [9] ci-dessous pour plus de détails. Calculé pour les colonnes numériques uniquement. null pour les colonnes catégorielles.

Nom de colonne

Type

Description

Colonnes de regroupement

fenêtre

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

chaîne

DE RÉFÉRENCE ou CONSÉCUTIF. Si les métriques de drift sont comparées à la fenêtre temporelle précédente ou à la table de référence.

granularité

chaîne

Durée de la fenêtre, définie par le paramètre granularities. [7]

model_id_col

chaîne

Facultatif. Utilisé uniquement pour le type d’analyse InferenceLog.

slice_key

chaîne

Expression de découpage. NULL for default, which is all data.

slice_value

chaîne

Valeur de l'expression de découpage.

column_name

chaîne

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.

type de données

chaîne

Type de données Spark de column_name.

monitor_version

bigint

Version de la configuration du moniteur utilisée pour calculer les métriques de la ligne. Consultez [8] ci-dessous pour plus de détails.

Colonnes de métriques - drift

Les différences sont calculées comme fenêtre actuelle - fenêtre de comparaison.

count_delta

double

Différence dans count.

avg_delta

double

Différence dans avg.

percent_null_delta

double

Différence dans percent_null.

percent_zeros_delta

double

Différence dans percent_zeros.

percent_distinct_delta

double

Différence dans percent_distinct.

non_null_columns_delta

struct<added: int, missing: int>

Nombre de colonnes avec une augmentation ou une diminution des valeurs non nulles.

chi_squared_test

struct<statistic: double, pvalue: double>

Test du chi-carré de drift de la distribution. Calculé uniquement pour les colonnes catégorielles. null pour les colonnes numériques.

ks_test

struct<statistic: double, pvalue: double>

Test de KS pour la drift de la distribution. Calculé pour les colonnes numériques uniquement. null pour les colonnes catégorielles.

tv_distance

double

Distance de variation totale pour le drift dans la distribution. Calculé uniquement pour les colonnes catégorielles. null pour les colonnes numériques.

l_infinity_distance

double

Distance L-infini pour le drift de distribution. Calculé uniquement pour les colonnes catégorielles. null pour les colonnes numériques.

js_distance

double

Distance de Jensen–Shannon pour le drift dans la distribution. Calculé uniquement pour les colonnes catégorielles. null pour les colonnes numériques.

wasserstein_distance

double

Drift entre deux distributions numériques à l’aide de la métrique de distance de Wasserstein. Calculé pour les colonnes numériques uniquement. null pour les colonnes catégorielles.

indice de stabilité de la population

double

Métrique permettant de comparer le drift entre deux distributions numériques à l’aide de la métrique d’indice de stabilité de la population. Consultez [9] ci-dessous pour plus de détails. Calculé pour les colonnes numériques uniquement. null pour les colonnes catégorielles.

[7] Pour les profils de séries temporelles ou d'inférence, le profil examine les 30 jours précédents à partir du moment où le profil est créé. En raison de cette coupure, la première analyse pourrait inclure une fenêtre partielle. Par exemple, la limite de 30 jours pourrait 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 n'affecte que la première fenêtre.

[8] La version affichée dans cette colonne est la version qui a été utilisée pour calculer les statistiques de la ligne et pourrait ne pas être la version actuelle du profil. Chaque fois que vous refresh les métriques, le profil tente de recalculer les métriques précédemment calculées à l’aide de la configuration de profil actuelle. La version actuelle du profil apparaît dans les informations de profil renvoyées par l’API et le client Python.

[9] Le résultat de l’indice de stabilité de la population est une valeur numérique qui représente les différences entre deux distributions. La plage est [0, inf). PSI < 0,1 signifie aucun changement significatif de population. Un PSI < 0,2 indique un changement de population modéré. Un PSI >= 0,2 indique un changement de population significatif.