Instruction CREATE MODEL pour les modèles de série temporelle

Instruction CREATE MODEL pour les modèles de série temporelle

Pour créer des modèles de série temporelle dans BigQuery, utilisez l'instruction BigQuery ML CREATE MODEL et définissez la valeur de MODEL_TYPE sur 'ARIMA'.

Contenu d'un modèle de série temporelle BigQuery ML

ARIMA est considéré comme l'algorithme principal utilisé dans les séries temporelles BigQuery ML. Cependant, ce n'est pas le seul modèle utilisé dans le pipeline de création de modèles. Le pipeline comprend les composants suivants, répertoriés approximativement dans l'ordre dans lequel les étapes sont exécutées :

Lorsque plusieurs séries temporelles sont prévues simultanément à l'aide de l'option TIME_SERIES_ID_COL, différents pipelines sont exécutés en parallèle tant qu'il y a suffisamment d'emplacements.

Syntaxe de CREATE MODEL

{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL}
model_name
OPTIONS(MODEL_TYPE = 'ARIMA'
  [, TIME_SERIES_TIMESTAMP_COL = string_value ]
  [, TIME_SERIES_DATA_COL = string_value ]
  [, TIME_SERIES_ID_COL = string_value ]
  [, HORIZON = int64_value ]
  [, AUTO_ARIMA = { TRUE | FALSE } ]
  [, AUTO_ARIMA_MAX_ORDER = int64_value ]
  [, NON_SEASONAL_ORDER = (int64_value, int64_value, int64_value) ]
  [, DATA_FREQUENCY = { 'AUTO_FREQUENCY' | 'HOURLY' | 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'QUARTERLY' | 'YEARLY' } ]
  [, INCLUDE_DRIFT = { TRUE | FALSE } ]
  [, HOLIDAY_REGION = { 'GLOBAL' | 'NA' | 'JAPAC' | 'EMEA' | 'LAC' | 'AE' | ... } ])
AS query_statement

CREATE MODEL

Crée un modèle BigQuery ML 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 un modèle BigQuery ML uniquement si ce modèle n'existe pas dans l'ensemble de données spécifié.

CREATE OR REPLACE MODEL

Crée un modèle BigQuery ML et remplace tout modèle existant du même nom dans l'ensemble de données spécifié.

model_name

model_name correspond au nom du modèle BigQuery ML que vous créez ou remplacez. Le nom du modèle doit être unique pour chaque 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 les éléments suivants :

  • Jusqu'à 1 024 caractères
  • 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é, ajoutez l'ID du projet au début du nom du modèle au format suivant, en intégrant les accents graves :

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

Exemple :

`myproject.mydataset.mymodel`

CREATE MODEL accepte les options suivantes :

MODEL_TYPE

Syntaxe

MODEL_TYPE = 'ARIMA'

Description

Spécifie le type de modèle. Pour créer un modèle de série temporelle, définissez la valeur de model_type sur 'ARIMA'.

model_option_list

Dans model_option_list, les options toujours obligatoires incluent model_type, time_series_timestamp_col et time_series_data_col. D'autres options ne sont requises que dans certains scénarios. Vous trouverez plus de détails ci-dessous.

Les modèles de série temporelle sont compatibles avec les options suivantes :

TIME_SERIES_TIMESTAMP_COL

Syntaxe

TIME_SERIES_TIMESTAMP_COL = string_value

Description

Nom de la colonne d'horodatage pour les modèles de série temporelle.

Arguments

L'élément string_value appartient au groupe 'STRING'.

TIME_SERIES_DATA_COL

Syntaxe

TIME_SERIES_DATA_COL = string_value

Description

Nom de la colonne de données pour les modèles de série temporelle.

Arguments

L'élément string_value appartient au groupe 'STRING'.

TIME_SERIES_ID_COL

Syntaxe

TIME_SERIES_ID_COL = string_value

Description

Nom de la colonne "ID" pour les modèles de série temporelle. Cette colonne est utilisée lorsque l'utilisateur souhaite ajuster et prévoir plusieurs séries temporelles à l'aide d'une seule requête. Différents ID indiquent des séries temporelles distinctes.

Arguments

L'élément string_value appartient au groupe 'STRING'.

HORIZON

Syntaxe

HORIZON = int64_value

Description

