Aracılığıyla paylaş


Belirli bir noktaya destekle zaman serisi özellik tablolarını kullanma

Modeli eğitmek için kullanılan verilerde genellikle yerleşik zaman bağımlılıkları bulunur. Örneğin, fabrika katında hangi makinelerin bakıma ihtiyacı olduğunu tahmin etmek için bir model eğitiyorsanız, makinenin hizmete ihtiyacı olup olmadığını gösteren hedef etiketlerin yanı sıra birçok makine için sensör ölçümleri ve kullanım verileri içeren geçmiş veri kümeleriniz olabilir. Veri kümesi, bir bakım hizmeti gerçekleştirilmeden önce ve sonra makineler için veriler içerebilir.

Modeli oluştururken, gözlemlenen hedef değerin zamanına kadar yalnızca özellik değerlerini dikkate almanız gerekir (hizmete ihtiyaç duyar veya hizmete ihtiyaç yoktur). Her gözlemin zaman damgasını açıkça dikkate almazsanız, eğitim için hedef değerin zaman damgasından sonra ölçülen özellik değerlerini istemeden kullanabilirsiniz. Buna "veri sızıntısı" denir 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.

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 zaman serisi tablolarına Z-Ordering uygulamanızı öneririz.
  • 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.
  • 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. Yalnızca bir timeseries sütununu birincil anahtar sütunu olarak belirlediğinizde, özellik deposu birleşimler sırasında zaman değerleri 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.

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

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

Ç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_windowFeatureLookupkullanı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 DataTypetimestamp_lookup_keyFeatureLookup bir zaman damgası sütunu içermelidir.

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, çevrimiçi depoyu oluşturana bağlı OnlineStoreSpec olarak çevrimiçi mağazada anlık görüntü veya zaman serisi verileri yayımlama işlevi sağlar. Tabloda her yayımlama modunun ayrıntıları gösterilir.

Çevrimiçi mağaza sağlayıcısı Anlık görüntü yayımlama modu Pencere yayımlama modu
Azure Cosmos DB (v0.5.0 ve üzeri) X
Azure MySQL (Tek Sunucu) X
Azure SQL Server X

Zaman serisi anlık görüntüsünü yayımlama

Bu, özellik tablosundaki her birincil anahtar için en son özellik değerlerini yayımlar. Çevrimiçi mağaza birincil anahtar aramasını destekler ancak belirli bir noktaya aramayı desteklemez.

Databricks Özellik Deposu, yaşam süresini desteklemeyen çevrimiçi mağazalar için yalnızca anlık görüntü yayımlama modunu destekler. Yaşam süresini destekleyen çevrimiçi mağazalar için, oluşturma sırasında yaşam süresi (ttl) belirtilmediği OnlineStoreSpec sürece varsayılan yayımlama modu anlık görüntüdür.

Zaman serisi penceresi yayımlama

Bu, özellik tablosundaki her birincil anahtar için tüm özellik değerlerini çevrimiçi mağazada yayımlar ve süresi dolan kayıtları otomatik olarak kaldırır. Kaydın zaman damgası (UTC cinsinden) geçmişte belirtilen yaşam süresinden fazlaysa, kaydın süresi dolmuş olarak kabul edilir. Yaşam süresiyle ilgili ayrıntılar için buluta özgü belgelere bakın.

Çevrimiçi mağaza birincil anahtar aramasını destekler ve özellik değerini en son zaman damgasıyla otomatik olarak alır.

Bu yayımlama modunu kullanmak için, çevrimiçi mağazayı oluştururken yaşam süresi (ttl) OnlineStoreSpec için bir değer sağlamanız gerekir. ttl ayarlandıktan sonra değiştirilemez. Sonraki tüm yayımlama çağrıları öğesini devralır ttl ve içinde OnlineStoreSpecaçıkça tanımlamak için gerekli değildir.

Not defteri örneği: Zaman serisi özellik tablosu

Aşağıdaki not defteri, Çalışma Alanı Özellik Deposu'ndaki zaman serisi özellik tablolarındaki belirli bir noktaya aramaları gösterir.

Zaman serisi özellik tablosu örnek not defteri

Not defterini alma