Freigeben über


Point-in-Time-Support mit Zeitreihen-Featuretabellen

In diesem Artikel wird beschrieben, wie Sie die Punkt-in-Time-Korrektheit verwenden, um ein Schulungsdatenset zu erstellen, das Featurewerte zum Zeitpunkt der Aufzeichnung einer Bezeichnungsbeobachtung genau widerspiegelt. Dies ist wichtig, um Datenlecks zu verhindern, die auftreten, wenn Sie Featurewerte für Modellschulungen verwenden, die zum Zeitpunkt der Aufzeichnung der Bezeichnung nicht verfügbar waren. Dieser Fehlertyp kann schwer zu erkennen sein und sich negativ auf die Leistung des Modells auswirken.

Zeitreihen-Featuretabellen enthalten eine Zeitstempel-Schlüsselspalte, die sicherstellt, dass jede Zeile im Trainingsdataset die neuesten bekannten Featurewerte ab dem Zeitstempel der Zeile darstellt. Sie sollten die Verwendung von Zeitreihen-Featuretabellen immer dann in Betracht ziehen, wenn sich Ihre Featurewerte im Laufe der Zeit ändern, z. B. bei Zeitreihendaten, ereignisbasierten Daten oder zeitaggregierten Daten.

Das folgende Diagramm zeigt, wie der Zeitstempelschlüssel verwendet wird. Der für jeden Zeitstempel aufgezeichnete Featurewert ist der neueste Wert vor diesem Zeitstempel, der durch den umrissenen orangefarbenen Kreis angegeben wird. Wenn keine Werte aufgezeichnet wurden, ist der Featurewert null. Weitere Informationen finden Sie unter Funktionsweise von Featuretabellen für Zeitreihen.

Featurewerte, die zu unterschiedlichen Zeiten eingetroffen sind.

Hinweis

  • Mit Databricks Runtime 13.3 LTS und höher kann jede Delta-Tabelle in Unity Catalog mit Primärschlüsseln und Zeitstempelschlüsseln als Featuretabelle für Zeitreihen verwendet werden.
  • Für eine bessere Leistung bei Point-in-Time-Lookups empfiehlt Databricks, dass Sie Liquid Clustering (für databricks-feature-engineering 0.6.0 und höher) oder Z-Ordering (für databricks-feature-engineering 0.6.0 und niedriger) auf Zeitreihentabellen anwenden.
  • Die Funktion des Point-in-Time-Lookups wird manchmal als „Zeitreise“ bezeichnet. Die Point-in-Time-Lookups in Databricks Feature Store entsprechen nicht der Delta Lake-Zeitreise.

Funktionsweise von Featuretabellen für Zeitreihen

Angenommen, Sie haben die folgenden Featuretabellen. Diese Daten stammen aus dem Beispielnotizbuch.

Die Tabellen enthalten Sensordaten, die die Temperatur, relative Luftfeuchtigkeit, das Umgebungslicht und Kohlendioxid in einem Raum messen. Die Tabelle „Grundwahrheit“ gibt an, ob eine Person im Raum anwesend war. Jede der Tabellen verfügt über einen Primärschlüssel (‚raum‘) und einen Zeitstempelschlüssel (‚ts‘). Der Einfachheit halber werden nur Daten für einen einzigen Wert des Primärschlüssels (‚0‘) angezeigt.

Beispieldaten einer Funktionstabelle

Die folgende Abbildung veranschaulicht, wie der Zeitstempelschlüssel verwendet wird, um die Point-in-Time-Korrektheit in einem Trainingsdataset sicherzustellen. Featurewerte werden basierend auf dem Primärschlüssel (nicht im Diagramm dargestellt) und dem Zeitstempelschlüssel unter Verwendung eines AS OF-Joins abgeglichen. Der AS OF-Join stellt sicher, dass der neueste Wert des Features zum Zeitpunkt des Zeitstempels im Trainingssatz verwendet wird.

So funktioniert Point-in-Time

Wie in der Abbildung gezeigt, enthält das Trainingsdataset die neuesten Featurewerte für jeden Sensor vor dem Zeitstempel der beobachteten Grundwahrheit.

Wenn Sie ein Trainingsdataset erstellt haben, ohne den Zeitstempelschlüssel zu berücksichtigen, verfügen Sie möglicherweise über eine Zeile mit diesen Featurewerten und der beobachteten Grundwahrheit:

temp rh Leicht CO2 Grundwahrheit
15.8 32 212 630 0

Dies ist jedoch keine gültige Beobachtung für das Training, da der CO2-Wert von 630 um 8:52 Uhr, nach der Beobachtung der Grundwahrheit um 8:50 Uhr, genommen wurde. Die zukünftigen Daten „sickern“ in den Trainingssatz, wodurch die Leistung des Modells beeinträchtigt wird.

