Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Na tej stronie opisano sposób użycia dokładności czasowej, aby utworzyć zestaw danych treningowych, który dokładnie odzwierciedla wartości cech w momencie zarejestrowania obserwacji etykiety. Jest to ważne, aby zapobiec wyciekowi danych, co występuje, gdy używasz wartości funkcji do trenowania modelu, które nie były dostępne w momencie zarejestrowania etykiety. Ten typ błędu może być trudny do wykrycia i może negatywnie wpłynąć na wydajność modelu.
Tabele funkcji szeregów czasowych zawierają kolumnę klucza sygnatury czasowej, która gwarantuje, że każdy wiersz w zestawie danych trenowania reprezentuje najnowsze znane wartości funkcji jako sygnaturę czasową wiersza. Tabele funkcji szeregów czasowych należy używać zawsze, gdy wartości funkcji zmieniają się w czasie, na przykład w przypadku danych szeregów czasowych, danych opartych na zdarzeniach lub danych zagregowanych czasowo.
Na poniższym diagramie przedstawiono sposób użycia klucza znacznika czasu. Wartość funkcji zarejestrowana dla każdego znacznika czasu jest najnowszą wartością przed tym znacznikiem czasu, wskazywaną przez konturowy pomarańczowy okrąg. Jeśli nie zarejestrowano żadnych wartości, wartość funkcji ma wartość null. Aby uzyskać więcej informacji, zobacz Jak działają tabele funkcji szeregów czasowych.
Uwaga
- W przypadku Databricks Runtime 13.3 LTS i nowszych, każda tabela Delta w Unity Catalog z kluczami podstawowymi i kluczami znaczników czasowych może być używana jako tabela funkcji szeregu czasowego.
- Aby uzyskać lepszą wydajność w wyszukiwaniach w określonym punkcie czasu, usługa Databricks zaleca klastrowanie liquid (wersja 0.6.0 i nowsze) w tabelach szeregów czasowych. Zobacz Użyj płynnego klastrowania dla tabel i pomijania danych.
- Wykonywanie zapytań w określonych punktach czasowych jest czasami nazywane „podróżą czasową”. Funkcja punktu w czasie w usłudze Databricks Feature Store nie jest związana z podróżą czasową usługi Delta Lake.
Jak działają tabele funkcji szeregów czasowych
Załóżmy, że masz następujące tabele funkcji. Te dane pochodzą z przykładowego notesu.
Tabele zawierają dane czujnika pomiaru temperatury, wilgotności względnej, światła otoczenia i dwutlenku węgla w pomieszczeniu. Tabela prawdy naziemnej wskazuje, czy osoba była obecna w pokoju. Każda z tabel ma klucz podstawowy ('pokój') i klucz czasowy ('ts'). Dla uproszczenia wyświetlane są tylko dane dla pojedynczej wartości klucza podstawowego ('0').
Na poniższej ilustracji przedstawiono sposób użycia klucza znacznika czasu w celu zapewnienia poprawności w odniesieniu do konkretnego momentu w czasie w zbiorze danych treningowych. Wartości funkcji są dopasowywane na podstawie klucza podstawowego (nie pokazanego na diagramie) i klucza znacznika czasu przy użyciu sprzężenia AS OF. As OF join zapewnia, że najnowsza wartość funkcji w momencie znacznika czasu jest używana w zestawie treningowym.
Jak pokazano na rysunku, zestaw danych trenowania zawiera najnowsze wartości cech dla każdego czujnika przed znacznikiem czasu obserwowanej wartości rzeczywistej.
Jeśli utworzono zestaw danych trenowania bez uwzględnienia klucza znacznika czasu, może istnieć wiersz z tymi wartościami cech i zaobserwowaną wartością rzeczywistą:
| tymczasowe | Rh | światło | co2 | prawda naziemna |
|---|---|---|---|---|
| 15.8 | 32 | 212 | 630 | 0 |
Jednak nie jest to prawidłowa obserwacja do celów szkoleniowych, ponieważ odczyt CO2 o wartości 630 został wykonany o 8:52, po obserwacji rzeczywistej wartości o 8:50. Dane dotyczące przyszłości "wyciekają" do zestawu treningowego, co pogorszy wydajność modelu.
Wymagania
- Dla tworzenia cech w katalogu Unity: tworzenie cech w kliencie katalogu Unity (dowolna wersja).
- W przypadku Magazynu Funkcji Workspace (starsza wersja): klient Magazynu Funkcji w wersji 0.3.7 lub nowszej.
Jak określić klucze związane z czasem
Aby użyć funkcji punktu w czasie, należy określić klucze związane z czasem przy użyciu argumentu timeseries_columns (w przypadku inżynierii cech w katalogu Unity) lub argumentu timestamp_keys (dla magazynu cech obszaru roboczego). Oznacza to, że wiersze tabeli funkcji powinny być łączone przez dopasowanie najnowszej wartości dla określonego klucza podstawowego, który nie jest późniejszy niż wartość timestamps_keys kolumny, zamiast łączyć na podstawie dokładnego dopasowania czasu.
Jeśli nie używasz timeseries_columns ani timestamp_keys i wyznaczasz kolumnę szeregów czasowych tylko jako kolumnę klucza podstawowego, magazyn funkcji nie stosuje logiki punkt w czasie do kolumny szeregów czasowych podczas łączeń. Zamiast tego dopasowuje tylko wiersze z dokładnym dopasowaniem czasu zamiast dopasowywania wszystkich wierszy przed znacznikiem czasu.
Tworzenie tabeli cech szeregów czasowych w Unity Catalog
W Unity Catalog każda tabela z kluczem podstawowym TIMESERIES jest tabelą cech szeregów czasowych. Aby utworzyć tabelę cech szeregów czasowych, zobacz Tworzenie tabeli cech w katalogu Unity. W poniższych przykładach przedstawiono różne typy tabel szeregów czasowych.
Publikowanie tabel szeregów czasowych w sklepach online
Podczas pracy z tabelami funkcji, które zawierają dane sygnatury czasowej, należy rozważyć, czy wyznaczyć kolumnę znacznika czasu jako kolumnę timeseries_column lub traktować ją jako zwykłą kolumnę, w zależności od wymagań dotyczących obsługi online.
Kolumny znacznika czasu oznaczone oznaczeniem szeregów czasowych
Użyj timeseries_column gdy potrzebujesz poprawności dla konkretnego momentu w zestawach danych szkoleniowych i chcesz wyszukać najnowsze wartości cech z określonym znacznikiem czasu w aplikacjach online. Tabela funkcji szeregów czasowych musi mieć jeden klucz sygnatury czasowej i nie może zawierać żadnych kolumn partycji. Kolumna klucza sygnatury czasowej musi mieć wartość TimestampType lub DateType.
Databricks zaleca, aby tabele funkcji szeregów czasowych nie miały więcej niż dwóch kolumn klucza podstawowego, aby zapewnić wydajne operacje zapisu i wyszukiwania.
FeatureEngineeringClient API
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
)
SQL API
-- Create table with time series constraint for point-in-time joins
CREATE TABLE catalog.schema.user_behavior_features (
user_id STRING NOT NULL,
event_timestamp TIMESTAMP NOT NULL, -- part of primary key and designated as TIMESERIES
purchase_amount DOUBLE,
page_views_last_hour INT,
CONSTRAINT pk_user_behavior PRIMARY KEY (user_id, event_timestamp TIMESERIES)
) USING DELTA
TBLPROPERTIES (
'delta.enableChangeDataFeed' = 'true'
);
Kolumny sygnatur czasowych bez oznaczenia szeregów czasowych
Aby opublikować wszystkie wartości szeregów czasowych w sklepie online (nie tylko najnowsze wartości), dołącz znaczniki czasu jako część klucza podstawowego, ale nie oznaczaj ich jako timeseries_column.
FeatureEngineeringClient API
fe = FeatureEngineeringClient()
# Create a regular table with timestamp column (no point-in-time logic)
fe.create_table(
name="catalog.schema.user_current_features",
primary_keys=["user_id", "event_timestamp"],
# Note: event_timestamp is not marked as a time series column
df=features_df # DataFrame must contain primary keys columns
)
SQL API
-- Create table with timestamp column but no time series constraint
CREATE TABLE catalog.schema.user_current_features (
user_id STRING NOT NULL,
event_timestamp TIMESTAMP NOT NULL, -- part of primary key, but NOT designated as TIMESERIES
current_balance DOUBLE,
subscription_status STRING,
last_login_days_ago INT,
CONSTRAINT pk_user_current PRIMARY KEY (user_id, event_timestamp)
) USING DELTA
TBLPROPERTIES (
'delta.enableChangeDataFeed' = 'true'
);
Aktualizowanie tabeli funkcji szeregów czasowych
Podczas zapisywania cech do tabel cech szeregów czasowych, DataFrame musi podać wartości dla wszystkich cech tabeli, w przeciwieństwie do zwykłych tabel cech. To ograniczenie zmniejsza rozrzedzenie wartości cech dla wszystkich znaczników czasu w tabeli cech szeregów czasowych.
Inżynieria cech w 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"
)
Klient sklepu funkcji przestrzeni roboczej w wersji 0.13.4 lub nowszej
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"
)
Obsługiwane są zapisy strumieniowe w tabelach funkcji szeregów czasowych.
Tworzenie zestawu danych szkoleniowych z tabelą cech szeregów czasowych
Aby wykonać wyszukiwanie wartości cech w określonym punkcie czasowym z tabeli cech szeregów czasowych, należy określić timestamp_lookup_key w FeatureLookup cechy, która wskazuje nazwę kolumny DataFrame zawierającej znaczniki czasu, według których mają być wyszukiwane cechy szeregów czasowych. Magazyn funkcji usługi Databricks pobiera najnowsze wartości funkcji przed znacznikami czasu określonymi w kolumnach ramki danych timestamp_lookup_key i których klucze podstawowe (z wyjątkiem kluczy sygnatury czasowej) pasują do wartości w kolumnach ramki danych lookup_key lub null, jeśli taka wartość funkcji nie istnieje.
Inżynieria atrybutów w Katalogu Unity
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()
Wskazówka
Aby uzyskać szybszą sprawność wyszukiwania po włączeniu Photon, przekaż use_spark_native_join=True do FeatureEngineeringClient.create_training_set.
databricks-feature-engineering Wymaga to wersji 0.6.0 lub nowszej.
Magazyn funkcji obszaru roboczego
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()
Każda FeatureLookup tabela funkcji szeregów czasowych musi być odnośnikiem do punktu w czasie, więc musi określić kolumnę timestamp_lookup_key do użycia w ramce danych. Wyszukiwanie na określony moment w czasie nie pomija wierszy z wartościami null cech przechowywanymi w tabeli cech szeregów czasowych.
Ustawianie limitu czasu dla historycznych wartości funkcji
W przypadku klienta Feature Store w wersji 0.13.0 lub nowszej lub dowolnej wersji klienta Feature Engineering w katalogu Unity można wykluczyć wartości funkcji ze starszymi znacznikami czasu z zestawu treningowego. W tym celu użyj parametru lookback_window w pliku FeatureLookup.
Typ danych lookback_window musi być datetime.timedelta, a wartość domyślna to None (wszystkie wartości funkcji są używane, niezależnie od wieku).
Na przykład poniższy kod wyklucza wszystkie wartości funkcji, które mają więcej niż 7 dni:
Inżynieria cech w 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)
)
]
Magazyn funkcji obszaru roboczego
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)
)
]
Wywołanie create_training_set za pomocą powyższego FeatureLookup elementu powoduje automatyczne wykonanie połączenia punktowego w czasie i wykluczenie wartości cech starszych niż 7 dni.
Okno obserwacji wstecznej jest stosowane podczas trenowania i wnioskowania (inference) wsadowego. Podczas wnioskowania online najnowsza wartość cechy jest zawsze używana, niezależnie od okna wglądu w przeszłość.
Ocenianie modeli za pomocą tabel cech szeregów czasowych
W przypadku oceniania modelu trenowanego za pomocą cech z tabel cech szeregów czasowych, magazyn cech usługi Databricks pobiera odpowiednie cechy, odczytując je w odpowiednim momencie czasowym z metadanych zawartych w modelu podczas trenowania. Ramka danych dostarczona do FeatureEngineeringClient.score_batch (w przypadku inżynierii cech w katalogu Unity) lub FeatureStoreClient.score_batch (dla magazynu cech w obszarze roboczym) musi zawierać kolumnę znacznika czasu o tej samej nazwie i DataType, co timestamp_lookup_keyFeatureLookup dostarczona do FeatureEngineeringClient.create_training_set lub FeatureStoreClient.create_training_set.
Wskazówka
Aby przyspieszyć wyszukiwanie, kiedy Photon jest włączony, przekaż use_spark_native_join=True do FeatureEngineeringClient.score_batch.
databricks-feature-engineering Wymaga to wersji 0.6.0 lub nowszej.
Publikowanie funkcji szeregów czasowych w sklepie online
Do publikowania tabel funkcji w sklepach online można użyć FeatureEngineeringClient.publish_table (dla Feature Engineering w Unity Catalog) lub FeatureStoreClient.publish_table (dla Workspace Feature Store). Magazyn funkcji usługi Databricks publikuje migawkę najnowszych wartości funkcji dla każdego klucza podstawowego w tabeli funkcji w sklepie online. Sklep online obsługuje wyszukiwanie klucza podstawowego, ale nie obsługuje wyszukiwania w określonym momencie.
Przykład notesu: tabela cech szeregów czasowych
Te przykładowe notesy ilustrują punktowe wyszukiwanie w tabelach cech szeregów czasowych.
Użyj tego notesu w obszarach roboczych z aktywowanymi funkcjami dla Unity Catalog.
Przykładowy notatnik tabeli cech szeregu czasowego (Unity Catalog)
Poniższy notatnik jest przeznaczony dla obszarów roboczych, które nie są przystosowane do Katalogu Unity. Używa sklepu funkcji w obszarze roboczym.