Aller au contenu principal

Jonctions de fonctionnalités à un instant donné

La correction ponctuelle crée un dataset d'entraînement qui reflète les valeurs de fonctionnalité au moment où chaque observation d'étiquette a été enregistrée. Ceci est important pour éviter la *fuite de données*, qui se produit lorsque vous utilisez des valeurs de fonctionnalité pour l'entraînement du modèle qui n'étaient pas disponibles au moment de l'enregistrement de l'étiquette. Ce type d’erreur peut être difficile à détecter et peut affecter négativement les performances du modèle.

Les tables de caractéristiques de séries chronologiques incluent une colonne de clé Timestamp qui garantit que chaque ligne du dataset d'entraînement représente les dernières valeurs de caractéristiques connues à partir du Timestamp de la ligne. Vous devez utiliser les tables de caractéristiques de séries temporelles chaque fois que les valeurs des caractéristiques changent au fil du temps, par exemple avec des données de séries temporelles, des données basées sur les événements ou des données agrégées dans le temps.

Le diagramme suivant montre comment la clé Timestamp est utilisée. La valeur de la fonctionnalité enregistrée pour chaque timestamp est la dernière valeur avant ce timestamp, indiquée par le cercle orange délimité. Si aucune valeur n'a été enregistrée, la valeur de la fonctionnalité est nulle. Pour plus de détails, consultez Comment fonctionnent les tables de fonctionnalités de séries chronologiques.

Valeurs de fonctionnalité arrivant à des moments différents.

remarque
  • Avec Databricks Runtime 13.3 LTS et versions ultérieures, toute table Delta dans Unity Catalog dotée de clés primaires et de Timestamp keys peut être utilisée comme table de fonctionnalités de série chronologique.
  • Pour une meilleure performance des recherches à un moment précis, Databricks recommande le clustering liquide (databricks-feature-engineering 0.6.0 et supérieur) sur les tables de séries chronologiques. Consultez Utiliser le clustering liquide pour les tables et le saut de données.
  • La fonctionnalité de recherche ponctuelle est parfois désignée par l’expression « time travel ». La fonctionnalité de restauration à un point dans le temps dans le magasin de fonctionnalités Databricks n'est pas liée au time travel Delta Lake.

Fonctionnement des tables de fonctionnalités de séries chronologiques

Supposons que vous ayez les tables de fonctionnalités suivantes. Ces données proviennent de l'exemple de Notebook.

Les tables contiennent des données de capteurs mesurant la température, l'humidité relative, la lumière ambiante et le dioxyde de carbone dans une pièce. La table de vérité terrain indique si une personne était présente dans la pièce. Chacune des tables possède une clé primaire ('room') et une clé Timestamp ('ts'). Par souci de simplicité, seules les données pour une seule valeur de la clé primaire ('0') sont affichées.

Exemple de données de table de fonctionnalités

La figure suivante illustre comment la clé de timestamp est utilisée pour garantir l'exactitude ponctuelle dans un dataset d'entraînement. Les valeurs de fonctionalité sont mises en correspondance en fonction de la clé primaire (non représentée dans le diagramme) et de la clé de timestamp, en utilisant une jointure AS OF. La jointure AS OF garantit que la valeur la plus récente de la fonctionnalité au moment du timestamp est utilisée dans l'ensemble d'entraînement.

Fonctionnement du point dans le temps

Comme indiqué sur la figure, le dataset d'entraînement inclut les dernières valeurs de fonctionnalité pour chaque capteur avant le timestamp sur la vérité terrain observée.

Si vous avez créé un dataset d'entraînement sans tenir compte de la clé du Timestamp, vous pourriez avoir une ligne avec ces valeurs de fonctionnalité et la vérité terrain observée :

température

rh

light

CO2

vérité terrain

15,8

32

212

630

0

température

rh

light

CO2

vérité terrain

15,8

32

212

630

0

Cependant, ce n'est pas une observation valide pour l'entraînement, car la lecture de CO2 de 630 a été effectuée à 8 h 52, après l'observation de la vérité terrain à 8 h 50. Les données futures « fuient » dans l’ensemble d’entraînement, ce qui nuira aux performances du modèle.

