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.
Important
Bu özellik Genel Önizleme aşamasındadır. Çalışma alanı yöneticileri Bu özelliğe erişimi Önizlemeler sayfasından denetleyebilir. Bkz. Azure Databricks önizlemelerini yönetme.
Özellik Görünümleri, veri kaynaklarından özellikleri tanımlamanızı ve hesaplamanızı sağlar. Özellikler çeşitli kaynaklar (Delta tablosu, Kafka Stream ve istek zamanı verileri) ve hesaplamalar (zaman pencereli toplamalar, basit sütun seçimleri ve daha fazlası) kullanılarak tanımlanabilir. Bu kılavuz aşağıdaki iş akışlarını kapsar:
-
Özellik geliştirme iş akışı
- Model eğitiminde ve iş akışlarını sunmada kullanılabilecek Unity Kataloğu özellik nesnelerini tanımlamak için kullanın
create_feature. - Alternatif olarak,
Featurenesnelerini yerel olarak oluşturun ve ardından onları Unity Kataloğu'na kaydetmek içinregister_featurekullanın. Yerel olarak yapılan özelliklercreate_training_setile kayıt öncesinde birlikte kullanılabilir.
- Model eğitiminde ve iş akışlarını sunmada kullanılabilecek Unity Kataloğu özellik nesnelerini tanımlamak için kullanın
-
Model eğitim iş akışı
- Makine öğrenmesi için zamana bağlı toplanmış özellikleri hesaplamak için
create_training_setkullanın. Özellik Görünümleri ile eğitim hakkında ayrıntılı belgeler için bkz. Özellik Görünümleri ile modelleri eğitma.
- Makine öğrenmesi için zamana bağlı toplanmış özellikleri hesaplamak için
-
Özellik maddileştirme ve sunma iş akışı
- Bir özelliği
create_featureile tanımladıktan veyaget_featurekullanarak aldıktan sonra, özelliği veya özellik kümesini verimli bir şekilde yeniden kullanmak üzere, çevrimdışı bir mağazada veya çevrimiçi sunum için çevrimiçi bir mağazada uygulatmak içinmaterialize_featureskullanabilirsiniz. - Malzemeleşmiş görünümle
create_training_setkullanarak çevrimdışı toplu eğitim veri kümesini hazırlayın.
- Bir özelliği
API ayrıntıları için bkz. Özellik Görünümleri API başvurusu.
Requirements
Sunucusuz işlem veya Databricks Runtime 17.0 ML veya üzerini çalıştıran klasik bir işlem kümesi.
Özel Python paketini yüklemeniz gerekir. Not defterini her çalıştırdığınızda aşağıdaki kod satırlarını çalıştırın:
%pip install databricks-feature-engineering>=0.16.0 dbutils.library.restartPython()
Hızlı başlangıç örneği
Çalıştırılabilir hızlı başlangıç not defteri için bkz. Örnek not defteri.
from databricks.feature_engineering import FeatureEngineeringClient
from databricks.feature_engineering.entities import (
CronSchedule, DeltaTableSource, Feature, AggregationFunction,
Sum, Avg, ColumnSelection, TableTrigger,
TumblingWindow, SlidingWindow,
OfflineStoreConfig, OnlineStoreConfig,
)
from datetime import timedelta
CATALOG_NAME = "main"
SCHEMA_NAME = "feature_store"
TABLE_NAME = "transactions"
# 1. Create data source
source = DeltaTableSource(
catalog_name=CATALOG_NAME,
schema_name=SCHEMA_NAME,
table_name=TABLE_NAME,
)
# 2. Define features locally (no catalog/schema needed yet)
avg_feature = Feature(
source=source,
entity=["user_id"],
timeseries_column="transaction_time",
function=AggregationFunction(Avg(input="amount"), TumblingWindow(window_duration=timedelta(days=30))),
name="avg_transaction_30d",
)
sum_feature = Feature(
source=source,
entity=["user_id"],
timeseries_column="transaction_time",
function=AggregationFunction(Sum(input="amount"), SlidingWindow(window_duration=timedelta(days=7), slide_duration=timedelta(days=1))),
# name auto-generated: "amount_sum_sliding_7d_1d"
)
fe = FeatureEngineeringClient()
# 3. Explore features with compute_features
feature_df = fe.compute_features(features=[avg_feature, sum_feature])
feature_df.display()
# 4. Create training set using local features
# `labeled_df` should have columns "user_id", "transaction_time", and "target".
training_set = fe.create_training_set(
df=labeled_df,
features=[avg_feature, sum_feature],
label="target",
)
training_set.load_df().display()
# 5. Register features in Unity Catalog
avg_feature = fe.register_feature(
feature=avg_feature,
catalog_name=CATALOG_NAME,
schema_name=SCHEMA_NAME,
)
sum_feature = fe.register_feature(
feature=sum_feature,
catalog_name=CATALOG_NAME,
schema_name=SCHEMA_NAME,
)
# 6. Or use create_feature for a one-step define-and-register workflow
latest_amount = fe.create_feature(
source=source,
function=ColumnSelection("amount"),
entity=["user_id"],
timeseries_column="transaction_time",
catalog_name=CATALOG_NAME,
schema_name=SCHEMA_NAME,
name="latest_amount",
)
# 7. Train model
with mlflow.start_run():
training_df = training_set.load_df()
# training code
fe.log_model(
model=model,
artifact_path="recommendation_model",
flavor=mlflow.sklearn,
training_set=training_set,
registered_model_name=f"{CATALOG_NAME}.{SCHEMA_NAME}.recommendation_model",
)
# 8. (Optional) Materialize features for serving
# Features must be registered in UC before calling materialize_features
online_config = OnlineStoreConfig(
catalog_name=CATALOG_NAME,
schema_name=SCHEMA_NAME,
table_name_prefix="customer_features_serving",
online_store_name="customer_features_store",
)
# Aggregation features use CronSchedule and support both offline and online configs
fe.materialize_features(
features=[avg_feature, sum_feature],
offline_config=OfflineStoreConfig(
catalog_name=CATALOG_NAME,
schema_name=SCHEMA_NAME,
table_name_prefix="customer_features",
),
online_config=online_config,
trigger=CronSchedule(
quartz_cron_expression="0 0 * * * ?", # Hourly
timezone_id="UTC",
),
)
# ColumnSelection features use TableTrigger and only support online config
fe.materialize_features(
features=[latest_amount],
online_config=online_config,
trigger=TableTrigger(),
)
Örnek not defteri
Özellik Görünümleri hızlı başlangıç not defteri
Akış özellikleri
Delta tablolarındaki toplu iş özelliklerine ek olarak, gerçek zamanlı kullanım örnekleri için akış kaynaklarından özellikler tanımlayabilirsiniz. Akış özellikleri, toplu iş özellikleriyle aynı Özellik sınıfını (aynı Feature oluşturucular, aynı toplama işlevleri, aynı eğitim ve sunum iş akışları) kullanır. Bu nedenle toplu işlemden gerçek zamanlıya yükseltmek için en az kod değişikliği gerekir. Akış özellikleri materialize edildiklerinde, doğrudan model sunum uç noktalarınıza uçtan uca bir saniyenin altında güncellik (200 ms p99 gecikmesi) sağlar.
Akış özelliklerini kullanmak için önce bir Stream oluşturun, ardından buna bir StreamSource kullanarak başvurun. Akış kaynakları, Kafka’yı girdi olarak destekler ve eğitim için verilerin geçmişe dönük bir kopyasını veri alımı (Delta) tablosunda otomatik olarak tutar.
Akış özelliği tanımlama
StreamSource, bir Stream'e üç parçalı adıyla (catalog.schema.stream_name) başvurur. Akış, Unity Catalog'da güvenli bir nesne değildir; ancak Unity Catalog şeması kapsamındadır ve erişim, akışın alma tablosu tarafından yönetilir. Kafka iletisinin hangi bölümünün okunacağını belirtmek için, varlık, zaman serisi ve işlev tanımlarındaki sütun başvurularının önüne value. veya key. getirilmelidir. İç içe alanlar nokta gösterimi kullanılarak desteklenir (örneğin, value.user.address.city).
from databricks.feature_engineering import FeatureEngineeringClient
from databricks.feature_engineering.entities import (
StreamSource,
Feature,
AggregationFunction,
Sum,
RollingWindow,
)
from datetime import timedelta
client = FeatureEngineeringClient()
stream_source = StreamSource(
full_name="my_catalog.my_schema.my_stream",
)
feature = Feature(
name="user_purchase_sum",
source=stream_source,
entity=["value.user_id"],
timeseries_column="value.event_time",
function=AggregationFunction(
operator=Sum(input="value.amount"),
time_window=RollingWindow(window_duration=timedelta(hours=1)),
),
)
StreamSource'ta filtreleme koşulları
Akıştan satırları toplulaştırmadan önce filtrelemek için, tıpkı filter_condition üzerinde olduğu gibi DeltaTableSource kullanın.
stream_source = StreamSource(
full_name="my_catalog.my_schema.my_stream",
filter_condition="value.event_type = 'purchase'",
)
Akışlardan sütun seçimi
ColumnSelection özellikler akış kaynaklarıyla çalışır. Seçilen sütun, belirli bir noktadaki doğruluğu dikkate alırken her varlık için Stream'den en son değeri temsil eder.
from databricks.feature_engineering.entities import ColumnSelection
passenger_count = Feature(
name="passenger_count",
source=stream_source,
entity=["value.user_id"],
timeseries_column="value.event_time",
function=ColumnSelection(column="value.passenger_count"),
)
İç içe yerleştirilmiş alanlara erişme
nokta gösterimi kullanarak iç içe JSON alanlarına erişebilirsiniz (örneğin, value.nested_field.amount). Sunum sırasında istek yükü ile yanıt, yaprak düğüm adlarını kullanır (örneğin, amount yerine value.amount). Sunum uç noktası değerleri yönlendirmek için yaprak adları kullandığından, yaprak düğüm adları model veya Özellik Belirtimi içindeki tüm varlık, zaman aralıkları ve özellik çıktı sütunları arasında benzersiz olmalıdır.
Akış özellikleri için zaman pencereleri
Akış özellikleri yalnızca RollingWindow toplulaştırmalarını destekler. Kayan pencereler, en güncel veriler üzerinde sürekli olarak yeniden hesaplama yapar; bu da akış kaynaklarının gerçek zamanlı doğasıyla uyumludur.
TumblingWindow ve SlidingWindow sabit geçmiş aralıklar üzerinden toplu işlem için tasarlanmıştır.
Akış özellikleri örnek not defteri
Akış Özellik Görünümleri Hızlı Başlangıç Not Defteri
Model eğitimi ve çıkarımı
Modelleri eğitmek ve log_model(), score_batch() ve create_training_set() dâhil olmak üzere Özellik Görünümleriyle toplu çıkarım gerçekleştirmek için Özellik Görünümleriyle modelleri eğitme bölümüne bakın.
Özellik somutlaştırma
Özellikleri tanımladıktan sonra, eğitim ve hizmet iş akışlarında verimli bir şekilde yeniden kullanmak için bunları çevrimdışı veya çevrimiçi mağazalarda gerçekleştirebilirsiniz. Özellikleri gerçekleştirdikten sonra, CPU modeli sunma özelliğini kullanarak modelleri servis edebilirsiniz. Ayrıntılar için bkz. Özellik Görünümlerini Somutlaştırma.
En iyi yöntemler
Özellik adlandırma
- İş açısından kritik özellikler için açıklayıcı adlar kullanın.
- Ekipler arasında tutarlı adlandırma kurallarını izleyin.
- Özellik geliştirmeye başlarken otomatik olarak oluşturulan adları kullanın.
Zaman aralıkları
- Pencere sınırlarını iş döngüleriyle (günlük, haftalık) hizalayın.
- Kısa pencereler son eğilimleri yakalar ancak gürültülü olabilir. Daha uzun pencereler daha kararlı özellik dağıtımları üretir, ancak son davranış değişikliklerini kaçırabilir. Kullanım örneğiniz için temel alınan sinyalin ne kadar hızlı değiştiğine göre seçin. Örneğin, 7 günlük bir pencere günlük dalgalanmaları düzeltir ve tutarlı model girişleri üretirken, 1 saatlik bir zaman aralığı davranış değişikliklerine hızlı tepki verir, ancak model performansını düşüren varyansa neden olabilir. Dağıtım kaydığında modelinizin doğruluğu azalırsa girişleri dengelemek için daha uzun bir pencere kullanın.
- Atlayan ve kayan pencereler, sıralı (sürekli) pencerelerden daha ölçeklenebilir. Çoğu kullanım örneği için kayan pencerelerle başlayın.
Performance
- Veri taramalarını en aza indirmek için aynı veri kaynağındaki özellikleri tek
materialize_featuresbir çağrıda gerçekleştirin. - Gerçekleştirme sırasında daha iyi gruplandırma sağlamak için aynı veri kaynağındaki özellikler için aynı ayrıntı düzeyini (örneğin, 1 saatlik veya 1 günlük slayt sürelerinin tümü) kullanın.
Varlık sütunları ve filtre koşulları karşılaştırması
Aynı kaynak tablodaki özelliklerle çalışırken bu karar kılavuzunu kullanın:
Farklı toplama düzeylerine ihtiyacınız olduğunda (üzerindeentity) kullanın create_feature :
-
Müşteri düzeyinde özellikler (müşteri başına bir satır):
entity=["customer_id"] -
Müşteri-satıcı özellikleri (müşteri başına birden çok satır):
entity=["customer_id", "merchant_id"] -
Farklı toplama düzeyleri aynı
DeltaTableSourcedeğeri paylaşabilir: Her özellik tanımında farklıentitydeğerler belirtin
Satırları aynı toplama düzeyinde filtrelemeniz gerektiğinde,filter_condition (üzerinde DeltaTableSource) kullanın:
-
Yalnızca yüksek değerli işlemler:
filter_condition="amount > 100"(yine de müşteri başına toplanır) -
Yalnızca tamamlanan siparişler:
filter_condition="status = 'completed'"(yine de müşteri başına toplanır)
Temel kural: Değişikliğiniz varlık değeri başına farklı sayıda satırla sonuçlanırsa özellik tanımlarınızda farklı entity değerler kullanın. Yalnızca aynı toplamaya katkıda bulunan satırları filtreliyorsanız kaynakta kullanın filter_condition .
Ortak desenler
Müşteri analizi
from databricks.feature_engineering.entities import AggregationFunction, Sum, Count, RollingWindow
fe = FeatureEngineeringClient()
features = [
# Recency: Number of transactions in the last day
fe.create_feature(catalog_name="main", schema_name="ecommerce", source=transactions,
entity=["user_id"], timeseries_column="transaction_time",
function=AggregationFunction(Count(input="transaction_id"), RollingWindow(window_duration=timedelta(days=1)))),
# Frequency: transaction count over the last 90 days
fe.create_feature(catalog_name="main", schema_name="ecommerce", source=transactions,
entity=["user_id"], timeseries_column="transaction_time",
function=AggregationFunction(Count(input="transaction_id"), RollingWindow(window_duration=timedelta(days=90)))),
# Monetary: total spend in the last month
fe.create_feature(catalog_name="main", schema_name="ecommerce", source=transactions,
entity=["user_id"], timeseries_column="transaction_time",
function=AggregationFunction(Sum(input="amount"), RollingWindow(window_duration=timedelta(days=30)))),
]
Eğilim çözümlemesi
# Compare recent vs. historical behavior
fe = FeatureEngineeringClient()
recent_avg = fe.create_feature(
catalog_name="main", schema_name="ecommerce",
source=transactions, entity=["user_id"], timeseries_column="transaction_time",
function=AggregationFunction(Avg(input="amount"), RollingWindow(window_duration=timedelta(days=7))),
)
historical_avg = fe.create_feature(
catalog_name="main", schema_name="ecommerce",
source=transactions, entity=["user_id"], timeseries_column="transaction_time",
function=AggregationFunction(Avg(input="amount"), RollingWindow(window_duration=timedelta(days=7), delay=timedelta(days=7))),
)
Mevsimsel desenler
# Same day of week, 4 weeks ago
fe = FeatureEngineeringClient()
weekly_pattern = fe.create_feature(
catalog_name="main", schema_name="ecommerce",
source=transactions, entity=["user_id"], timeseries_column="transaction_time",
function=AggregationFunction(Avg(input="amount"), RollingWindow(window_duration=timedelta(days=1), delay=timedelta(weeks=4))),
)
Sınırlamalar
- Api'de
create_training_setkullanıldığında varlık ve zaman aralığı sütunlarının adları eğitim (etiketli) veri kümesi ile özellik tanımları arasında eşleşmelidir. - Eğitim veri kümesinde sütun olarak
labelkullanılan sütun adı, s tanımlamakFeatureiçin kullanılan kaynak tablolarda bulunmamalıdır. - API'de
create_featuresınırlı bir işlev listesi (UDAFs) desteklenir. Bkz . Desteklenen işlevler. - Varlık sütunları
DATEveyaTIMESTAMPtüründe olamaz. -
RequestSource,ScalarDataTypeiçinde tanımlanan yalnızca skaler veri türlerini destekler:INTEGER,FLOAT,BOOLEAN,STRING,DOUBLE,LONG,TIMESTAMP,DATE,SHORT. Diziler, haritalar ve yapılar gibi karmaşık türler desteklenmez. -
RequestSourcetoplama işlevlerini veya zaman pencerelerini desteklemez. YalnızcaColumnSelectionişlevler kullanılabilir. - Varlık sütunu adları, zaman aralıkları sütun adları ve istek özelliği sütun adları kümesi, bir eğitim kümesindeki veya hizmet uç noktasındaki tüm kaynaklar arasında genel olarak benzersiz olmalıdır.
-
score_batchsunucusuz işlemde başarılı olmayabilir. Databricks Runtime 17.0 ML veya üzerini çalıştıran klasik bir işlem kümesi kullanarak bu sorunu geçici olarak düzeltin.
Gerçekleştirmeye özgü sınırlamalar için bkz. Sınırlamalar.