Declaración CREATE MODEL para modelos de serie temporal

Declaración CREATE MODEL para modelos de serie temporal

Para crear modelos de serie temporal en BigQuery, usa la declaración CREATE MODEL de BigQuery ML y especifica MODEL_TYPE como 'ARIMA'.

Contenido de un modelo de serie temporal de BigQuery ML

ARIMA se considera el algoritmo principal que se usa en las series temporales de BigQuery ML. Sin embargo, no es el único modelo que se usa en la canalización de creación del modelo. La canalización consta de los siguientes componentes, enumerados según el orden en que se ejecutan los pasos:

  • Ajustes de limpieza automáticos en la serie temporal de entrada, incluidos los valores faltantes, las marcas de tiempo duplicadas, las anomalías de aumentos repentinos y los cambios abruptos de nivel en el historial de series temporales
  • Ajustes de efectos de festividades
  • Descomposición estacional y de tendencia mediante el algoritmo Descomposición estacional y de tendencia mediante Loess (STL)
  • Extrapolación de temporada mediante el algoritmo de suavizamiento exponencial doble (ETS)
  • Modelado de tendencias mediante el modelo ARIMA y el algoritmo auto.ARIMA para el ajuste automático de hiperparámetros. En auto.ARIMA, se entrenan y evalúan decenas de modelos candidatos en paralelo. El mejor modelo viene con el criterio de información Akaike (AIC) más bajo

Cuando se prevén varias series temporales al mismo tiempo mediante la opción TIME_SERIES_ID_COL, se ejecutan canalizaciones diferentes siempre que haya suficientes ranuras.