Exigences

  • Pour Feature Engineering dans Unity Catalog : client Feature Engineering dans Unity Catalog (toute version).
  • Pour le Workspace Magasin de fonctionnalités (hérité) : client Magasin de fonctionnalités v0.3.7 et versions ultérieures.

Comment spécifier les clés liées au temps

Pour utiliser la fonctionnalité de point-in-time, vous devez spécifier les clés temporelles en utilisant l'argument timeseries_columns (pour Feature Engineering dans Unity Catalog) ou l'argument timestamp_keys (pour Workspace Magasin de fonctionnalités). Ceci indique que les lignes de la table de fonctionnalités doivent être jointes en faisant correspondre la valeur la plus récente pour une clé primaire particulière qui n'est pas postérieure à la valeur de la colonne timestamps_keys, au lieu de joindre en fonction d'une correspondance temporelle exacte.

Si vous n'utilisez pas timeseries_columns ou timestamp_keys, et ne désignez qu'une colonne de séries chronologiques comme colonne de clé primaire, le magasin de fonctionnalités n'applique pas de logique ponctuelle à la colonne de séries chronologiques lors des jointures. Au lieu de cela, il ne correspond qu'aux lignes avec une correspondance exacte de l'heure, au lieu de faire correspondre toutes les lignes antérieures au Timestamp.

Créez une table de fonctionnalités de série chronologique dans Unity Catalog

Dans Unity Catalog, toute table dotée d'une clé primaire TIMESERIES est une table de fonctionnalités de série temporelle. Pour créer une table de fonctionnalités de série temporelle, consultez Créer une table de fonctionnalités dans Unity Catalog. Les exemples suivants illustrent les différents types de tables de séries temporelles.

Publier des tables de séries chronologiques dans des magasins en ligne

Lorsque vous travaillez avec des tables de fonctionnalités contenant des données de Timestamp, vous devez déterminer si vous devez désigner la colonne de Timestamp comme un timeseries_column ou la traiter comme une colonne normale, en fonction de vos exigences de service en ligne.

Colonnes Timestamp marquées avec la désignation de série chronologique

Utilisez timeseries_column lorsque vous avez besoin d'une exactitude ponctuelle pour les datasets d'entraînement et que vous souhaitez rechercher les valeurs de fonctionnalité les plus récentes à partir d'un timestamp spécifique dans les applications en ligne. Une table de caractéristiques de séries chronologiques doit avoir une seule clé de Timestamp et ne peut pas avoir de colonnes de partition. La colonne clé du timestamp doit être de type TimestampType ou DateType.

Databricks recommande que les tables de fonctionnalités de séries chronologiques n'aient pas plus de deux colonnes de clé primaire afin d'assurer des écritures et des recherches performantes.

Python
fe = FeatureEngineeringClient()

# Create a time series table for point-in-time joins
fe.create_table(
name="catalog.schema.user_behavior_features",
primary_keys=["user_id", "event_timestamp"],
timeseries_columns="event_timestamp", # Enables point-in-time logic
df=features_df # DataFrame must contain primary keys and time series columns
)
important

Si une table de fonctionnalités contient une colonne DATE ou TIMESTAMP comme clé primaire qui n'est pas déclarée comme colonne de série chronologique à l'aide de timeseries_columns, vous ne pouvez pas utiliser la table avec create_feature_spec(), create_training_set() ou publish_table(). Ces APIs exigent que toutes les colonnes de clé primaire DATE et TIMESTAMP soient déclarées comme colonnes de séries chronologiques.

Si votre cas d'utilisation nécessite une valeur de date ou de timestamp comme clé de recherche simple (sémantique de correspondance exacte, pas de logique de point dans le temps), changez plutôt le type de colonne en STRING.

Mettre à jour une table de fonctionnalités de séries chronologiques

Lorsque vous écrivez des fonctionnalités dans les tables de fonctionnalités de séries temporelles, votre DataFrame doit fournir des valeurs pour toutes les fonctionnalités de la table de fonctionnalités, contrairement aux tables de fonctionnalités classiques. Cette contrainte réduit la rareté des valeurs de fonctionnalité à travers les Timestamp dans la table de fonctionnalités de série temporelle.

