Partager via


Utiliser des métriques personnalisées avec le profilage des données

Cette page explique comment créer une métrique personnalisée dans le profilage des données. En plus des statistiques d’analyse et de dérive calculées automatiquement, vous pouvez créer des métriques personnalisées. Par exemple, vous pouvez suivre une moyenne pondérée qui capture un aspect de la logique métier ou utiliser un score de qualité de modèle personnalisé. Vous pouvez également créer des métriques de dérive personnalisées qui suivent les modifications apportées aux valeurs de la table primaire (par rapport à la ligne de base ou à la fenêtre de temps précédente).

Pour plus d’informations sur l’utilisation de l’API MonitorMetric , consultez la référence de l’API.

Types de métriques personnalisées

Le profilage des données inclut les types de métriques personnalisées suivants :

  • Métriques d’agrégation, calculées en fonction des colonnes de la table primaire. Les métriques d’agrégation sont stockées dans la table des métriques de profil.
  • Les métriques dérivées, calculées en fonction des métriques d’agrégation précédemment calculées et n’utilisent pas directement les données de la table primaire. Les métriques dérivées sont stockées dans la table des métriques de profil.
  • Métriques de dérive, qui comparent les métriques calculées ou dérivées précédemment à partir de deux fenêtres de temps différentes, ou entre la table primaire et la table de référence. Les métriques de dérive sont stockées dans la table des métriques de dérive.

L’utilisation de métriques dérivées et de dérive dans la mesure du possible réduit la recomputation sur la table primaire complète. Seules les métriques agrégées accèdent aux données de la table primaire. Les métriques dérivées et de dérive peuvent ensuite être calculées directement à partir des valeurs de métrique d’agrégation.

Paramètres de métriques personnalisés

Pour définir une métrique personnalisée, vous créez un modèle Jinja pour une expression de colonne SQL. Les tables de cette section décrivent les paramètres qui définissent la métrique et les paramètres utilisés dans le modèle Jinja.

Paramètre Description
type Valeurs possibles : MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE, MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED ou MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT.
name Nom de colonne de la métrique personnalisée dans les tables de métriques.
input_columns Liste des noms de colonnes dans la table d’entrée pour laquelle la métrique doit être calculée. Pour indiquer que plusieurs colonnes sont utilisées dans le calcul, utilisez :table. Consultez les exemples de cet article.
definition Modèle Jinja pour une expression SQL qui spécifie comment calculer la métrique. Voir Créer une définition.
output_data_type Type de données Spark du résultat de la métrique dans un format de chaîne JSON.

Créer definition

Le definition paramètre doit être une expression de chaîne unique sous la forme d’un modèle Jinja. Il ne peut pas contenir de jointures ou de sous-requêtes.

Le tableau suivant répertorie les paramètres que vous pouvez utiliser pour créer un modèle SQL Jinja pour spécifier comment calculer la métrique.

Paramètre Description
{{input_column}} Colonne utilisée pour calculer la métrique personnalisée.
{{prediction_col}} Colonne contenant des prédictions de modèle ML. Utilisé avec l’analyse de InferenceLog.
{{label_col}} Colonne contenant les étiquettes vérité terrain du modèle ML. Utilisé avec l’analyse de InferenceLog.
{{current_df}} Pour la dérive comparée à la fenêtre temporelle précédente. Données de la fenêtre de temps précédente.
{{base_df}} Pour la dérive par rapport à la table de référence. Données de référence.

Exemple de métrique d’agrégation

L’exemple suivant calcule la moyenne du carré des valeurs d’une colonne et est appliquée aux colonnes f1 et f2. La sortie est enregistrée sous la forme d’une nouvelle colonne dans la table de métriques de profil et est affichée dans les lignes d’analyse correspondant aux colonnes f1 et f2. Les noms de colonnes applicables sont remplacés par le paramètre {{input_column}}Jinja.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE,
    name="squared_avg",
    input_columns=["f1", "f2"],
    definition="avg(`{{input_column}}`*`{{input_column}}`)",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)

Le code suivant définit une métrique personnalisée qui calcule la moyenne de la différence entre les colonnes f1 et f2. Cet exemple montre l’utilisation du [":table"]input_columns paramètre pour indiquer que plusieurs colonnes de la table sont utilisées dans le calcul.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE,
    name="avg_diff_f1_f2",
    input_columns=[":table"],
    definition="avg(f1 - f2)",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)

Cet exemple calcule un score de qualité de modèle pondéré. Pour les observations où la colonne critical est True, une pénalité plus lourde est affectée lorsque la valeur prédite pour cette ligne ne correspond pas à la vérité terrain. Étant donné qu’il est défini sur les colonnes brutes (prediction et label), il est défini comme une métrique d’agrégation. La :table colonne indique que cette métrique est calculée à partir de plusieurs colonnes. Les paramètres Jinja {{prediction_col}} et {{label_col}} sont remplacés par le nom des colonnes de prédiction et d'étiquette de valeur réelle pour le profil.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_AGGREGATE,
    name="weighted_error",
    input_columns=[":table"],
    definition="""avg(CASE
      WHEN {{prediction_col}} = {{label_col}} THEN 0
      WHEN {{prediction_col}} != {{label_col}} AND critical=TRUE THEN 2
      ELSE 1 END)""",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)

Exemple de métrique dérivée

Le code suivant définit une métrique personnalisée qui calcule la racine carrée de la squared_avg métrique définie précédemment dans cette section. Étant donné qu’il s’agit d’une métrique dérivée, elle ne référence pas les données de table primaire et est définie en termes de squared_avg métrique d’agrégation. La sortie est enregistrée sous la forme d’une nouvelle colonne dans la table de métriques de profil.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_DERIVED,
    name="root_mean_square",
    input_columns=["f1", "f2"],
    definition="sqrt(squared_avg)",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)

Exemple de métriques de dérive

Le code suivant définit une métrique de dérive qui suit la modification de la weighted_error métrique définie précédemment dans cette section. Les paramètres {{current_df}} et {{base_df}} permettent à la métrique de faire référence aux valeurs weighted_error de la fenêtre active et de la fenêtre de comparaison. La fenêtre de comparaison peut être les données de référence ou les données de la fenêtre de temps précédente. Les métriques de dérive sont enregistrées dans la table des métriques de dérive.

from databricks.sdk.service.catalog import MonitorMetric, MonitorMetricType
from pyspark.sql import types as T

MonitorMetric(
    type=MonitorMetricType.CUSTOM_METRIC_TYPE_DRIFT,
    name="error_rate_delta",
    input_columns=[":table"],
    definition="{{current_df}}.weighted_error - {{base_df}}.weighted_error",
    output_data_type=T.StructField("output", T.DoubleType()).json(),
)