Fungsi ML.FEATURES_AT_TIME
Dokumen ini menjelaskan fungsi ML.FEATURES_AT_TIME
, yang memungkinkan Anda menggunakan
batas waktu tertentu untuk semua entity saat mengambil fitur, karena
fitur dapat memiliki dependensi waktu jika menyertakan data yang sensitif terhadap waktu. Untuk menghindari kebocoran data, gunakan fitur titik waktu saat melatih model dan menjalankan inferensi.
Gunakan fungsi ini untuk menggunakan batas titik waktu yang sama untuk semua entity saat
mengambil fitur. Gunakan
ML.ENTITY_FEATURES_AT_TIME
fungsi
untuk mengambil fitur dari beberapa titik waktu untuk beberapa entity.
Sintaksis
ML.FEATURES_AT_TIME( { TABLE feature_table | (query_statement) } [, time => TIMESTAMP][, num_rows => INT64][, ignore_feature_nulls => BOOL])
Argumen
ML.FEATURES_AT_TIME
menggunakan argumen berikut:
feature_table
adalah nama tabel BigQuery yang berisi data fitur. Tabel fitur harus berisi kolom berikut:entity_id
: kolomSTRING
yang berisi ID entity yang terkait dengan fitur.- Satu atau beberapa kolom fitur.
feature_timestamp
: kolomTIMESTAMP
yang mengidentifikasi kapan data fitur terakhir diperbarui.
Nama kolom tidak peka huruf besar/kecil. Misalnya, Anda dapat menggunakan kolom bernama
Entity_ID
, bukanentity_id
.Tabel fitur harus dalam format lebar, dengan satu kolom untuk setiap fitur.
query_statement
: nilaiSTRING
yang menentukan kueri GoogleSQL yang menampilkan data fitur. Kueri ini harus menampilkan kolom yang sama denganfeature_table
. Lihat sintaksis kueri GoogleSQL untuk mengetahui sintaksis SQL yang didukung dalam klausaquery_statement
.time
: nilaiTIMESTAMP
yang menentukan titik waktu yang akan digunakan sebagai batas untuk data fitur. Hanya baris yang nilai di kolomfeature_timestamp
-nya sama dengan atau lebih awal dari nilaitime
yang ditampilkan. Default atas nilai fungsiCURRENT_TIMESTAMP
.num_rows
: nilaiINT64
yang menentukan jumlah baris yang akan ditampilkan untuk setiap ID entity. Setelan defaultnya adalah1
.ignore_feature_nulls
: nilaiBOOL
yang menunjukkan apakah akan mengganti nilaiNULL
di kolom fitur dengan nilai kolom fitur dari baris untuk entity yang sama yang mendahuluinya tepat pada waktunya. Misalnya, untuk tabel fitur berikut:+-----------+------+------+--------------------------+ | entity_id | f1 | f2 | feature_timestamp | +-----------+------+------+--------------------------+ | '2' | 5.0 | 8.0 | '2022-06-10 09:00:00+00' | +-----------+------+------+--------------------------+ | '2' | 2.0 | 4.0 | '2022-06-10 12:00:00+00' | +-----------+------+------+--------------------------+ | '2' | 7.0 | NULL | '2022-06-11 10:00:00+00' | +-----------+------+------+--------------------------+
Menjalankan kueri ini:
SELECT * FROM ML.FEATURES_AT_TIME( TABLE mydataset.feature_table, time => '2022-06-11 10:00:00+00', num_rows => 1, ignore_feature_nulls => TRUE);
Menghasilkan output berikut, dengan nilai
f2
dari baris untuk ID entity 2 yang diberi stempel waktu'2022-06-10 12:00:00+00'
diganti dengan nilaiNULL
dalam baris yang diberi stempel waktu'2022-06-11 10:00:00+00'
:+-----------+------+------+--------------------------+ | entity_id | f1 | f2 | feature_timestamp | +-----------+------+------+--------------------------+ | '2' | 7.0 | 4.0 | '2022-06-11 10:00:00+00' | +-----------+------+------+--------------------------+
Jika tidak ada nilai pengganti yang tersedia, misalnya, jika tidak ada baris sebelumnya untuk ID entity tersebut, nilai
NULL
akan ditampilkan.Nilai defaultnya adalah
FALSE
.
Output
Fungsi ML.FEATURES_AT_TIME
menampilkan baris tabel input yang memenuhi
kriteria batas waktu tertentu, dengan kolom feature_timestamp
yang menampilkan stempel waktu yang dimasukkan dalam argumen time
.
Contoh
Contoh 1
Contoh ini menunjukkan cara melatih ulang model hanya menggunakan fitur yang dibuat atau diperbarui sebelum 2023-01-01 12:00:00+00
:
CREATE OR REPLACE `mydataset.mymodel` OPTIONS (WARM_START = TRUE) AS SELECT * EXCEPT (feature_timestamp, entity_id) FROM ML.FEATURES_AT_TIME( TABLE `mydataset.feature_table`, time => '2023-01-01 12:00:00+00', num_rows => 1, ignore_feature_nulls => TRUE);
Contoh 2
Contoh ini menunjukkan cara mendapatkan prediksi dari model berdasarkan fitur yang dibuat atau diperbarui sebelum 2023-01-01 12:00:00+00
:
SELECT * FROM ML.PREDICT( MODEL `mydataset.mymodel`, ( SELECT * EXCEPT (feature_timestamp, entity_id) FROM ML.FEATURES_AT_TIME( TABLE `mydataset.feature_table`, time => '2023-01-01 12:00:00+00', num_rows => 1, ignore_feature_nulls => TRUE) ) );
Contoh 3
Berikut adalah contoh rumit yang dapat Anda gunakan untuk melihat output fungsi:
WITH feature_table AS ( SELECT * FROM UNNEST( ARRAY<STRUCT<entity_id STRING, f_1 FLOAT64, f_2 FLOAT64, feature_timestamp TIMESTAMP>>[ ('id1', 1.0, 1.0, TIMESTAMP '2022-06-10 12:00:00+00'), ('id2', 12.0, 24.0, TIMESTAMP '2022-06-11 12:00:00+00'), ('id1', 11.0, NULL, TIMESTAMP '2022-06-11 12:00:00+00'), ('id1', 6.0, 12.0, TIMESTAMP '2022-06-11 10:00:00+00'), ('id2', 2.0, 4.0, TIMESTAMP '2022-06-10 12:00:00+00'), ('id2', 7.0, NULL, TIMESTAMP '2022-06-11 10:00:00+00')]) ) SELECT * FROM ML.FEATURES_AT_TIME( TABLE feature_table, time => '2022-06-12 10:00:00+00', num_rows => 1, ignore_feature_nulls => TRUE);