Python
fe = FeatureEngineeringClient()
# daily_users_batch_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fe.write_table(
"ml.ads_team.user_features",
daily_users_batch_df,
mode="merge"
)

L'écriture en streaming dans les tables de fonctionnalités de séries chronologiques est prise en charge.

Créer un jeu d'entraînement avec une table de fonctionnalités de séries temporelles.

Pour effectuer une recherche ponctuelle de valeurs de fonctionnalités à partir d'une table de fonctionnalités de séries chronologiques, vous devez spécifier un timestamp_lookup_key dans le FeatureLookup de la fonctionnalité, ce qui indique le nom de la colonne du DataFrame qui contient les Timestamp par rapport auxquels rechercher les fonctionnalités de séries chronologiques. Databricks Magasin de fonctionnalités récupère les dernières valeurs de fonctionnalités antérieures aux timestamps spécifiés dans la colonne timestamp_lookup_key du DataFrame et dont les clés primaires (à l'exclusion des clés d'horodatage) correspondent aux valeurs des colonnes lookup_key du DataFrame, ou null si aucune telle valeur de fonctionnalité n'existe.

Python
feature_lookups = [
FeatureLookup(
table_name="ml.ads_team.user_features",
feature_names=["purchases_30d", "is_free_trial_active"],
lookup_key="u_id",
timestamp_lookup_key="ad_impression_ts"
),
FeatureLookup(
table_name="ml.ads_team.ad_features",
feature_names=["sports_relevance", "food_relevance"],
lookup_key="ad_id",
)
]

# raw_clickstream DataFrame contains the following columns:
# - u_id
# - ad_id
# - ad_impression_ts
training_set = fe.create_training_set(
df=raw_clickstream,
feature_lookups=feature_lookups,
exclude_columns=["u_id", "ad_id", "ad_impression_ts"],
label="did_click",
)
training_df = training_set.load_df()
astuce

Pour des performances de recherche plus rapides lorsque Photon est activé, transmettez use_spark_native_join=True à FeatureEngineeringClient.create_training_set. Ceci nécessite la version 0.6.0 ou supérieure de databricks-feature-engineering.

Toute FeatureLookup sur une table de fonctionnalités de séries chronologiques doit être une recherche ponctuelle, elle doit donc spécifier une colonne timestamp_lookup_key à utiliser dans votre DataFrame. La recherche ponctuelle n’ignore pas les lignes dont les valeurs de fonctionnalité null sont stockées dans la table de fonctionnalités de séries chronologiques.

Définir une limite de temps pour les valeurs de fonctionnalité historiques

Avec le client Magasin de fonctionnalités v0.13.0 ou version supérieure, ou toute version du client Feature Data Engineering dans Unity Catalog, vous pouvez exclure les valeurs de fonctionnalité avec des Timestamp plus anciens de l'ensemble d'entraînement. Pour ce faire, utilisez le parameter lookback_window dans le FeatureLookup.

