Zaman serisi özellik tablolarını kullanarak belirli bir noktaya destek
Bu makalede, bir etiket gözleminin kaydedildiği zaman itibarıyla özellik değerlerini doğru yansıtan bir eğitim veri kümesi oluşturmak için belirli bir noktaya doğruluk özelliğinin 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 zaman damgası için kaydedilen özellik değeri, ana hatlı turuncu daire tarafından gösterilen, bu zaman damgasından önceki en son değerdir. 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 noktaya aramalarda daha iyi performans için Databricks, zaman serisi tablolarında Sıvı Kümelemesi (0,6.0 ve üzeri için
databricks-feature-engineering
) veya Z-Ordering (0.6.0 ve üzeri içindatabricks-feature-engineering
) uygulamanızı önerir. - Belirli bir noktaya arama işlevi bazen "zaman yolculuğu" olarak adlandırılır. Databricks Özellik Deposu'ndaki belirli bir noktaya işlevi 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. Yer gerçeği 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 join kullanılarak birincil anahtara (diyagramda gösterilmez) ve zaman damgası anahtarına göre eşleştirilir. AS OF birleştirmesi, zaman damgası sırasında özelliğin en son değerinin eğitim 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:
temp | 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 için: Özellik Deposu istemcisi v0.3.7 ve üzeri.
Zaman ile ilgili anahtarları belirtme
Belirli bir noktaya işlevselliği kullanmak için, 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) kullanarak timeseries_columns
zamanla ilgili anahtarları belirtmeniz gerekir. Bu, özellik tablosu satırlarının tam bir zaman eşleşmesine göre birleştirmek yerine sütunun değerinden timestamps_keys
sonra olmayan belirli bir birincil anahtar için en son değerle eşleştirilerek birleştirilmesi gerektiğini gösterir.
veya timestamp_keys
kullanmazsanız timeseries_columns
ve yalnızca bir timeseries sütununu birincil anahtar sütunu olarak belirlediğinizde, özellik deposu birleşimler sırasında timeseries sütununa belirli bir nokta mantığı 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 TIMESERIES birincil anahtarı olan tüm tablolar bir zaman serisi özellik tablosudur. Nasıl oluşturulacağı hakkında bilgi için bkz . Unity Kataloğu'nda özellik tablosu oluşturma.
Yerel çalışma alanında zaman serisi özellik tablosu oluşturma
Yerel Çalışma Alanı Özellik Deposu'nda bir zaman serisi özellik tablosu oluşturmak için DataFrame veya şema, zaman damgası anahtarı olarak belirlediğiniz bir sütun içermelidir.
Özellik Deposu istemcisi v0.13.4'den başlayarak, zaman damgası anahtar sütunları bağımsız değişkeninde primary_keys
belirtilmelidir. Zaman damgası anahtarları, özellik tablosundaki her satırı benzersiz olarak tanımlayan "birincil anahtarların" bir parçasıdır. Diğer birincil anahtar sütunları gibi zaman damgası anahtar sütunları da değer içeremez NULL
.
Unity Kataloğunda Özellik Mühendisliği
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,
)
Çalışma Alanı Özellik Deposu istemcisi v0.13.4 ve üzeri
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,
)
Çalışma Alanı Özellik Deposu istemcisi v0.13.3 ve altı
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,
)
Zaman serisi özellik tablosunda bir zaman damgası anahtarı olmalıdır ve bölüm sütunu olamaz. Zaman damgası anahtar sütunu veya DateType
olmalıdırTimestampType
.
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.
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 sparsity değerini 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 tablolarına yazma akışı desteklenir.
Zaman serisi özellik tablosuyla eğitim kümesi oluşturma
Bir zaman serisi özellik tablosundaki özellik değerleri için belirli bir noktaya arama yapmak için, özelliğin FeatureLookup
içinde, zaman serisi özelliklerinin arandığı zaman damgalarını içeren DataFrame sütununun adını belirten bir timestamp_lookup_key
belirtmelisiniz. Databricks Özellik Deposu, DataFrame sütununda belirtilen ve birincil anahtarları (zaman damgası anahtarları hariç) DataFrame timestamp_lookup_key
lookup_key
sütunlarındaki değerlerle eşleşen veya null
böyle bir özellik değeri yoksa en son özellik değerlerini 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 adresine geçin use_spark_native_join=True
FeatureEngineeringClient.create_training_set
. Bunun için databricks-feature-engineering
0.6.0 veya üzeri bir sürüm gerekir.
Çalışma Alanı Özellik Deposu
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()
Bir zaman serisi özellik tablosundaki herhangi FeatureLookup
biri belirli bir noktaya arama olmalıdır, bu nedenle DataFrame'inizde kullanılacak bir timestamp_lookup_key
sütun belirtmelidir. Belirli bir noktaya arama, zaman serisi özellik tablosunda depolanan özellik değerlerine sahip null
satırları 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 içindeki parametresini lookback_window
FeatureLookup
kullanın.
veri türü lookback_window
olmalıdır datetime.timedelta
ve 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 Deposu
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 FeatureLookup
ile çağırdığınızdacreate_training_set
, otomatik olarak belirli bir noktaya birleştirme gerçekleştirir ve 7 günden 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
Zaman serisi özellik tablolarındaki özelliklerle eğitilen bir modeli puanladığınızda Databricks Özellik Deposu, eğitim sırasında modelle birlikte paketlenmiş meta verileri içeren belirli bir noktaya aramaları kullanarak 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 FeatureStoreClient.create_training_set
için sağlanan FeatureEngineeringClient.create_training_set
ile aynı ada sahip DataType
timestamp_lookup_key
FeatureLookup
bir zaman damgası sütunu içermelidir.
İpucu
Photon etkinleştirildiğinde daha hızlı arama performansı için adresine geçin use_spark_native_join=True
FeatureEngineeringClient.score_batch
. 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) veya FeatureStoreClient.publish_table
(Çalışma Alanı Özellik Deposu için) kullanabilirsiniz FeatureEngineeringClient.publish_table
. 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 belirli bir noktaya aramayı desteklemez.
Not defteri örneği: Zaman serisi özellik tablosu
Bu örnek not defterleri, zaman serisi özellik tablolarındaki belirli bir noktaya aramaları gösterir.
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'na sahiptir.