Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfada, etiket gözleminin kaydedildiği zamandaki özellik değerlerini doğru yansıtan bir eğitim veri kümesi oluşturmak için anlık doğruluğun nasıl kullanılacağı açıklanmaktadır. Bu, etiket kaydedildiği sırada kullanılamayan model eğitimi için özellik değerlerini kullandığınızda oluşan veri sızıntısını önlemek için önemlidir. Bu tür bir hatayı algılamak zor olabilir ve modelin performansını olumsuz etkileyebilir.
Zaman serisi özellik tabloları, eğitim veri kümesindeki her satırın, satırın zaman damgasından itibaren bilinen en son özellik değerlerini temsil etmesini sağlayan bir zaman damgası anahtar sütunu içerir. Zaman serisi verileri, olay tabanlı veriler veya zaman toplanmış veriler gibi özellik değerleri zaman içinde her değiştiğinde zaman serisi özellik tablolarını kullanmanız gerekir.
Aşağıdaki diyagramda zaman damgası anahtarının nasıl kullanıldığı gösterilmektedir. Her bir zaman damgası için kaydedilen özellik değeri, bu zaman damgasından önceki en son değerdir ve ana hatlarıyla belirtilmiş turuncu daire tarafından gösterilmektedir. Hiçbir değer kaydedilmediyse özellik değeri null olur. Daha fazla ayrıntı için bkz . Zaman serisi özellik tabloları nasıl çalışır?
Not
- Databricks Runtime 13.3 LTS ve üzeri ile Unity Kataloğu'ndaki birincil anahtarları ve zaman damgası anahtarlarını içeren tüm Delta tabloları zaman serisi özellik tablosu olarak kullanılabilir.
- Belirli bir zaman aralığı aramalarda daha iyi performans için Databricks, zaman serileri tablolarında sıvı kümelemeyi (
databricks-feature-engineering0.6.0 ve üzeri) önerir. Bkz Tablolar için sıvı kümelemeyi kullanma ve Veri atlamayı önleme. - Belirli bir anda arama işlevi bazen "zaman yolculuğu" olarak adlandırılır. Databricks Özellik Deposu'ndaki belirli bir zamandaki işlevsellik Delta Lake zaman yolculuğuyla ilgili değildir.
Zaman serisi özellik tabloları nasıl çalışır?
Aşağıdaki özellik tablolarına sahip olduğunuzu varsayalım. Bu veriler örnek not defterinden alınır.
Tablolarda bir odadaki sıcaklığı, göreli nemi, ortam ışığını ve karbondioksiti ölçen sensör verileri bulunur. Gerçek durum tablosu, odada bir kişinin mevcut olup olmadığını gösterir. Tabloların her birinin birincil anahtarı ('room') ve zaman damgası anahtarı ('ts') vardır. Kolaylık olması için yalnızca birincil anahtarın ('0') tek bir değerine ait veriler gösterilir.
Aşağıdaki şekilde, zaman damgası anahtarının bir eğitim veri kümesinde belirli bir noktaya doğruluğu sağlamak için nasıl kullanıldığı gösterilmektedir. Özellik değerleri, AS OF birleştirme kullanılarak birincil anahtara (diyagramda gösterilmez) ve zaman damgası anahtarına göre eşleştirilir. AS OF birleştirmesi, zaman damgasının olduğu anda özelliğin en son değerinin eğitim veri kümesinde kullanılmasını sağlar.
Şekilde gösterildiği gibi eğitim veri kümesi, gözlemlenen yer gerçeği üzerindeki zaman damgasından önce her algılayıcı için en son özellik değerlerini içerir.
Zaman damgası anahtarını hesaba katmadan bir eğitim veri kümesi oluşturduysanız, bu özellik değerlerini içeren bir satırınız olabilir ve temel gerçeği gözlemleyebilirsiniz:
| sıcaklık | Rh | ışık | co2 | temel gerçek |
|---|---|---|---|---|
| 15.8 | 32 | 212 | 630 | 0 |
Ancak, bu eğitim için geçerli bir gözlem değildir, çünkü 630'un co2 okuması 8:52'de, zemin gerçeğinin gözlemlenmesinden sonra 8:50'de alınmıştır. Gelecekteki veriler eğitim kümesine "sızdırılıyor", bu da modelin performansını bozacak.
Gereksinimler
- Unity Kataloğu'nda Özellik Mühendisliği için: Unity Kataloğu istemcisinde Özellik Mühendisliği (herhangi bir sürüm).
- Çalışma Alanı Özellik Deposu (eski) için: Özellik Deposu istemcisi v0.3.7 ve üzeri.
Zaman ile ilgili anahtarları belirtme
Zamana bağlı işlevselliği kullanmak için, zamanla ilgili anahtarları timeseries_columns bağımsız değişkenini (Unity Kataloğu'nda Özellik Mühendisliği için) veya timestamp_keys bağımsız değişkenini (Çalışma Alanı Özellik Deposu için) belirterek girmeniz gerekir. Özellik tablosu satırlarının, tam bir zaman eşleşmesine göre birleştirmek yerine, birincil anahtar için timestamps_keys sütununun değerinden daha geç olmayan en yakın ve en son değerle eşleştirilerek birleştirilmesi gerektiğini gösterir.
ne timeseries_columns ne de timestamp_keys kullanıyorsanız ve yalnızca bir zaman serisi sütununu birincil anahtar sütunu olarak belirliyorsanız, özellik deposu birleşimler sırasında zaman serisi sütununa anlık mantık uygulamaz. Bunun yerine, zaman damgasından önceki tüm satırları eşleştirmek yerine yalnızca tam saat eşleşmesi olan satırlarla eşleşir.
Unity Kataloğu'nda zaman serisi özellik tablosu oluşturma
Unity Kataloğu'nda, birincil anahtara sahip herhangi bir TIMESERIES tablo bir zaman serisi özellik tablosudur. Zaman serisi özellik tablosu oluşturmak için bkz. Unity Kataloğu'nda özellik tablosu oluşturma. Aşağıdaki örneklerde farklı zaman serisi tablo türleri gösterilmektedir.
Zaman serisi tablolarını çevrimiçi mağazalara yayımlama
Zaman damgası verileri içeren özellik tablolarıyla çalışırken, çevrimiçi hizmet gereksinimlerinize bağlı olarak zaman damgası sütununu bir timeseries_column olarak mı yoksa normal sütun olarak mı kabul edeceğinizi düşünmeniz gerekir.
Zaman serisi belirlemesiyle işaretlenmiş zaman damgası sütunları
Eğitim veri kümeleri için belirli bir noktaya doğruluğa ihtiyacınız olduğunda ve çevrimiçi uygulamalarda belirli bir zaman damgasından itibaren en son özellik değerlerini aramak istediğinizde kullanın timeseries_column . Zaman serisi özellik tablosunda bir zaman damgası anahtarı olmalıdır ve bölüm sütunu olamaz. Zaman damgası anahtar sütunu TimestampType veya DateType olmalıdır.
Databricks, yüksek performanslı yazma ve aramalar sağlamak için zaman serisi özellik tablolarında en fazla iki birincil anahtar sütunu olmasını önerir.
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'si
-- 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'
);
Important
Özellik tablosunda birincil anahtar olarak DATE veya TIMESTAMP sütunu varsa ve bu sütun timeseries_columns kullanılarak zaman çizelgesi sütunu olarak bildirilmemişse, tabloyu create_feature_spec(), create_training_set() veya publish_table() ile kullanamazsınız. Bu API'ler, tüm DATE ve TIMESTAMP birincil anahtar sütunlarının zaman aralığı sütunu olarak bildirildiğini gerektirir.
Kullanım örneğiniz düz arama anahtarı olarak bir tarih veya zaman damgası değeri gerektiriyorsa (tam eşleşme semantiği, belirli bir nokta mantığı yoksa) sütun türünü STRING olarak değiştirin.
Zaman serisi özellik tablosunu güncelleştirme
Zaman serisi özellik tablolarına özellik yazarken DataFrame'inizin, normal özellik tablolarından farklı olarak özellik tablosunun tüm özellikleri için değerler sağlaması gerekir. Bu kısıtlama, zaman serisi özellik tablosundaki zaman damgaları arasında özellik değerlerinin seyrekliğini azaltır.
Unity Kataloğunda Özellik Mühendisliği
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"
)
Çalışma Alanı Özellik Deposu istemcisi v0.13.4 ve üzeri
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"
)
Zaman serisi özellik tablosuna akış yazma desteklenir.
Zaman serisi özellik tablosuyla eğitim kümesi oluşturma
Bir zaman serisi özellik tablosundaki özellik değerleri için belirli bir zaman noktasında arama yapmak için, özelliğin timestamp_lookup_key içinde, zaman serisi özelliklerinin arandığı zaman damgalarını içeren DataFrame sütununun adını belirten bir FeatureLookup belirtmelisiniz. Databricks Özellik Deposu, DataFrame'in timestamp_lookup_key sütununda belirtilen zaman damgasından önceki en son özellik değerlerini ve birincil anahtarları (zaman damgası anahtarları hariç) DataFrame'in lookup_key sütunlarındaki değerlerle eşleşen, veya böyle bir özellik değeri yoksa null sütunundakileri alır.
Unity Kataloğunda Özellik Mühendisliği
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()
İpucu
Photon etkinleştirildiğinde daha hızlı arama performansı için değerini use_spark_native_join=True'ye iletin. Bunun için databricks-feature-engineering 0.6.0 veya üzeri bir sürüm gerekir.
Çalışma Alanı Özellik Mağazası
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()
Zaman serisi özellik tablosunda herhangi bir FeatureLookup, belirli bir an araması olmalıdır, bu nedenle DataFrame'inizde kullanılacak bir timestamp_lookup_key sütunu belirtmelidir. Noktasal zaman araması, zaman serisi özellik tablosunda depolanan özellik değerlerine sahip null satırlarını atlamaz.
Geçmiş özellik değerleri için zaman sınırı ayarlama
Özellik Deposu istemcisi v0.13.0 veya üzeri ya da Unity Kataloğu istemcisindeki Özellik Mühendisliği'nin herhangi bir sürümüyle, eski zaman damgalarına sahip özellik değerlerini eğitim kümesinden hariç tutabilirsiniz. Bunu yapmak için lookback_window içinde bulunan FeatureLookup parametresini kullanın.
veri türü lookback_window olmalıdır datetime.timedeltave varsayılan değerdir None (yaşa bakılmaksızın tüm özellik değerleri kullanılır).
Örneğin, aşağıdaki kod 7 günden eski tüm özellik değerlerini dışlar:
Unity Kataloğunda Özellik Mühendisliği
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)
)
]
Çalışma Alanı Özellik Mağazası
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)
)
]
Yukarıdaki create_training_set ile çağrı yaptığınızda FeatureLookup, otomatik olarak belirli bir zamandaki birleştirmeyi gerçekleştirir ve 7 günden daha eski özellik değerlerini dışlar.
Geri arama penceresi eğitim ve toplu çıkarım sırasında uygulanır. Çevrimiçi çıkarım sırasında, geri arama penceresinden bağımsız olarak en son özellik değeri her zaman kullanılır.
Zaman serisi özellik tabloları ile modelleri puanla
Bir modeli, zaman serisi özellik tablolarından gelen özelliklerle puanladığınızda, Databricks Özellik Deposu, eğitim sırasında modelle birlikte paketlenmiş olan meta verileri kullanarak zaman noktası sorgulamalarıyla uygun özellikleri alır. Sağladığınız FeatureEngineeringClient.score_batch DataFrame (Unity Kataloğu'nda Özellik Mühendisliği için) veya FeatureStoreClient.score_batch (Çalışma Alanı Özellik Deposu için) veya DataTypeiçin sağlanan timestamp_lookup_key ile aynı ada sahip FeatureLookupFeatureEngineeringClient.create_training_setFeatureStoreClient.create_training_set bir zaman damgası sütunu içermelidir.
İpucu
Photon etkinleştirildiğinde daha hızlı arama performansı için değerini use_spark_native_join=True'ye iletin. Bunun için databricks-feature-engineering 0.6.0 veya üzeri bir sürüm gerekir.
Zaman serisi özelliklerini çevrimiçi bir mağazada yayımlama
Zaman serisi özellik tablolarını çevrimiçi mağazalarda yayımlamak için Unity Kataloğu'nda Özellik Mühendisliği için FeatureEngineeringClient.publish_table veya Çalışma Alanı Özellik Deposu için FeatureStoreClient.publish_table kullanabilirsiniz. Databricks Özellik Deposu, özellik tablosundaki her birincil anahtar için en son özellik değerlerinin anlık görüntüsünü çevrimiçi mağazada yayımlar. Çevrimiçi mağaza birincil anahtar aramasını destekler ancak zaman noktasında aramayı desteklemez.
Not defteri örneği: Zaman serisi özellik tablosu
Bu örnek not defterleri, zaman serisi özellik tablolarında belirli bir zamandaki sorguları örnekler.
Unity Kataloğu için etkinleştirilmiş çalışma alanlarında bu not defterini kullanın.
Zaman serisi özellik tablosu örnek not defteri (Unity Kataloğu)
Aşağıdaki not defteri Unity Kataloğu için etkinleştirilmemiş çalışma alanları için tasarlanmıştır. Çalışma Alanı Özellik Deposu'nu kullanır.