La funzione ML.FEATURES_AT_TIME
Questo documento descrive la funzione ML.FEATURES_AT_TIME
, che consente di utilizzare un limite temporale specifico per tutte le entità quando si recuperano le funzionalità, poiché le caratteristiche possono avere dipendenze temporali se includono dati sensibili al tempo. Per evitare fuga di dati, utilizza le funzionalità point-in-time durante l'addestramento di modelli e l'esecuzione dell'inferenza.
Utilizza questa funzione per utilizzare lo stesso limite point-in-time per tutte le entità durante il recupero delle caratteristiche. Utilizza la funzione ML.ENTITY_FEATURES_AT_TIME
per recuperare le caratteristiche da più punti nel tempo per più entità.
Sintassi
ML.FEATURES_AT_TIME( { TABLE feature_table | (query_statement) } [, time => TIMESTAMP][, num_rows => INT64][, ignore_feature_nulls => BOOL])
Argomenti
ML.FEATURES_AT_TIME
accetta i seguenti argomenti:
feature_table
è il nome della tabella BigQuery che contiene i dati delle caratteristiche. La tabella delle caratteristiche deve contenere le seguenti colonne:entity_id
: una colonnaSTRING
contenente l'ID dell'entità relativa alle caratteristiche.- Una o più colonne di funzionalità.
feature_timestamp
: una colonnaTIMESTAMP
che identifica la data dell'ultimo aggiornamento dei dati sulle caratteristiche.
I nomi delle colonne non fanno distinzione tra maiuscole e minuscole. Ad esempio, puoi utilizzare una colonna denominata
Entity_ID
anzichéentity_id
.La tabella degli elementi deve essere in formato larga, con una colonna per ogni elemento.
query_statement
: un valoreSTRING
che specifica una query GoogleSQL che restituisce i dati della funzionalità. Questa query deve restituire le stesse colonne difeature_table
. Consulta la pagina sulla sintassi delle query GoogleSQL per conoscere la sintassi SQL supportata della clausolaquery_statement
.time
: un valoreTIMESTAMP
che specifica il momento in cui utilizzare come limite per i dati della funzionalità. Vengono restituite solo le righe in cui il valore nella colonnafeature_timestamp
è uguale o precedente al valoretime
. Il valore predefinito è il valore della funzioneCURRENT_TIMESTAMP
.num_rows
: un valoreINT64
che specifica il numero di righe da restituire per ogni ID entità. Il valore predefinito è1
.ignore_feature_nulls
: un valoreBOOL
che indica se sostituire un valoreNULL
in una colonna delle caratteristiche con il valore della colonna delle caratteristiche dalla riga della stessa entità che la precede immediatamente nel tempo. Ad esempio, per la seguente tabella delle funzionalità:+-----------+------+------+--------------------------+ | 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' | +-----------+------+------+--------------------------+
Esecuzione di questa query:
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);
Restituisce il seguente output, dove il valore
f2
della riga per l'ID entità 2 con timestamp'2022-06-10 12:00:00+00'
viene sostituito per il valoreNULL
nella riga con timestamp'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' | +-----------+------+------+--------------------------+
Se non è disponibile alcun valore sostitutivo, ad esempio se non è presente una riga precedente per quell'ID entità, viene restituito un valore
NULL
.Il valore predefinito è
FALSE
.
Output
La funzione ML.FEATURES_AT_TIME
restituisce le righe della tabella di input che soddisfano i criteri di interruzione point-in-time. La colonna feature_timestamp
mostra il timestamp inserito nell'argomento time
.
Esempi
Esempio 1
Questo esempio mostra come riaddestrare un modello utilizzando solo le caratteristiche create o aggiornate prima del giorno 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);
Esempio 2
Questo esempio mostra come ottenere previsioni da un modello basato su caratteristiche
create o aggiornate prima del giorno 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) ) );
Esempio 3
Questo è un esempio artificioso che puoi utilizzare per vedere l'output della funzione:
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);