Fonction ML.FEATURES_AT_TIME
Ce document décrit la fonction ML.FEATURES_AT_TIME
, qui vous permet d'utiliser une limite à un moment précis pour toutes les entités lors de la récupération de caractéristiques. Celles-ci peuvent en effet présenter des dépendances temporelles si elles incluent des données à durée limitée. Pour éviter les fuites de données, utilisez les caractéristiques à un moment précis lors de l'entraînement de modèles et de l'exécution d'inférences.
Utilisez cette fonction afin d'utiliser la même limite à un moment précis pour toutes les entités lors de la récupération de caractéristiques. La fonction ML.ENTITY_FEATURES_AT_TIME
permet de récupérer des caractéristiques à partir de plusieurs moments pour plusieurs entités.
Syntaxe
ML.FEATURES_AT_TIME( { TABLE feature_table | (query_statement) } [, time => TIMESTAMP][, num_rows => INT64][, ignore_feature_nulls => BOOL])
Arguments
ML.FEATURES_AT_TIME
utilise les arguments suivants :
feature_table
est le nom de la table BigQuery qui contient les données de caractéristiques. La table des caractéristiques doit contenir les colonnes suivantes :entity_id
: colonneSTRING
contenant l'ID de l'entité associée aux caractéristiques.- Une ou plusieurs colonnes de caractéristiques.
feature_timestamp
: colonneTIMESTAMP
identifiant la dernière mise à jour des données de caractéristiques.
Les noms de colonnes ne sont pas sensibles à la casse. Par exemple, vous pouvez utiliser une colonne nommée
Entity_ID
au lieu deentity_id
.La table des caractéristiques doit être au format wide et contenir une colonne pour chaque caractéristique.
query_statement
: valeurSTRING
spécifiant une requête GoogleSQL qui renvoie les données de caractéristiques. Cette requête doit renvoyer les mêmes colonnes quefeature_table
. Consultez la page Syntaxe des requêtes GoogleSQL pour connaître la syntaxe SQL compatible avec la clausequery_statement
.time
: valeurTIMESTAMP
spécifiant le moment précis à utiliser comme limite pour les données de caractéristiques. Seules les lignes dont la valeur dans la colonnefeature_timestamp
est égale ou antérieure à la valeurtime
sont renvoyées. Il s'agit par défaut de la valeur de la fonctionCURRENT_TIMESTAMP
.num_rows
: valeurINT64
spécifiant le nombre de lignes à renvoyer pour chaque ID d'entité. La valeur par défaut est1
.ignore_feature_nulls
: valeurBOOL
qui indique s'il faut remplacer une valeurNULL
d'une colonne de caractéristiques par la valeur de la colonne de caractéristiques figurant sur la ligne de la même entité qui la précède immédiatement dans le temps. Par exemple, pour la table des caractéristiques suivante :+-----------+------+------+--------------------------+ | 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' | +-----------+------+------+--------------------------+
Si vous exécutez cette requête :
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);
Elle renvoie la sortie suivante, où la valeur
f2
de la ligne de l'ID d'entité 2 horodatée'2022-06-10 12:00:00+00'
est remplacée par la valeurNULL
dans la ligne horodatée'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' | +-----------+------+------+--------------------------+
Si aucune valeur de remplacement n'est disponible, par exemple lorsqu'il n'existe pas de ligne précédente pour cet ID d'entité, une valeur
NULL
est renvoyée.La valeur par défaut est
FALSE
.
Sortie
La fonction ML.FEATURES_AT_TIME
renvoie les lignes de la table d'entrée qui correspondent aux critères de limite à un moment précis, avec la colonne feature_timestamp
affichant le code temporel saisi dans l'argument time
.
Examples
Exemple 1
Cet exemple montre comment réentraîner un modèle en n'utilisant que des caractéristiques créées ou mises à jour avant 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);
Exemple 2
Cet exemple montre comment obtenir des prédictions à partir d'un modèle en fonction des caractéristiques créées ou mises à jour avant 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) ) );
Exemple 3
Voici un exemple factice que vous pouvez utiliser pour afficher la sortie de la fonction :
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);