Instruction CREATE MODEL pour les modèles de transformation uniquement

Ce document décrit l'instruction CREATE MODEL pour créer des modèles de transformation uniquement dans BigQuery. Les modèles de transformation uniquement utilisent la clause TRANSFORM pour appliquer des fonctions de prétraitement aux données d'entrée et renvoyer les données prétraitées. Les modèles de transformation uniquement dissocient le prétraitement des données de l'entraînement du modèle, ce qui vous permet de capturer et de réutiliser facilement un ensemble de règles de prétraitement des données.

Vous pouvez utiliser un modèle de transformation uniquement conjointement avec la fonction ML.TRANSFORM pour fournir des données prétraitées à d'autres modèles :

  • Vous pouvez l'utiliser dans l'instruction de requête lors de la création d'un autre modèle afin d'utiliser les données transformées en tant que données d'entraînement pour ce modèle.
  • Vous pouvez l'utiliser dans l'argument query statement de la fonction ML.PREDICT afin de fournir des données pour la prédiction traitées de la manière attendue par la cible du modèle.

Pour les transformations de caractéristiques par lot, il est préférable d'utiliser des modèles de transformation uniquement, car ils vous permettent de traiter de grandes quantités de données en peu de temps. Pour les transformations de caractéristiques en ligne, il est préférable d'utiliser Vertex AI Feature Store, car il fournit des réponses avec une faible latence.

Vous pouvez également définir un modèle de transformation uniquement avec la fonction ML.FEATURE_INFO afin de renvoyer des informations sur les transformations de caractéristiques réalisées dans le modèle.

Pour en savoir plus sur les instructions et les fonctions SQL compatibles avec chaque type de modèle, consultez la section Parcours utilisateur de bout en bout pour chaque modèle.

Syntaxe de CREATE MODEL

{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL} model_name
TRANSFORM (select_list)
OPTIONS(MODEL_TYPE = 'TRANSFORM_ONLY')
AS query_statement

CREATE MODEL

Crée et entraîne un modèle dans l'ensemble de données spécifié. Si le nom du modèle existe, CREATE MODEL renvoie une erreur.

CREATE MODEL IF NOT EXISTS

Crée et entraîne un modèle uniquement si celui-ci n'existe pas dans l'ensemble de données spécifié.

CREATE OR REPLACE MODEL

Crée et entraîne un modèle. Permet également de remplacer un modèle existant du même nom dans l'ensemble de données spécifié.

model_name

Nom du modèle que vous créez ou remplacez. Le nom du modèle doit être unique dans l'ensemble de données. Aucun autre modèle, ni table ne peut porter le même nom. Le nom du modèle doit respecter les mêmes règles de dénomination que celles des tables BigQuery. Un nom de modèle peut :

  • contenir jusqu'à 1 024 caractères ;
  • contenir des lettres (majuscules ou minuscules), des chiffres et des traits de soulignement.

model_name n'est pas sensible à la casse.

Si aucun projet par défaut n'est configuré, vous devez préfixer le nom du modèle par l'ID du projet en respectant le format suivant (y compris les accents graves) :

`[PROJECT_ID].[DATASET].[MODEL]`

par exemple, `myproject.mydataset.mymodel`.

select_list

Vous pouvez transmettre les colonnes de query_statement pour l'entraînement du modèle sans transformation en utilisant *, * EXCEPT() ou en répertoriant directement les noms des colonnes.

Les colonnes de query_statement ne sont pas toutes requises dans la clause TRANSFORM. Vous pouvez donc supprimer certaines colonnes de query_statement en les omettant dans la clause TRANSFORM.

Vous pouvez transformer les entrées dans query_statement en utilisant des expressions dans select_list. select_list est semblable à une instruction SELECT normale. select_list accepte la syntaxe suivante :

  • *
  • * EXCEPT()
  • * REPLACE()
  • expression
  • expression.*

Les éléments suivants ne peuvent pas apparaître dans select_list :

  • Fonctions d'agrégation
  • Fonctions d'analyse autres que BigQuery ML Pour en savoir plus sur les fonctions compatibles, consultez la page Prétraitement manuel des caractéristiques.
  • Fonctions définies par l'utilisateur
  • Sous-requêtes
  • Colonnes anonymes. Par exemple, a + b as c est autorisé, contrairement à a + b.

Les colonnes de résultats de select_list peuvent être de n'importe quel type de données accepté par BigQuery.

Si elles sont présentes, les colonnes suivantes doivent apparaître dans select_list sans transformation :

  • label
  • data_split_col
  • kmeans_init_col
  • instance_weight_col

Si ces colonnes sont renvoyées par query_statement, vous devez les référencer dans select_list par nom de colonne en dehors de toute expression, ou en utilisant *. Vous ne pouvez pas utiliser d'alias avec ces colonnes.

MODEL_TYPE

Syntaxe

MODEL_TYPE = 'TRANSFORM_ONLY'

Description

Spécifie le type de modèle. Cette option est obligatoire.

query_statement

Requête GoogleSQL contenant les données à prétraiter Les statistiques calculées lors de la transformation de ces données sont appliquées aux données d'entrée de toutes les fonctions avec lesquelles vous utilisez le modèle.

Examples

Les exemples suivants montrent comment créer et utiliser des modèles de transformation uniquement.

Exemple 1

L'exemple suivant crée un modèle nommé mymodel dans mydataset dans votre projet par défaut. Le modèle transforme plusieurs colonnes de la table publique BigQuery bigquery-public-data.ml_datasets.penguins :

CREATE MODEL `mydataset.transform_model`
  TRANSFORM(
    species,
    island,
    ML.MAX_ABS_SCALER(culmen_length_mm) OVER () AS culmen_length_mm,
    ML.MAX_ABS_SCALER(culmen_depth_mm) OVER () AS culmen_depth_mm,
    ML.MAX_ABS_SCALER(flipper_length_mm) OVER () AS flipper_length_mm,
    sex,
    body_mass_g)
  OPTIONS (
    model_type = 'transform_only')
AS (
  SELECT *
  FROM `bigquery-public-data.ml_datasets.penguins`
);

Exemple 2

L'exemple suivant crée un modèle nommé mymodel dans mydataset dans votre projet par défaut. Le modèle est entraîné sur des données prétraitées à l'aide d'un modèle de transformation uniquement :

CREATE MODEL `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE = 'LINEAR_REG',
    MAX_ITERATIONS = 5,
    INPUT_LABEL_COLS = ['body_mass_g'] ) AS
SELECT
  *
FROM
  ML.TRANSFORM(
    MODEL `mydataset.transform_model`,
    TABLE `bigquery-public-data.ml_datasets.penguins`)
WHERE body_mass_g IS NOT NULL;