Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Halaman ini menjelaskan cara menggunakan kebenaran titik waktu untuk membuat himpunan data pelatihan yang secara akurat mencerminkan nilai fitur pada saat pengamatan label direkam. Ini penting untuk mencegah kebocoran data, yang terjadi ketika Anda menggunakan nilai fitur untuk pelatihan model yang tidak tersedia pada saat label direkam. Jenis kesalahan ini bisa sulit dideteksi dan dapat berdampak negatif pada performa model.
Tabel fitur rangkaian waktu menyertakan kolom kunci tanda waktu yang memastikan bahwa setiap baris dalam himpunan data pelatihan mewakili nilai fitur terbaru yang diketahui pada tanda waktu baris. Anda harus menggunakan tabel fitur rangkaian waktu setiap kali nilai fitur berubah dari waktu ke waktu, misalnya dengan data rangkaian waktu, data berbasis peristiwa, atau data agregat waktu.
Diagram berikut menunjukkan bagaimana kunci tanda waktu digunakan. Nilai fitur yang direkam untuk setiap tanda waktu adalah nilai terbaru sebelum tanda waktu tersebut, yang ditunjukkan oleh lingkaran oranye yang diuraikan. Jika tidak ada nilai yang direkam, nilai fitur adalah null. Untuk detail selengkapnya, lihat Cara kerja tabel fitur rangkaian waktu.
Catatan
- Dengan Databricks Runtime 13.3 LTS ke atas, tabel Delta apa pun di Unity Catalog dengan kunci primer dan kunci tanda waktu dapat digunakan sebagai tabel fitur rangkaian waktu.
- Untuk performa yang lebih baik dalam pencarian point-in-time, Databricks merekomendasikan pengklusteran cairan (
databricks-feature-engineering0,6.0 ke atas) pada tabel rangkaian waktu. Lihat Menggunakan pengklusteran cair untuk tabel dan Melewatkan data. - Fungsi pencarian titik waktu kadang-kadang disebut sebagai "perjalanan waktu". Fungsionalitas titik waktu di Databricks Feature Store tidak terkait dengan perjalanan waktu Delta Lake.
Cara kerja tabel fitur rangkaian waktu
Misalkan Anda memiliki tabel fitur berikut. Data ini diambil dari contoh buku catatan.
Tabel berisi data sensor yang mengukur suhu, kelembaban relatif, cahaya sekitar, dan karbon dioksida dalam ruangan. Tabel kebenaran dasar menunjukkan apakah seseorang hadir di dalam ruangan. Setiap tabel memiliki kunci primer ('ruangan') dan kunci tanda waktu ('ts'). Untuk kesederhanaan, hanya data untuk satu nilai kunci primer ('0') yang ditampilkan.
Gambar berikut menggambarkan bagaimana kunci tanda waktu digunakan untuk memastikan kebenaran titik waktu dalam himpunan data pelatihan. Nilai fitur dicocokkan berdasarkan kunci primer (tidak ditampilkan dalam diagram) dan kunci penanda waktu, menggunakan AS OF join. Gabungan AS OF memastikan bahwa nilai terbaru dari fitur pada saat tanda waktu digunakan dalam set pelatihan.
Seperti yang ditunjukkan pada gambar, himpunan data pelatihan mencakup nilai fitur terbaru untuk setiap sensor sebelum tanda waktu pada kebenaran dasar yang diamati.
Jika Anda membuat himpunan data pelatihan tanpa memperhitungkan kunci tanda waktu, Anda mungkin memiliki baris dengan nilai fitur ini dan mengamati kebenaran dasar:
| suhu | Rh | terang | co2 | kebenaran dasar |
|---|---|---|---|---|
| 15,8 | 32 | 212 | 630 | 0 |
Namun, ini bukan pengamatan yang valid untuk pelatihan, karena pembacaan CO2 630 diambil pada pukul 8:52, yaitu setelah pengamatan kenyataan di lapangan pada pukul 8:50. Data di masa depan "bocor" ke dalam set pelatihan, yang akan mengganggu performa model.
Persyaratan
- Untuk Rekayasa Fitur di Unity Catalog: Rekayasa Fitur di klien Unity Catalog (versi apa pun).
- Untuk Penyimpanan Fitur Ruang Kerja (warisan): Klien Penyimpanan Fitur v0.3.7 ke atas.
Cara menentukan kunci terkait waktu
Untuk menggunakan fungsionalitas point-in-time, Anda harus menentukan kunci yang berhubungan dengan waktu menggunakan argumen timeseries_columns (untuk Rekayasa Fitur di Katalog Unity) atau argumen timestamp_keys (untuk Penyimpanan Fitur Ruang Kerja). Ini menunjukkan bahwa baris tabel fitur harus digabungkan dengan mencocokkan nilai terbaru untuk kunci primer tertentu yang tidak lebih baru dari nilai di kolom timestamps_keys, bukannya bergabung berdasarkan kecocokan waktu yang tepat.
Jika Anda tidak menggunakan timeseries_columns atau timestamp_keys, dan hanya menunjuk kolom rangkaian waktu sebagai kolom kunci utama, feature store tidak menerapkan logika point-in-time pada kolom rangkaian waktu selama proses join. Sebaliknya, hanya mencocokkan baris yang memiliki waktu tepat, bukan mencocokkan semua baris sebelum stempel waktu.
Membuat tabel fitur rangkaian waktu di Katalog Unity
Di Katalog Unity, tabel apa pun dengan TIMESERIES kunci utama adalah tabel fitur rangkaian waktu. Untuk membuat tabel fitur rangkaian waktu, lihat Membuat tabel fitur di Katalog Unity. Contoh berikut mengilustrasikan berbagai jenis tabel rangkaian waktu.
Menerbitkan tabel rangkaian waktu ke toko online
Saat bekerja dengan tabel fitur yang berisi data tanda waktu, Anda perlu mempertimbangkan apakah akan menetapkan kolom tanda waktu sebagai timeseries_column atau memperlakukannya sebagai kolom biasa, tergantung pada persyaratan penyajian online Anda.
Kolom tanda waktu ditandai dengan penandaan rangkaian waktu
Gunakan timeseries_column saat Anda memerlukan keakuratan pada waktu tertentu untuk pelatihan himpunan data dan ingin mencari nilai fitur terbaru berdasarkan stempel waktu tertentu di aplikasi online. Tabel fitur rangkaian waktu harus memiliki satu kunci tanda waktu dan tidak dapat memiliki kolom partisi apa pun. Kolom kunci tanda waktu harus dari TimestampType atau DateType.
Databricks merekomendasikan bahwa tabel fitur rangkaian waktu memiliki tidak lebih dari dua kolom kunci utama untuk memastikan penulisan dan pencarian berkinerja.
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
-- 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
Jika tabel fitur memiliki kolom DATE atau kolom TIMESTAMP sebagai kunci utama yang tidak diumumkan sebagai kolom timeseries menggunakan timeseries_columns, maka Anda tidak dapat menggunakan tabel tersebut dengan create_feature_spec(), create_training_set(), atau publish_table(). API ini mengharuskan semua DATE kolom kunci utama dan TIMESTAMP dideklarasikan sebagai kolom timeseries.
Jika kasus penggunaan Anda memerlukan nilai tanggal atau tanda waktu sebagai kunci pencarian biasa (semantik pencocokan persis, tidak ada logika titik waktu), ubah jenis kolom menjadi STRING sebagai gantinya.
Memperbarui tabel fitur rangkaian waktu
Saat menulis fitur ke tabel fitur rangkaian waktu, DataFrame Anda harus menyediakan nilai untuk semua fitur tabel fitur, tidak seperti tabel fitur biasa. Batasan ini mengurangi sparitas nilai fitur di seluruh tanda waktu dalam tabel fitur rangkaian waktu.
Rekayasa Fitur dalam Katalog Unity
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"
)
Client Feature Store Workspace v0.13.4 dan seterusnya
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"
)
Penulisan streaming ke tabel fitur deret waktu didukung.
Membuat set pelatihan dengan tabel fitur rangkaian waktu
Untuk melakukan pencarian titik waktu untuk nilai fitur dari tabel fitur rangkaian waktu, Anda harus menentukan timestamp_lookup_key di fitur FeatureLookup, yang menunjukkan nama kolom DataFrame yang berisi tanda waktu untuk mencari fitur rangkaian waktu. Penyimpanan Fitur Databricks mengambil nilai fitur terbaru yang lebih awal dari tanda waktu yang ditentukan dalam kolom DataFrame timestamp_lookup_key dan yang kunci utamanya (tidak termasuk kunci tanda waktu) cocok dengan nilai di kolom DataFrame lookup_key, atau null jika tidak ada nilai fitur tersebut.
Rekayasa Fitur dalam Katalog Unity
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()
Petunjuk / Saran
Untuk performa pencarian yang lebih cepat saat Photon diaktifkan, teruskan use_spark_native_join=True ke FeatureEngineeringClient.create_training_set. Ini memerlukan databricks-feature-engineering versi 0.6.0 atau lebih tinggi.
Penyimpanan Fitur Ruang Kerja
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()
Setiap FeatureLookup pada tabel fitur rangkaian waktu harus berupa pencarian titik waktu, sehingga harus menentukan kolom timestamp_lookup_key untuk digunakan di DataFrame Anda. Pencarian titik waktu tidak melewati baris dengan nilai fitur null yang disimpan dalam tabel fitur rangkaian waktu.
Tetapkan batas waktu untuk nilai fitur historis
Dengan klien Feature Store v0.13.0 atau lebih tinggi, atau versi Rekayasa Fitur apa pun di klien Unity Catalog, Anda dapat mengecualikan nilai fitur dengan cap waktu lama dari set pelatihan. Untuk melakukannya, gunakan parameter lookback_window di FeatureLookup.
Jenis data lookback_window harus datetime.timedelta, dan nilai defaultnya None (semua nilai fitur digunakan, terlepas dari usia).
Misalnya, kode berikut mengecualikan nilai fitur apa pun yang berusia lebih dari 7 hari:
Rekayasa Fitur dalam Katalog Unity
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)
)
]
Penyimpanan Fitur Ruang Kerja
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)
)
]
Saat Anda menggunakan create_training_set dengan FeatureLookupdi atas, secara otomatis melakukan penggabungan menurut titik waktu dan mengecualikan nilai fitur yang lebih lama dari 7 hari.
Jendela lookback diterapkan selama pelatihan dan inferensi batch. Selama inferensi online, nilai fitur terbaru selalu digunakan, terlepas dari jendela lookback.
Menilai model dengan tabel fitur rangkaian waktu
Saat Anda menilai model yang dilatih dengan fitur dari tabel fitur rangkaian waktu, Databricks Feature Store mengambil fitur yang sesuai menggunakan pencarian point-in-time dengan metadata yang dibungkus dengan model selama pelatihan. DataFrame yang Anda berikan ke FeatureEngineeringClient.score_batch (untuk Rekayasa Fitur di Katalog Unity) atau FeatureStoreClient.score_batch (untuk Penyimpanan Fitur di Ruang Kerja) harus berisi kolom timestamp dengan nama dan DataType yang sama dengan timestamp_lookup_key dari FeatureLookup yang disediakan ke FeatureEngineeringClient.create_training_set atau FeatureStoreClient.create_training_set.
Petunjuk / Saran
Untuk performa pencarian yang lebih cepat saat Photon diaktifkan, teruskan use_spark_native_join=True ke FeatureEngineeringClient.score_batch. Ini memerlukan databricks-feature-engineering versi 0.6.0 atau lebih tinggi.
Menerbitkan fitur time series ke toko online
Anda dapat menggunakan FeatureEngineeringClient.publish_table (untuk Rekayasa Fitur di Katalog Unity) atau FeatureStoreClient.publish_table (untuk Penyimpanan Fitur Ruang Kerja) untuk menerbitkan tabel fitur rangkaian waktu ke toko online. Penyimpanan Fitur Databricks menerbitkan cuplikan nilai fitur terbaru untuk setiap kunci utama dalam tabel fitur ke penyimpanan daring. Toko online mendukung pencarian kunci utama tetapi tidak mendukung pencarian berdasarkan titik waktu tertentu.
contoh buku catatan : Tabel fitur rangkaian waktu
Contoh notebook ini mengilustrasikan pencarian pada titik waktu tertentu pada tabel fitur deret waktu.
Gunakan buku catatan ini di ruang kerja yang diaktifkan untuk Katalog Unity.
Contoh buku catatan tabel fitur rangkaian waktu (Katalog Unity)
Dapatkan buku catatan
Buku catatan berikut dirancang untuk ruang kerja yang tidak diaktifkan untuk Katalog Unity. Ini menggunakan Workspace Feature Store.
Buku catatan contoh tabel fitur rangkaian waktu (ruang kerja tidak diaktifkan untuk Katalog Unity)
Dapatkan buku catatan