Nombre de points temporels à prévoir. Lorsque vous prévoyez plusieurs séries temporelles simultanément, ce paramètre s'applique à chacune d'entre elles.

Arguments

Sa valeur est un INT64. La valeur par défaut est 1 000. La valeur maximale est 10 000.

AUTO_ARIMA

Syntaxe

AUTO_ARIMA = { TRUE | FALSE }

Description

Indique si le processus d'entraînement doit utiliser auto.ARIMA ou non. Si sa valeur est définie sur "true", l'entraînement recherche automatiquement le meilleur ordre non saisonnier (c'est-à-dire le tuple "p, d, q") et décide d'inclure ou non un terme de dérive linéaire lorsque "d" est égal à 1. Si sa valeur est définie sur "false", l'utilisateur doit spécifier "non_seasonal_order" dans la requête. Lorsque vous prévoyez plusieurs séries temporelles simultanément, l'algorithme auto.ARIMA doit être utilisé pour chaque série temporelle. Cette option ne doit donc pas être définie sur "false".

Arguments

Il s'agit d'une valeur booléenne (BOOL). La valeur par défaut est TRUE.

AUTO_ARIMA_MAX_ORDER

Syntaxe

AUTO_ARIMA_MAX_ORDER = int64_value

Description

Valeur maximale de la somme des valeurs de "p" et "q" non saisonniers. Contrôle l'espace de recherche de paramètres dans l'algorithme auto.ARIMA. Actuellement, les valeurs autorisées sont (2, 3, 4, 5). À titre de référence, pour chaque valeur, il existe (6, 10, 15, 21) modèles potentiels à évaluer si la valeur de "d" non saisonnier est définie sur 0 ou 2. Si la valeur de "d" non saisonnier est égale à 1, le nombre de modèles candidats à évaluer sera doublé, car un terme de dérive supplémentaire devra être pris en compte pour tous les modèles candidats existants. Cette option est désactivée lorsque AUTO_ARIMA est défini sur "false".

Arguments

Sa valeur est un INT64. La valeur par défaut est 5. La valeur minimale est 2 et la valeur maximale est 5.

NON_SEASONAL_ORDER

Syntaxe

NON_SEASONAL_ORDER = (int64_value, int64_value, int64_value)

Description

Tuple de "p, d, q" non saisonnier pour le modèle ARIMA. Aucune valeur par défaut n'existe. Vous devez donc toutes les spécifier. Vous devez spécifier explicitement "auto_arima" sur "false" pour utiliser cette option. Actuellement, "p" et "q" sont limités à [0, 1, 2, 3, 4, 5] et "d" à [0, 1, 2]. Lorsque vous prévoyez plusieurs séries temporelles simultanément, cette option est désactivée, car l'algorithme auto.ARIMA doit être utilisé pour chaque série temporelle.

Arguments

(int64_value, int64_value, int64_value) est un tuple de trois 'INT64'.

DATA_FREQUENCY

Syntaxe

DATA_FREQUENCY = { 'AUTO_FREQUENCY' | 'HOURLY' | 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'QUARTERLY' | 'YEARLY' }

Description

Fréquence des données de la série temporelle d'entrée. Le niveau de précision accepté le plus élevé est 'HOURLY'. Lors de la prévision simultanée de plusieurs séries temporelles, cet argument s'applique à toutes les séries temporelles individuelles.

Arguments

Accepte les valeurs suivantes :

'AUTO_FREQUENCY' : le processus d'entraînement infère automatiquement la fréquence des données, qui peut être l'une des valeurs répertoriées ci-dessous.

'HOURLY' : série temporelle horaire

'DAILY' : série temporelle quotidienne

'WEEKLY' : série temporelle hebdomadaire

'MONTHLY' : série temporelle mensuelle

'QUARTERLY' : série temporelle trimestrielle

'YEARLY' : série temporelle annuelle

La valeur par défaut est 'AUTO_FREQUENCY'.

INCLUDE_DRIFT

Syntaxe

INCLUDE_DRIFT = { TRUE | FALSE }

Description

Indique si le modèle ARIMA doit inclure ou non un terme de dérive linéaire. Le terme de dérive est applicable lorsque la valeur de "d" non saisonnier est égale à 1.

  • Lorsque auto_arima est défini sur "false", cet argument est défini par défaut sur "false". Il ne peut être définie sur "true" que si la valeur de "d" non saisonnier est égale à 1. Dans le cas contraire, il renvoie une erreur de requête non valide.

  • Lorsque auto-arima est défini sur "true", INCLUDE_DRIFT décide automatiquement d'inclure ou non un terme de dérive linéaire. Par conséquent, cette option est désactivée pour auto-ARIMA.

Arguments

Sa valeur est un BOOL. La valeur par défaut est FALSE, car auto_arima est désactivé.

HOLIDAY_REGION

Syntaxe

HOLIDAY_REGION = { 'GLOBAL' | 'NA' | 'JAPAC' | 'EMEA' | 'LAC' | 'AE' | ... }

Description

Région géographique selon laquelle les effets des jours fériés sont appliqués dans la modélisation. Par défaut, la modélisation des effets des jours fériés est désactivée. Pour l'activer, spécifiez la région concernée à l'aide de cette option.

Arguments

Accepte les valeurs suivantes :

Premier niveau : mondial

  • 'GLOBAL'

Deuxième niveau : régions continentales

  • 'NA' : Amérique du Nord
  • 'JAPAC' : Japon et Asie-Pacifique
  • 'EMEA' : Europe, Moyen-Orient et Afrique
  • 'LAC' : Amérique latine et Caraïbes

Troisième niveau : pays/régions

  • 'AE' : Émirats arabes unis
  • 'AR' : Argentine
  • 'AT' : Autriche
  • 'AU' : Australie
  • 'BE' : Belgique
  • 'BR' : Brésil
  • 'CA' : Canada
  • 'CH' : Suisse
  • 'CL' : Chili
  • 'CN' : Chine
  • 'CO' : Colombie
  • 'CZ' : Tchéquie
  • 'DE' : Allemagne
  • 'DK' : Danemark
  • 'DZ' : Algérie
  • 'EC' : Équateur
  • 'EE' : Estonie
  • 'EG' : Égypte
  • 'ES' : Espagne
  • 'FI' : Finlande
  • 'FR' : France
  • 'GB' : Royaume-Uni
  • 'GR' : Grèce
  • 'HK' : Hong Kong
  • 'HU' : Hongrie
  • 'ID' : Indonésie
  • 'IE' : Irlande
  • 'IL' : Israël
  • 'IN' : Inde
  • 'IR' : Iran
  • 'IT' : Italie
  • 'JP' : Japon
  • 'KR' : Corée du Sud
  • 'LV' : Lettonie
  • 'MA' : Maroc
  • 'MX' : Mexique
  • 'MY' : Malaisie
  • 'NG' : Nigéria
  • 'NL' : Pays-Bas
  • 'NO' : Norvège
  • 'NZ' : Nouvelle-Zélande
  • 'PE' : Pérou
  • 'PH' : Philippines
  • 'PK' : Pakistan
  • 'PL' : Pologne
  • 'PT' : Portugal
  • 'RO' : Roumanie
  • 'RS' : Serbie
  • 'RU' : Russie
  • 'SA' : Arabie saoudite
  • 'SE' : Suède
  • 'SG' : Singapour
  • 'SI' : Slovénie
  • 'SK' : Slovaquie
  • 'TH' : Thaïlande
  • 'TR' : Turquie
  • 'TW' : Taïwan
  • 'UA' : Ukraine
  • 'US' : États-Unis
  • 'VE' : Venezuela
  • 'VN' : Viêt Nam
  • 'ZA' : Afrique du Sud

query_statement

La clause AS query_statement spécifie la requête en langage SQL standard permettant de générer les données d'entraînement. Pour en savoir plus sur la syntaxe SQL acceptée par la clause query_statement, consultez la page Syntaxe des requêtes en SQL standard.

Pour les modèles de série temporelle, "query_statement" doit contenir deux ou trois colonnes, selon que l'utilisateur souhaite prévoir une ou plusieurs séries temporelles. Dans les deux cas, time_series_timestamp_col et time_series_data_col sont obligatoires. Un time_series_id_col supplémentaire est nécessaire pour prévoir plusieurs séries temporelles.

Entrées compatibles

L'instruction CREATE MODEL accepte les types de données suivants pour les colonnes d'entrée de séries temporelles.

Types de données acceptés pour les entrées des modèles de série temporelle

BigQuery ML accepte différents types de données en SQL standard pour les colonnes d'entrée des modèles de série temporelle. Les types de données acceptés pour chaque colonne respective sont les suivants :

Time series input column Supported types
time_series_timestamp_col TIMESTAMP
DATE
DATETIME
time_series_data_col INT64
NUMERIC
BIGNUMERIC
FLOAT64
time_series_id_col STRING
INT64

Limites connues

Les instructions CREATE MODEL pour les modèles de série temporelle doivent respecter les règles suivantes :

  • La colonne time_series_id ne peut pas contenir de valeurs NULL. Si cette colonne contient des valeurs NULL, la requête échoue.
  • La longueur maximale de la série temporelle d'entrée est de 1 000 000. Lorsque vous prévoyez plusieurs séries temporelles simultanément, la limite s'applique à chaque série temporelle.
  • Le nombre maximal de séries temporelles à prévoir simultanément à l'aide de la colonne "ID" est de 100 000.
  • Lorsque vous prévoyez plusieurs séries temporelles simultanément à l'aide de la colonne "ID", les séries temporelles non valides qui échouent à l'ajustement du modèle sont ignorées et n'apparaissent pas dans les résultats de l'évaluation et de la prévision. Les exemples sont des séries temporelles uniques.
  • Le nombre maximal de points temporels à prévoir, spécifié à l'aide de horizon, est de 10 000.
  • La fréquence de données acceptée la plus précise est "horaire".
  • La modélisation des effets des jours fériés n'est efficace que pendant environ cinq ans.
  • L'option d'entraînement BigQuery ML warm_start n'est pas compatible avec les modèles de série temporelle.

Pourquoi et comment éviter les requêtes de longue durée

La prévision simultanée de plusieurs séries temporelles à l'aide de la colonne "ID" peut entraîner des requêtes de longue durée.

  • Lorsque de nombreuses séries temporelles sont prévues simultanément à l'aide de la colonne "ID", elles ne sont pas complètement prévues en parallèle en raison de la capacité d'emplacements. Par conséquent, si de nombreuses séries temporelles sont à prévoir, l'exécution de la requête peut prendre beaucoup de temps. L'environnement d'exécution de la requête dépend de la capacité d'emplacements, des propriétés de votre série temporelle, telles que la longueur, et de la valeur non_seasonal_d déterminée automatiquement. Lorsque vous avez un grand nombre de séries temporelles à prévoir (par exemple 100 000), nous vous recommandons vivement de commencer par prévoir un petit lot de séries temporelles (par exemple 1 000) pour connaître la durée de la requête. Vous pourrez ensuite estimer la durée approximative de la requête de prévision de l'ensemble de vos séries temporelles.
  • Vous pouvez utiliser l'option auto_arima_max_order pour équilibrer l'exécution de la requête et la justesse des prévisions. Par exemple, si vous utilisez 4 au lieu de la valeur par défaut 5 pour cette option, l'environnement d'exécution de la requête peut être réduit d'au moins 30 %. Cependant, la justesse des prévisions peut légèrement diminuer pour certaines des séries temporelles.
  • Pour éviter d'avoir à gérer une seule requête de longue durée, vous pouvez également utiliser la fonctionnalité de scripts de BigQuery.

Exemples d'instructions CREATE MODEL

L'exemple suivant crée des modèles nommés mymodel dans mydataset dans votre projet par défaut.

Entraîner un modèle de série temporelle pour prévoir une seule série temporelle

Cet exemple crée un modèle de série temporelle.

CREATE MODEL `project_id.mydataset.mymodel`
 OPTIONS(MODEL_TYPE='ARIMA',
         time_series_timestamp_col='date'
         time_series_data_col='transaction') AS
SELECT
  date,
  transaction
FROM
  `mydataset.mytable`

Entraîner plusieurs modèles de série temporelle pour plusieurs séries temporelles simultanément

Cet exemple crée plusieurs modèles de série temporelle, un pour chaque série temporelle d'entrée.

CREATE MODEL `project_id.mydataset.mymodel`
 OPTIONS(MODEL_TYPE='ARIMA',
         time_series_timestamp_col='date'
         time_series_data_col='transaction',
         time_series_id_col='company_name') AS
SELECT
  date,
  transaction,
  company_name
FROM
  `mydataset.mytable`

Étape suivante