Freigeben über


Verwenden von Zeitreihen-Featuretabellen mit Point-in-Time-Support

In die Daten, die zum Trainieren eines Modells verwendet werden, sind häufig Zeitabhängigkeiten integriert. Wenn Sie z. B. ein Modell trainieren, um vorherzusagen, welche Maschinen in einer Fabrik gewartet werden müssen, verfügen Sie möglicherweise über historische Datasets, die Sensormessungen und Nutzungsdaten für viele Computer enthalten, zusammen mit Zielbezeichnungen, die angeben, ob die Maschine Wartung benötigte oder nicht. Das Dataset kann für Maschinen sowohl Daten für den Zeitraum vor als auch nach Durchführung eines Wartungsdiensts enthalten.

Beim Erstellen des Modells müssen Sie nur Featurewerte bis zum Zeitpunkt des beobachteten Zielwerts berücksichtigen (erfordert Dienst oder keinen Dienst). Wenn Sie den Zeitstempel der einzelnen Beobachtungen nicht explizit berücksichtigen, könnten Sie versehentlich Featurewerte für das Training verwenden, die nach dem Zeitstempel des Zielwerts gemessen wurden. Dies wird als „Datenleck“ bezeichnet und kann 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.

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. Es wird empfohlen, Z-Ordering auf Zeitreihentabellen anzuwenden, um eine bessere Leistung bei Point-in-Time-Lookups zu erzielen.
  • 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.
  • 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 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.

So funktionieren Zeitreihenfeaturetabellen

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

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

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.

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. Databricks Feature Store stellt die Funktionalität bereit, um entweder eine Momentaufnahme oder ein Fenster von Zeitreihendaten im Onlinespeicher zu veröffentlichen, abhängig vom OnlineStoreSpec, wie der Onlinespeicher erstellt wurde. Die Tabelle zeigt Details für jeden Veröffentlichungsmodus an.

Onlinespeicheranbieter Momentaufnahme Veröffentlichungsmodus Fensterveröffentlichungsmodus
Azure Cosmos DB (v0.5.0 und höher) X
Azure MySQL (Einzelserver) X
Azure SQL Server X

Veröffentlichen einer Zeitreihenaufnahme

Dadurch werden die neuesten Featurewerte für jeden Primärschlüssel in der Featuretabelle veröffentlicht. Der Onlineshop unterstützt Primärschlüssellookups, aber keine Point-in-Time-Lookups.

Für Onlinespeicher, die die Zeit für live nicht unterstützen, unterstützt Databricks Feature Store nur den Momentaufnahmeveröffentlichungsmodus. Für Onlinespeicher, die Zeit für live unterstützen, ist der Standardveröffentlichungsmodus Momentaufnahme, es sei denn, die Zeit zum Leben (ttl) wird zur OnlineStoreSpec zurzeit der Erstellung angegeben.

Veröffentlichen einer Zeitreihenaufnahme

Dadurch werden alle Funktionswerte für jeden Primärschlüssel in der Funktionstabelle im Onlinespeicher veröffentlicht und automatisch abgelaufene Datensätze entfernt. Ein Datensatz wird als abgelaufen betrachtet, wenn der Zeitstempel des Datensatzes (in UTC) mehr als die angegebene Zeit für die Live-Dauer in der Vergangenheit ist. Weitere Informationen zu Time-to-Live finden Sie in der Cloud-spezifischen Dokumentation.

Der Onlinespeicher unterstützt die Primärschlüsselsuche und ruft den Funktionswert automatisch mit dem neuesten Zeitstempel ab.

Um diesen Veröffentlichungsmodus zu verwenden, müssen Sie einen Wert für Time-to-Live (ttl) im OnlineStoreSpec bereitstellen, die Sie beim Erstellen des Onlinespeichers verwenden können. Die ttl-Änderung kann nicht einmal festgelegt werden. Alle nachfolgenden Veröffentlichungsaufrufe erben die ttl und sind nicht erforderlich, dies explizit im Bereich OnlineStoreSpec zu definieren.

Notebookbeispiel: Zeitreihen-Featuretabelle

Das folgende Notebook veranschaulicht Point-in-Time-Nachschlagevorgänge für Zeitreihen-Featuretabellen im Arbeitsbereich-Feature Store.

Beispielnotebook mit einer Zeitreihen-Featuretabelle

Notebook abrufen