Utilisez des métriques personnalisées avec le profilage des données
Cette page décrit comment créer une métrique personnalisée dans le profilage des données. En plus des statistiques d'analyse et de drift qui sont calculées automatiquement, vous pouvez créer des métriques personnalisées. Par exemple, vous pourriez vouloir 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 drift personnalisées qui suivent les changements des valeurs de la table principale (par rapport à la base de référence ou à la fenêtre temporelle précédente).
Pour plus d'informations sur comment utiliser l'MonitorMetric API, consultez la référence de l'API.
Types de métriques personnalisées
Le profilage des données comprend les types de métriques personnalisées suivants :
- Les métriques agrégées, qui sont calculées en fonction des colonnes de la table principale. Les métriques agrégées sont stockées dans le tableau des métriques de profil.
- Métriques dérivées, qui sont calculées à partir de métriques agrégées précédemment compute et n'utilisent pas directement les données de la table principale. Les métriques dérivées sont stockées dans la table des métriques de profil.
- Les métriques Drift, qui comparent les métriques agrégées ou dérivées calculées précédemment provenant de deux fenêtres temporelles différentes, ou entre la table primaire et la table de référence. Les métriques de drift sont stockées dans la table des métriques de drift.
L'utilisation de métriques dérivées et de drift lorsque cela est possible minimise le recalcul sur l'intégralité de la table primaire. Seules les métriques agrégées accèdent aux données de la table primaire. Les métriques dérivées et drift peuvent ensuite être calculées directement à partir des valeurs des métriques agrégées.
Paramètres des métriques personnalisées
Pour définir une métrique personnalisée, vous créez un Template 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 Template Jinja.
parameter | Description |
|---|---|
| L'un de |
| Nom de colonne pour la métrique personnalisée dans les tables de métriques. |
| Liste des noms de colonnes dans la table d'entrée pour lesquelles la métrique doit être calculée. Pour indiquer que plus d'une colonne est utilisée dans le calcul, utilisez |
| Template Jinja pour une expression SQL qui spécifie comment calculer la métrique. Voir créer une définition. |
| Type de données Spark de la sortie de la métrique au format de chaîne JSON. |
Créer definition
Le parameter definition doit être une expression de chaîne unique sous la forme d'un Template Jinja. Il ne peut pas contenir de jointures ou de sous-queries.
Le tableau suivant répertorie les paramètres que vous pouvez utiliser pour créer un template Jinja SQL afin de spécifier comment calculer la métrique.
parameter | Description |
|---|---|
| Colonne utilisée pour calculer la métrique personnalisée. |
| Colonne contenant les prédictions du modèle ML. Utilisé avec l'analyse |
| Colonne contenant les étiquettes de vérité terrain du modèle ML. Utilisé avec l'analyse |
| Pour la drift par rapport à la fenêtre temporelle précédente. Données de la fenêtre temporelle précédente. |
| Pour le drift par rapport à la table de base. Données de référence. |
Exemple de métrique agrégée
L'exemple suivant calcule la moyenne du carré des valeurs d'une colonne et est appliqué aux colonnes f1 et f2. Le résultat est enregistré en tant que nouvelle colonne dans le tableau des métriques de profil et est affiché dans les lignes d'analyse correspondant aux colonnes f1 et f2. Les noms de colonne applicables sont substitués au parameter Jinja {{input_column}}.
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 compute la moyenne de la différence entre les colonnes f1 et f2. Cet exemple montre l'utilisation de [":table"] dans le paramètre input_columns 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 attribuée lorsque la valeur prédite pour cette ligne ne correspond pas à la vérité terrain. Comme il est défini sur les colonnes brutes (prediction et label), il est défini comme une métrique agrégée. La colonne :table 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 d'étiquettes de prédiction et de vérité terrain 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 métrique squared_avg définie précédemment dans cette section. Puisqu'il s'agit d'une métrique dérivée, elle ne fait pas référence aux données de la table primaire et est plutôt définie en termes de métrique agrégée squared_avg. Le résultat est enregistré dans une nouvelle colonne du tableau des 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 drift
Le code suivant définit une métrique de drift qui suit la modification de la métrique weighted_error définie précédemment dans cette section. Les parameters {{current_df}} et {{base_df}} permettent à la métrique de faire référence aux valeurs weighted_error de la fenêtre actuelle et de la fenêtre de comparaison. La fenêtre de comparaison peut être soit les données de référence, soit les données de la fenêtre temporelle précédente. Les métriques de drift sont enregistrées dans la table des métriques de drift.
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(),
)