Anforderungen

  • Für Feature Engineering in Unity Catalog: Feature Engineering in Unity Catalog Client (beliebige Version).
  • Für Workspace Feature Store: Feature Store-Client v0.3.7 und höher.

Um Zeitpunktfunktionen zu verwenden, müssen Sie zeitbezogene Schlüssel mithilfe des timeseries_columns-Arguments (für Feature Engineering in Unity Catalog) oder des timestamp_keys-Arguments (für Workspace Feature Store) angeben. Damit wird angegeben, dass Featuretabellenzeilen verknüpft werden sollen, indem der neueste Wert für einen bestimmten Primärschlüssel abgeglichen wird, der nicht später ist als der Wert der timestamps_keys-Spalte, anstatt auf einer genauen Zeitübereinstimmung basierend zu verknüpfen.

Wenn Sie nicht timeseries_columns oder timestamp_keys sondern nur eine Zeitserienspalte als Primärschlüsselspalte festlegen, wendet der Featurespeicher während Verknüpfungen keine Point-in-Time-Logik auf die Zeitserienspalte an. Stattdessen werden nur Zeilen mit einer exakten Zeitübereinstimmung abgeglichen, anstatt alle vor dem Zeitstempel liegenden Zeilen abzugleichen.

Erstellen einer Featuretabelle für Zeitreihen in Unity Catalog

In Unity Catalog ist jede Tabelle mit einem TIMESERIES-Primärschlüssel eine Featuretabelle für Zeitreihen. Informationen zum Erstellen einer Featuretabelle finden Sie unter Erstellen einer Featuretabelle in Unity Catalog.

Erstellen einer Featuretabelle für Zeitreihen im lokalen Arbeitsbereich

Wenn Sie eine Zeitreihen-Featuretabelle erstellen möchten, muss der DataFrame oder das Schema eine Spalte enthalten, die Sie als Zeitstempelschlüssel festlegen.

Ab Feature Store Client v0.13.4 müssen Zeitstempelschlüsselspalten im primary_keys Argument angegeben werden. Zeitstempelschlüssel sind Teil der „Primärschlüssel“, die jede Zeile in der Featuretabelle eindeutig identifizieren. Wie andere Primärschlüsselspalten dürfen Zeitstempelschlüsselspalten keine NULL-Werte enthalten.

Feature Engineering in Unity Catalog.

fe = FeatureEngineeringClient()
# user_features_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fe.create_table(
  name="ml.ads_team.user_features",
  primary_keys=["user_id", "ts"],
  timeseries_columns="ts",
  features_df=user_features_df,
)

Workspace Feature Store Client v0.13.4 und höher

fs = FeatureStoreClient()
# user_features_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fs.create_table(
  name="ads_team.user_features",
  primary_keys=["user_id", "ts"],
  timestamp_keys="ts",
  features_df=user_features_df,
)

Workspace Feature Store Client v0.13.3 und niedriger

fs = FeatureStoreClient()
# user_features_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fs.create_table(
  name="ads_team.user_features",
  primary_keys="user_id",
  timestamp_keys="ts",
  features_df=user_features_df,
)

Eine Zeitreihen-Featuretabelle muss über einen Zeitstempelschlüssel verfügen und darf keine Partitionsspalten enthalten. Die Zeitstempelschlüsselspalte muss aus TimestampType oder DateType bestehen.

Databricks empfiehlt, dass Zeitreihen-Featuretabellen nicht mehr als zwei Primärschlüsselspalten enthalten, um eine hohe Schreib- und Lookupleistung zu gewährleisten.

Aktualisieren einer Zeitreihen-Featuretabelle

Beim Schreiben von Features in die Zeitreihen-Featuretabellen muss Ihr DataFrame im Gegensatz zu regulären Featuretabellen Werte für alle Features der Featuretabelle angeben. Durch diese Einschränkung wird die geringe Datendichte der Featurewerte zwischen den Zeitstempeln in der Zeitreihen-Featuretabelle verringert.

Feature Engineering in Unity Catalog.

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"
)

Workspace Feature Store Client v0.13.4 und höher

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

Das Streamen von Zeitreihen-Featuretabellen wird unterstützt.

Erstellen eines Trainingssets mit einer Zeitreihen-Featuretabelle

Wenn Sie ein Point-in-Time-Lookup für Featurewerte aus einer Zeitreihen-Featuretabelle durchführen möchten, müssen Sie einen timestamp_lookup_key im FeatureLookup des Features angeben, der den Namen der DataFrame-Spalte angibt, in der die Zeitstempel enthalten sind, für die ein Lookup der Zeitreihenfeatures erfolgen soll. Databricks Feature Store ruft die neuesten Feature-Werte ab, die vor den in der timestamp_lookup_key-Spalte des DataFrame angegebenen Zeitstempeln liegen und deren Primärschlüssel mit den Werten in den lookup_key-Spalten des DataFrame übereinstimmen. Ansonsten wird null abgerufen, wenn keine solchen Featurewerte vorhanden sind.

