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?

Farklı zamanlarda gelen özellik değerleri.

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çindatabricks-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.

örnek özellik tablosu verileri

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.

zaman noktası nasıl çalışır?

Ş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.

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_keyskullanmazsanı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 DateTypeolmalı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 FeatureLookupiç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 FeatureLookupkullanı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 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 FeatureLookupile ç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_setiç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)

Not defterini alma

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.

Zaman serisi özellik tablosu örnek not defteri (Unity Kataloğu için çalışma alanları etkinleştirilmedi)

Not defterini alma