Le type de données de lookback_window doit être datetime.timedelta, et la valeur default est None (toutes les valeurs de caractéristique sont utilisées, quel que soit l'âge).

Par exemple, le code suivant exclut toute valeur de caractéristique qui date de plus de 7 jours :

Python
from datetime import timedelta

feature_lookups = [
FeatureLookup(
table_name="ml.ads_team.user_features",
feature_names=["purchases_30d", "is_free_trial_active"],
lookup_key="u_id",
timestamp_lookup_key="ad_impression_ts",
lookback_window=timedelta(days=7)
)
]

Lorsque vous appelez create_training_set avec le FeatureLookup ci-dessus, il effectue automatiquement la jointure à un instant T et exclut les valeurs de fonctionnalité antérieures à 7 jours.

La fenêtre de rétrospection est appliquée lors de l'entraînement et de l'inférence par batch. Lors de l'inférence en ligne, la dernière valeur de fonctionnalité est toujours utilisée, quelle que soit la fenêtre de rétrospection.

Scorer des modèles avec des tables de fonctionnalités de séries temporelles

Lorsque vous évaluez un modèle entraîné avec des fonctionnalités provenant de tables de fonctionnalités de séries chronologiques, le Magasin de fonctionnalités Databricks récupère les fonctionnalités appropriées à l'aide de recherches à un instant T avec des métadonnées emballées avec le modèle pendant l'entraînement. Le DataFrame que vous fournissez à FeatureEngineeringClient.score_batch (pour le Data Engineering dans Unity Catalog) ou à FeatureStoreClient.score_batch (pour le Magasin de fonctionnalités du Workspace) doit contenir une colonne Timestamp avec le même nom et DataType que le timestamp_lookup_key du FeatureLookup fourni à FeatureEngineeringClient.create_training_set ou FeatureStoreClient.create_training_set.

astuce

Pour des performances de recherche plus rapides lorsque Photon est activé, transmettez use_spark_native_join=True à FeatureEngineeringClient.score_batch. Ceci nécessite la version 0.6.0 ou supérieure de databricks-feature-engineering.

Publier des caractéristiques de série chronologique dans un magasin en ligne

Vous pouvez utiliser FeatureEngineeringClient.publish_table (pour le Data Engineering dans Unity Catalog) ou FeatureStoreClient.publish_table (pour le Magasin de fonctionnalités Workspace) pour publier des tables de fonctionnalités de séries chronologiques dans des magasins en ligne. Databricks Magasin de fonctionnalités offre la fonctionnalité de publier un instantané ou une fenêtre de données de séries chronologiques dans le magasin en ligne, en fonction du fournisseur de magasin en ligne. Le tableau suivant présente les modes pris en charge pour chaque fournisseur.

Fournisseur de boutique en ligne

Mode Snapshot

Mode de fenêtre

Amazon DynamoDB (v0.3.8 et supérieur)

X

X

Amazon Aurora (compatible MySQL)

X

Amazon RDS MySQL

X

Fournisseur de boutique en ligne

Mode Snapshot

Mode de fenêtre

Amazon DynamoDB (v0.3.8 et supérieur)

X

X

Amazon Aurora (compatible MySQL)

X

Amazon RDS MySQL

X

Publier un instantané de série temporelle

En mode instantané, publish_table publie les dernières valeurs de fonctionnalité pour chaque clé primaire de la table de fonctionnalités. Le magasin en ligne prend en charge la recherche par clé primaire, mais ne prend pas en charge la recherche ponctuelle.

Pour les magasins en ligne qui ne prennent pas en charge la durée de vie, Databricks Magasin de fonctionnalités ne prend en charge que le mode de publication instantané. Pour les magasins en ligne qui prennent en charge la durée de vie, le mode de publication default est instantané, sauf si la durée de vie (ttl) est spécifiée dans le OnlineStoreSpec au moment de la création.

Publier une fenêtre de série chronologique

En mode fenêtre, publish_table publie toutes les valeurs de fonctionnalité pour chaque clé primaire dans la table de fonctionnalités vers le magasin en ligne et supprime automatiquement les enregistrements expirés. Un enregistrement est considéré comme expiré si le Timestamp de l'enregistrement (en UTC) est antérieur à la durée de vie spécifiée. Consultez la documentation spécifique au cloud pour obtenir des détails sur la durée de vie.

Le magasin en ligne prend en charge la recherche par clé primaire et récupère automatiquement la valeur de la fonctionnalité avec le Timestamp le plus récent.

En mode fenêtre, vous devez fournir une valeur pour le time to live (ttl) dans le OnlineStoreSpec lorsque vous créez la boutique en ligne. Le ttl ne peut pas être modifié une fois défini. Tous les appels de publication suivants héritent du ttl et n’ont pas besoin de le définir explicitement dans le OnlineStoreSpec.

Notebook exemple : table de fonctionnalités de séries chronologiques

Ces notebooks d'exemple illustrent des recherches ponctuelles sur des tables de caractéristiques de séries chronologiques.

Utilisez ce Notebook dans les workspaces activés pour Unity Catalog.

Notebook d'exemple de table de fonctionnalités de série chronologique (Unity Catalog)

Le notebook suivant est conçu pour les workspaces qui ne sont pas activés pour Unity Catalog. Il utilise le Magasin de fonctionnalités du workspace.

Notebook d'exemple de table de fonctionnalités de séries chronologiques (Workspace non activés pour Unity Catalog)