Sintaxis 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 } ]
  [, 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

Crea un modelo nuevo de BigQuery ML en el conjunto de datos especificado. Si el nombre del modelo ya existe, CREATE MODEL muestra un error.

CREATE MODEL IF NOT EXISTS

Crea un modelo de BigQuery ML nuevo solo si el modelo no existe en el conjunto de datos especificado.

CREATE OR REPLACE MODEL

Crea un modelo de BigQuery ML nuevo y reemplaza cualquier modelo existente con el mismo nombre en el conjunto de datos especificado.

model_name

model_name es el nombre del modelo de BigQuery ML que creas o reemplazas. El nombre del modelo debe ser único por conjunto de datos: ningún otro modelo o tabla puede tener el mismo nombre. El nombre del modelo debe seguir las mismas reglas de denominación que una tabla de BigQuery. Un nombre de modelo puede contener lo siguiente:

  • Hasta 1,024 caracteres
  • Letras en mayúscula o minúscula, números y guiones bajos

model_name no distingue entre mayúsculas y minúsculas.

Si no tienes un proyecto predeterminado configurado, antepone el ID del proyecto al nombre del modelo en el siguiente formato, incluidos los acentos graves:

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

Por ejemplo:

`myproject.mydataset.mymodel`

CREATE MODEL admite las siguientes opciones:

MODEL_TYPE

Sintaxis

MODEL_TYPE = 'ARIMA'

Descripción

Especifica el tipo de modelo. Para crear un modelo de serie temporal, configura model_type como 'ARIMA'.

model_option_list

En model_option_list, las opciones que siempre se requieren incluyen model_type, time_series_timestamp_col y time_series_data_col. Solo son obligatorias otras opciones en algunos casos. Puedes ver más detalles a continuación.

Los modelos de serie temporal admiten las siguientes opciones:

TIME_SERIES_TIMESTAMP_COL

Sintaxis

TIME_SERIES_TIMESTAMP_COL = string_value

Descripción

El nombre de la columna de marca de tiempo para los modelos de serie temporal.

Argumentos

string_value es una 'STRING'.

TIME_SERIES_DATA_COL

Sintaxis

TIME_SERIES_DATA_COL = string_value

Descripción

El nombre de la columna de datos para los modelos de serie temporal.

Argumentos

string_value es una 'STRING'.

TIME_SERIES_ID_COL

Sintaxis

TIME_SERIES_ID_COL = string_value

Descripción

El nombre de la columna de ID para los modelos de serie temporal. Esta columna se usa cuando el usuario desea ajustar y prever varias series temporales mediante una sola consulta. Los distintos ID indican series temporales diferentes.

Argumentos

string_value es una 'STRING'.

HORIZON

Sintaxis

HORIZON = int64_value

Descripción

La cantidad de puntos temporales a prever. Cuando se realiza una previsión de varias series temporales a la vez, este parámetro se aplica a cada serie temporal.

Argumentos

El valor es INT64. El valor predeterminado es 1,000. El valor máximo es 10,000.

AUTO_ARIMA

Sintaxis

AUTO_ARIMA = { TRUE | FALSE }

Descripción

Indica si el proceso de entrenamiento debe usar auto.ARIMA o no. Si es verdadero, el entrenamiento encontrará de forma automática el mejor orden no estacional (es decir, la tupla p, d, q) y decidirá si incluir un término de desvío lineal cuando d es 1. Si es falso, el usuario debe especificar el valor non_seasonal_order en la consulta. Cuando se realizan previsiones de varias series temporales al mismo tiempo, el algoritmo auto.ARIMA se debe usar para cada serie temporal, por lo que esta opción no debe configurarse como falsa.

Argumentos

El valor es BOOL. El valor predeterminado es TRUE.

NON_SEASONAL_ORDER

Sintaxis

NON_SEASONAL_ORDER = (int64_value, int64_value, int64_value)

Descripción

La tupla p, d, q no estacional para el modelo ARIMA. No hay valores predeterminados y debes especificarlos todos. Debes especificar de forma explícita auto_arima como falso para usar esta opción. En la actualidad, p y q están restringidos a [0, 1, 2, 3, 4, 5] y d está restringido a [0, 1, 2]. Cuando se realiza previsiones de varias series temporales al mismo tiempo, debido a que el algoritmo auto.ARIMA se debe usar para cada serie temporal, esta opción está inhabilitada.

Argumentos

(int64_value, int64_value, int64_value) es una tupla de tres 'INT64'.

DATA_FREQUENCY

Sintaxis

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

Descripción

La frecuencia de datos de la serie temporal de entrada. El nivel de detalle más alto admitido es 'HOURLY'. Cuando se realiza una previsión de varias series temporales a la vez, este argumento no se puede cambiar del valor predeterminado 'AUTO_FREQUENCY'.

Argumentos

Acepta los siguientes valores:

'AUTO_FREQUENCY': El proceso de entrenamiento infiere de forma automática la frecuencia de datos, que puede ser uno de los valores que se enumeran a continuación.

'HOURLY': Series temporales por hora

'DAILY': Series temporales diarias

'WEEKLY': Series temporales semanales

'MONTHLY': Series temporales mensuales

'QUARTERLY': Series temporales trimestrales

'YEARLY': Series temporales anuales

El valor predeterminado es 'AUTO_FREQUENCY'.

INCLUDE_DRIFT

Sintaxis

INCLUDE_DRIFT = { TRUE | FALSE }

Descripción

Indica si el modelo ARIMA debe incluir un término de desvío lineal o no. El término de desvío es aplicable cuando la d no estacional es 1.

  • Cuando se configura el valor de auto-arima como falso, el argumento predeterminado es falso. Se puede configurar como verdadero solo cuando la d no estacional es 1; de lo contrario, se mostrará un error de consulta no válida.

  • Cuando se configura el valor de auto-arima como verdadero, se decide de forma automática si se incluye un término de desvío lineal. Por lo tanto, esta opción está inhabilitada para auto-ARIMA.

Argumentos

El valor es BOOL. El valor predeterminado es FALSE porque auto_arima está inhabilitado.

HOLIDAY_REGION

Sintaxis

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

Descripción

La región geográfica en la que se aplican los efectos de festividades en el modelado. De forma predeterminada, el modelado de efectos de festividades está inhabilitado. Para activarlo, especifica la región de festividades mediante esta opción.

Argumentos

Acepta los siguientes valores:

Nivel superior: global

  • 'GLOBAL'

Segundo nivel: regiones continentales

  • 'NA': Norteamérica
  • 'JAPAC': Japón y Asia‑Pacífico
  • 'EMEA': Europa, Oriente Medio y África
  • 'LAC': América Latina y el Caribe

Tercer nivel: países o regiones

  • 'AE': Emiratos Árabes Unidos
  • 'AR': Argentina
  • 'AT': Austria
  • 'AU': Australia
  • 'BE': Bélgica
  • 'BR': Brasil
  • 'CA': Canadá
  • 'CH': Suiza
  • 'CL': Chile
  • 'CN': China
  • 'CO': Colombia
  • 'CZ': República Checa
  • 'DE': Alemania
  • 'DK': Dinamarca
  • 'DZ': Argelia
  • 'EC': Ecuador
  • 'EE': Estonia
  • 'EG': Egipto
  • 'ES': España
  • 'FI': Finlandia
  • 'FR': Francia
  • 'GB': Reino Unido
  • 'GR': Grecia
  • 'HK': Hong Kong
  • 'HU': Hungría
  • 'ID': Indonesia
  • 'IE': Irlanda
  • 'IL': Israel
  • 'IN': India
  • 'IR': Irán
  • 'IT': Italia
  • 'JP': Japón
  • 'KR': Corea del Sur
  • 'LV': Letonia
  • 'MA': Marruecos
  • 'MX': México
  • 'MY': Malasia
  • 'NG': Nigeria
  • 'NL': Países Bajos
  • 'NO': Noruega
  • 'NZ': Nueva Zelanda
  • 'PE': Perú
  • 'PH': Filipinas
  • 'PK': Pakistán
  • 'PL': Polonia
  • 'PT': Portugal
  • 'RO': Rumania
  • 'RS': Serbia
  • 'RU': Rusia
  • 'SA': Arabia Saudita
  • 'SE': Suecia
  • 'SG': Singapur
  • 'SI': Eslovenia
  • 'SK': Eslovaquia
  • 'TH': Tailandia
  • 'TR': Turquía
  • 'TW': Taiwán
  • 'UA': Ucrania
  • 'US': Estados Unidos
  • 'VE': Venezuela
  • 'VN': Vietnam
  • 'ZA': Sudáfrica

query_statement

La cláusula AS query_statement especifica la consulta de SQL estándar que se usa para generar los datos de entrenamiento. Para obtener información sobre la sintaxis de SQL admitida de la cláusula query_statement, consulta Sintaxis de consulta de SQL estándar.

Para los modelos de series temporales, se espera que query_statement contenga 2 o 3 columnas, según si el usuario desea prever una sola serie temporal o varias. En ambos casos, time_series_timestamp_col y time_series_data_col son obligatorios. Se requiere un time_series_id_col adicional para la previsión de varias series temporales.

Entradas admitidas

La declaración CREATE MODEL admite los siguientes tipos de datos para las columnas de entrada de series temporales.

Tipos de datos admitidos para entradas de modelos de series temporales

BigQuery ML admite diferentes tipos de datos de SQL estándar destinados a las columnas de entrada para modelos de serie temporal. Los tipos de datos admitidos para cada columna incluyen los siguientes:

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

Limitaciones conocidas

Las declaraciones CREATE MODEL para modelos de serie temporal deben cumplir con las siguientes reglas:

  • La columna time_series_id no puede contener valores NULL. Si esta columna contiene valores NULL, la consulta falla.
  • La columna time_series_data_col no puede contener valores NULL. Si esta columna contiene valores NULL, la consulta falla con errores INTERNAL. Para solucionar este problema, filtra los valores NULL en la columna de datos mediante la sintaxis WHERE <your_time_series_data_col> IS NOT NULL. Este problema se soluciona en la próxima versión, después de lo cual BigQuery ML manejará los valores NULL de forma automática.
  • La longitud máxima de la serie temporal de entrada es 1,000,000. Cuando se realiza una previsión de varias series temporales al mismo tiempo, el límite se aplica a cada serie temporal.
  • La cantidad máxima de series temporales que se pueden prever al mismo tiempo mediante la columna ID es 100,000.
  • Cuando se realiza una previsión de varias series temporales al mismo tiempo mediante la columna de ID, se ignorarán las series temporales no válidas que no se ajusten al modelo y no aparecerán en los resultados de la evaluación y la previsión. Los ejemplos son series temporales de un solo punto.
  • El máximo de puntos temporales a prever, que se especifica mediante horizon, es 10,000.
  • La mejor frecuencia de datos admitida es “por hora”.
  • El modelado de efecto de festividades solo es efectivo durante alrededor de 5 años.
  • La opción de entrenamiento de BigQuery ML warm_start no es compatible con los modelos de serie temporal.

La previsión de muchas series temporales de forma simultánea mediante la columna de ID puede generar consultas de larga duración.

  • Cuando se prevén muchas series temporales de forma simultánea mediante la columna de ID, no se prevén completamente en paralelo debido a la capacidad de la ranura. Como resultado, la consulta puede demorar mucho tiempo en completarse cuando hay muchas series temporales para prever. El tiempo de ejecución de la consulta dependerá de la capacidad de la ranura, las propiedades de la serie temporal, como la longitud, y el non_seasonal_d determinado de forma automática. Cuando tienes una gran cantidad (por ejemplo, 100,000) de series temporales para prever, te recomendamos que primero hagas una previsión de un pequeño lote de series temporales (por ejemplo, 1,000) para ver cuánto tiempo toma la consulta. Luego, puedes estimar de forma aproximada cuánto tiempo tardarás en hacer una previsión de toda la serie temporal.
  • Si deseas evitar una sola consulta de larga duración, puedes usar la secuencia de comandos de BigQuery.

Ejemplos de CREATE MODEL

En el siguiente ejemplo, se crean modelos llamados mymodel en mydataset en el proyecto predeterminado.

Entrena un modelo de serie temporal para prever una sola serie temporal

En este ejemplo, se crea un modelo de serie temporal.

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`

Entrena varios modelos de series temporales para prever varias series temporales al

mismo tiempo

En este ejemplo, se crean varios modelos de serie temporal, uno para cada serie temporal de entrada.

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`

Próximos pasos