Feature Engineering in Unity Catalog.

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()

Tipp

Um eine schnellere Lookup-Leistung zu erzielen, wenn Photon aktiviert ist, übergeben Sie use_spark_native_join=True an FeatureEngineeringClient.create_training_set. Dies erfordert databricks-feature-engineering Version 0.6.0 oder höher.

Workspace Feature Store

feature_lookups = [
  FeatureLookup(
    table_name="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="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 = fs.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()

Jedes FeatureLookup einer Zeitreihen-Featuretabelle muss ein Point-in-Time-Lookup sein. Daher muss die timestamp_lookup_key-Spalte angegeben werden, die in Ihrem DataFrame verwendet werden soll. Das Point-in-Time-Lookup überspringt keine Zeilen mit null-Featurewerten, die in der Zeitreihen-Featuretabelle gespeichert sind.

Festlegen eines Zeitlimits für historische Featurewerte

Mit dem Feature Store-Client v0.13.0 oder höher, oder einer beliebigen Version des Feature Engineering in Unity Catalog-Clients, können Sie Featurewerte mit älteren Zeitstempeln aus dem Schulungssatz ausschließen. Verwenden Sie dazu den -Parameter lookback_window in FeatureLookup.

Der Datentyp von lookback_window muss datetime.timedelta lauten, und der Standardwert ist None (alle Featurewerte werden unabhängig vom Alter verwendet).

Mit folgendem Code werden beispielsweise alle Featurewerte, die älter als 7 Tage sind, ausgeschlossen:

Feature Engineering in Unity Catalog.

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)
  )
]

Workspace Feature Store

from datetime import timedelta

feature_lookups = [
  FeatureLookup(
    table_name="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)
  )
]

Wenn Sie create_training_set mit dem oben genannten FeatureLookupaufrufen, wird automatisch ein Beitritt um aktuellen Zeitpunkt ausgeführt, und Featurewerte, die älter als 7 Tage sind, werden ausgeschlossen.

Das Lookbackfenster wird während des Trainings und des Batchrückschließens angewendet. Während des Onlinerückschließens wird unabhängig vom Lookbackfenster immer der neueste Featurewert verwendet.

Bewerten von Modellen mit Zeitreihen-Featuretabellen

Wenn Sie ein Modell bewerten, das mit Features aus Zeitreihen-Featuretabellen trainiert wurde, ruft Databricks Feature Store die entsprechenden Features mithilfe von Point-in-Time-Lookups mit Metadaten ab, die während des Trainings mit dem Modell gepackt wurden. Der von Ihnen an FeatureEngineeringClient.score_batch (für Feature Engineering in Unity Catalog) oder FeatureStoreClient.score_batch (für Workspace Feature Store) bereitgestellte DataFrame muss eine Zeitstempelspalte mit demselben Namen und DataType wie der timestamp_lookup_key des an FeatureEngineeringClient.create_training_set oder FeatureStoreClient.create_training_set bereitgestellten FeatureLookup enthalten.

Tipp

Um eine schnellere Lookup-Leistung zu erzielen, wenn Photon aktiviert ist, übergeben Sie use_spark_native_join=True an FeatureEngineeringClient.score_batch. Dies erfordert databricks-feature-engineering Version 0.6.0 oder höher.

Veröffentlichen von Zeitreihenfeatures in einem Onlineshop

Sie können FeatureEngineeringClient.publish_table (für Feature Engineering in Unity Catalog) oder FeatureStoreClient.publish_table (für Workspace Feature Store) verwenden, um Zeitreihen-Featuretabellen in Onlinespeichern zu veröffentlichen. Der Databricks Feature Store veröffentlicht eine Momentaufnahme der neuesten Featurewerte für die einzelnen Primärschlüssel in der Featuretabelle im Onlinespeicher. Der Onlineshop unterstützt Primärschlüssellookups, aber keine Point-in-Time-Lookups.

Notebookbeispiel: Zeitreihen-Featuretabelle

Die folgenden Beispielnotebooks veranschaulichen Point-in-Time-Lookups für Zeitreihen-Featuretabellen.

Verwenden Sie dieses Notebook in Arbeitsbereichen, die für Unity Catalog aktiviert sind.

Beispielnotebook mit einer Zeitreihen-Featuretabelle (Unity Catalog)

Notebook abrufen

Das folgende Notebook ist für Arbeitsbereiche ausgelegt, die nicht für Unity Catalog aktiviert sind. Es nutzt das Workspace Feature Store.

Beispielnotebook mit einer Zeitreihen-Featuretabelle (Arbeitsbereiche nicht für Unity Catalog aktiviert)

Notebook abrufen