ML.FEATURES_AT_TIME-Funktion
In diesem Dokument wird die Funktion ML.FEATURES_AT_TIME
beschrieben, mit der Sie für alle Entitäten beim Abrufen von Features einen Zeitpunktgrenzwert verwenden können, da Features Zeitabhängigkeiten haben können, wenn sie zeitabhängige Daten enthalten. Verwenden Sie beim Trainieren von Modellen und Ausführen von Inferenzen Zeitpunkt-Features, um Datenlecks zu vermeiden.
Mit dieser Funktion können Sie beim Abrufen von Features für alle Entitäten denselben Zeitpunktgrenzwert verwenden. Mit der Funktion ML.ENTITY_FEATURES_AT_TIME
können Sie Features für mehrere Zeitpunkte für mehrere Entitäten abrufen.
Syntax
ML.FEATURES_AT_TIME( { TABLE feature_table | (query_statement) } [, time => TIMESTAMP][, num_rows => INT64][, ignore_feature_nulls => BOOL])
Argumente
ML.FEATURES_AT_TIME
verwendet die folgenden Argumente:
feature_table
ist der Name der BigQuery-Tabelle, die die Featuredaten enthält. Die Featuretabelle muss die folgenden Spalten enthalten:entity_id
: eineSTRING
-Spalte, die die ID der Entität enthält, auf die sich die Features beziehen.- Eine oder mehrere Featurespalten.
feature_timestamp
: eineTIMESTAMP
-Spalte, die angibt, wann die Featuredaten zuletzt aktualisiert wurden.
Bei den Spaltennamen wird die Groß-/Kleinschreibung nicht berücksichtigt. Sie können beispielsweise eine Spalte namens
Entity_ID
anstelle vonentity_id
verwenden.Die Featuretabelle muss das breite Format mit einer Spalte pro Feature haben.
query_statement
: einSTRING
-Wert, der eine GoogleSQL-Abfrage angibt, die die Featuredaten zurückgibt. Diese Abfrage muss die gleichen Spalten wiefeature_table
zurückgeben. Informationen zur unterstützten SQL-Syntax derquery_statement
-Klausel finden Sie unter GoogleSQL-Abfragesyntax.time
: einTIMESTAMP
-Wert, der den Zeitpunkt angibt, der als Grenzwert für Featuredaten verwendet werden soll. Es werden nur Zeilen zurückgegeben, in denen der Wert in der Spaltefeature_timestamp
gleich oder früher als der Werttime
ist. Die Standardeinstellung ist der Wert der FunktionCURRENT_TIMESTAMP
.num_rows
: einINT64
-Wert, der die Anzahl der Zeilen angibt, die für jede Entitäts-ID zurückgegeben werden sollen. Die Standardeinstellung ist1
.ignore_feature_nulls
: einBOOL
-Wert, der angibt, ob einNULL
-Wert in einer Featurespalte durch den Featurespaltenwert aus der Zeile für dieselbe Entität ersetzt werden soll, die zeitlich unmittelbar vorangeht. Nehmen wir als Beispiel die folgende Featuretabelle:+-----------+------+------+--------------------------+ | 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' | +-----------+------+------+--------------------------+
Wenn diese Abfrage ausgeführt wird:
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);
Wird Folgendes ausgegeben, wobei der Wert
f2
aus der Zeile für Entitäts-ID 2 mit dem Zeitstempel'2022-06-10 12:00:00+00'
durch den WertNULL
in der Zeile mit dem Zeitstempel'2022-06-11 10:00:00+00'
ersetzt wird:+-----------+------+------+--------------------------+ | entity_id | f1 | f2 | feature_timestamp | +-----------+------+------+--------------------------+ | '2' | 7.0 | 4.0 | '2022-06-11 10:00:00+00' | +-----------+------+------+--------------------------+
Wenn es keinen Ersetzungswert gibt, z. B. wenn für diese Entitäts-ID keine vorherige Zeile vorhanden ist, wird ein
NULL
-Wert zurückgegeben.Die Standardeinstellung ist
FALSE
.
Ausgabe
Die Funktion ML.FEATURES_AT_TIME
gibt die Zeilen der Eingabetabelle zurück, die die Kriterien für den Zeitpunktgrenzwert erfüllen, wobei die Spalte feature_timestamp
den Zeitstempel enthält, der im Argument time
eingegeben wurde.
Beispiele
Beispiel 1
In diesem Beispiel wird gezeigt, wie Sie ein Modell nur mit Features neu trainieren, die vor 2023-01-01 12:00:00+00
erstellt oder aktualisiert wurden:
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);
Beispiel 2
In diesem Beispiel wird gezeigt, wie Sie aus einem Modell Vorhersagen auf Basis eines Features abrufen, das vor 2023-01-01 12:00:00+00
erstellt oder aktualisiert wurde:
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) ) );
Beispiel 3:
Dies ist ein etwas gekünsteltes Beispiel, mit dem Sie die Ausgabe der Funktion sehen können:
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);