Instrução CREATE MODEL para modelos de série temporal

Instrução CREATE MODEL para modelos de série temporal

Para criar modelos de série temporal no BigQuery, use a instrução CREATE MODEL do BigQuery ML e especifique MODEL_TYPE como 'ARIMA'.

O que compõe um modelo de série temporal do BigQuery ML

O ARIMA é considerado o principal algoritmo usado em séries temporais do BigQuery ML. No entanto, ele não é o único modelo usado no pipeline de criação de modelos. O pipeline consiste nos seguintes componentes, listados aproximadamente na ordem em que as etapas são executadas:

Quando várias séries temporais são previstas ao mesmo tempo por meio da opção TIME_SERIES_ID_COL, pipelines diferentes são executados em paralelo, desde que haja slots suficientes.

Sintaxe 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

Cria um novo modelo do BigQuery ML no conjunto de dados especificado. Se o nome do modelo já estiver em uso, CREATE MODEL retornará um erro.

CREATE MODEL IF NOT EXISTS

Cria um novo modelo do BigQuery ML somente se não houver um outro modelo de mesmo nome no conjunto de dados especificado.

CREATE OR REPLACE MODEL

Cria um novo modelo do BigQuery ML e substitui qualquer modelo que já existe com o mesmo nome no conjunto de dados especificado.

model_name

model_name é o nome do modelo do BigQuery ML que você está criando ou substituindo. O nome do modelo precisa ser exclusivo por conjunto de dados: nenhum outro modelo ou tabela pode ter o mesmo nome. O nome do modelo precisa seguir as mesmas regras de nomenclatura de uma tabela do BigQuery. Um nome de modelo pode conter:

  • até 1.024 caracteres
  • letras maiúsculas, minúsculas, números e sublinhados

model_name não diferencia maiúsculas de minúsculas.

Se você não tiver um projeto padrão configurado, preceda o nome do modelo com o ID do projeto no seguinte formato, incluindo os acentos graves:

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

Por exemplo:

`myproject.mydataset.mymodel`

CREATE MODEL é compatível com as seguintes opções:

MODEL_TYPE

Sintaxe

MODEL_TYPE = 'ARIMA'

Descrição

Especifica o tipo do modelo. Para criar um modelo de série temporal, defina model_type como 'ARIMA'.

model_option_list

No model_option_list, as opções que são sempre obrigatórias incluem model_type, time_series_timestamp_col e time_series_data_col. Outras opções são necessárias somente em determinados cenários. Veja mais detalhes abaixo.

Os modelos de série temporal são compatíveis com as seguintes opções:

TIME_SERIES_TIMESTAMP_COL

Sintaxe

TIME_SERIES_TIMESTAMP_COL = string_value

Descrição

O nome da coluna de marcação de tempo para modelos de série temporal.

Argumentos

string_value é uma 'STRING'.

TIME_SERIES_DATA_COL

Sintaxe

TIME_SERIES_DATA_COL = string_value

Descrição

O nome da coluna de dados para modelos de série temporal.

Argumentos

string_value é uma 'STRING'.

TIME_SERIES_ID_COL

Sintaxe

TIME_SERIES_ID_COL = string_value

Descrição

O nome da coluna "ID" em modelos de série temporal. Essa coluna é usada quando o usuário quer ajustar e prever várias séries temporais com uma única consulta. IDs diferentes indicam séries temporais diferentes.

Argumentos

string_value é uma 'STRING'.

HORIZON

Sintaxe

HORIZON = int64_value

Descrição

O número de pontos no tempo a serem previstos. Ao prever várias séries temporais de uma só vez, esse parâmetro se aplicará a cada série temporal.

Argumentos

O valor é um INT64. O valor padrão é 1.000. O valor máximo é 10.000.

AUTO_ARIMA

Sintaxe

AUTO_ARIMA = { TRUE | FALSE }

Descrição

Determina se o processo de treinamento deverá ou não usar auto.ARIMA. Se for verdadeiro, o treinamento encontrará automaticamente a melhor ordem não sazonal (ou seja, a tupla p, d, q) e decidirá se quer incluir um termo de deslocamento linear quando d for 1. Se for falso, o usuário precisará especificar non_seasonal_order na consulta. Quando se faz a previsão de várias séries temporais ao mesmo tempo, o algoritmo auto.ARIMA precisa ser usado em cada série temporal. Portanto, essa opção não pode ser definida como falsa.

Argumentos

O valor é um BOOL. O valor padrão é TRUE.

AUTO_ARIMA_MAX_ORDER

Sintaxe

AUTO_ARIMA_MAX_ORDER = int64_value

Descrição

O valor máximo para a soma de p e q não sazonais. Ele controla o espaço de pesquisa de parâmetros no algoritmo auto.ARIMA. Atualmente, os valores permitidos são 2, 3, 4 e 5. Como referência, para cada valor existem 6, 10, 15 e 21 modelos candidatos para avaliar se o d não sazonal estiver definido como 0 ou 2. Se for determinado que o d não sazonal será 1, o número de modelos candidatos a serem avaliados será dobrado, já que existe um termo de deslocamento extra a ser considerado para todos os modelos existentes. Essa opção é desativada quando AUTO_ARIMA é definido como falsa.

Argumentos

O valor é um INT64. O valor padrão é cinco. O valor mínimo é 2, e o máximo é 5.

NON_SEASONAL_ORDER

Sintaxe

NON_SEASONAL_ORDER = (int64_value, int64_value, int64_value)

Descrição

Tupla não sazonal de p, d, q no modelo ARIMA. Não há valores padrão, e você precisa especificar todos eles. Você precisa especificar explicitamente auto_arima como falso para usar essa opção. Atualmente, p e q estão restritos a [0, 1, 2, 3, 4, 5] e d está restrito a [0, 1, 2]. Quando se faz a previsão de várias séries temporais ao mesmo tempo, o algoritmo auto.ARIMA precisa ser usado para cada série temporal. Portanto, essa opção é desativada.

Argumentos

(int64_value, int64_value, int64_value) é uma tupla de três 'INT64'.

DATA_FREQUENCY

Sintaxe

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

Descrição

A frequência de dados da série temporal de entrada. A granularidade mais compatível é 'HOURLY'. Ao prever várias séries temporais de uma só vez, esse argumento se aplica a todas as séries temporais individuais.

Argumentos

Aceita os seguintes valores:

'AUTO_FREQUENCY': o processo de treinamento infere automaticamente a frequência de dados, que pode ser um dos valores listados abaixo.

'HOURLY': série temporal por hora

'DAILY': série temporal diária

'WEEKLY': série temporal semanal

'MONTHLY': série temporal mensal

'QUARTERLY': série temporal trimestral

'YEARLY': série temporal anual

O valor padrão é 'AUTO_FREQUENCY'.

INCLUDE_DRIFT

Sintaxe

INCLUDE_DRIFT = { TRUE | FALSE }

Descrição

Define se o modelo ARIMA deve incluir um termo de deslocamento linear. O termo de deslocamento é aplicável quando d não sazonal é 1.

  • Quando a definição auto_arima é definida como falsa, esse argumento é definido como falso. Ele poderá ser definido como verdadeiro somente quando d não sazonal for 1. Caso contrário, retornará um erro de consulta inválida.

  • Quando auto_arima é definido como verdadeiro, ele decide automaticamente se um termo de deslocamento linear deve ou não ser incluído. Portanto, essa opção está desativada para auto_ARIMA.

Argumentos

O valor é um BOOL. O valor padrão é FALSE quando auto_arima está desativado.

HOLIDAY_REGION

Sintaxe

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

Descrição

A região geográfica com base na qual os efeitos de feriados são aplicados na modelagem. Por padrão, a modelagem de efeitos de feriados está desativada. Para ativá-la, especifique a região de feriados usando essa opção.

Argumentos

Aceita os seguintes valores:

Nível superior: global

  • 'GLOBAL'

Segundo nível: regiões continentais

  • 'NA': América do Norte
  • 'JAPAC': Japão e Ásia-Pacífico
  • 'EMEA': Europa, Oriente Médio e África
  • 'LAC': América Latina e Caribe

Terceiro nível: países/regiões

  • 'AE': Emirados Árabes Unidos
  • 'AR': Argentina
  • 'AT': Áustria
  • 'AU': Austrália
  • 'BE': Bélgica
  • 'BR': Brasil
  • 'CA': Canadá
  • 'CH': Suíça
  • 'CL': Chile
  • 'CN': China
  • 'CO': Colômbia
  • 'CZ': República Tcheca
  • 'DE': Alemanha
  • 'DK': Dinamarca
  • 'DZ': Argélia
  • 'EC': Equador
  • 'EE': Estônia
  • 'EG': Egito
  • 'ES': Espanha
  • 'FI': Finlândia
  • 'FR': França
  • 'GB': Reino Unido
  • 'GR': Grécia
  • 'HK': Hong Kong
  • 'HU': Hungria
  • 'ID': Indonésia
  • 'IE': Irlanda
  • 'IL': Israel
  • 'IN': Índia
  • 'IR': Irã
  • 'IT': Itália
  • 'JP': Japão
  • 'KR': Coreia do Sul
  • 'LV': Letônia
  • 'MA': Marrocos
  • 'MX': México
  • 'MY': Malásia
  • 'NG': Nigéria
  • 'NL': Países Baixos
  • 'NO': Noruega
  • 'NZ': Nova Zelândia
  • 'PE': Peru
  • 'PH': Filipinas
  • 'PK': Paquistão
  • 'PL': Polônia
  • 'PT': Portugal
  • 'RO': Romênia
  • 'RS': Sérvia
  • 'RU': Rússia
  • 'SA': Arábia Saudita
  • 'SE': Suécia
  • 'SG': Singapura
  • 'SI': Eslovênia
  • 'SK': Eslováquia
  • 'TH': Tailândia
  • 'TR': Turquia
  • 'TW': Taiwan
  • 'UA': Ucrânia
  • 'US': Estados Unidos
  • 'VE': Venezuela
  • 'VN': Vietnã
  • 'ZA': África do Sul

query_statement

A cláusula AS query_statement especifica a consulta SQL padrão usada para gerar os dados de treinamento. Para mais informações sobre a sintaxe SQL compatível com a cláusula query_statement, consulte Sintaxe de consulta SQL padrão.

Em modelos de série temporal, a query_statement deverá conter duas ou três colunas, dependendo se o usuário quiser prever uma única série temporal ou várias séries temporais. Nos dois casos, time_series_timestamp_col e time_series_data_col são obrigatórios. Um time_series_id_col adicional é necessário para prever várias séries temporais.

Entradas compatíveis

A instrução CREATE MODEL é compatível com os seguintes tipos de dados nas colunas de entrada da série temporal.

Tipos de dados compatíveis com entradas de modelo de série temporal

O BigQuery ML é compatível com diferentes tipos de dados SQL padrão para as colunas de entrada em modelos de série temporal. Os tipos de dados compatíveis para cada coluna são:

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

Limitações conhecidas

As instruções CREATE MODEL em modelos de série temporal precisam obedecer às seguintes regras:

  • A coluna time_series_id não pode conter valores NULL. Se essa coluna tiver valores NULL, a consulta falhará.
  • O comprimento máximo da série temporal de entrada é 1.000.000. Quando se faz a previsão de várias séries temporais ao mesmo tempo, o limite se aplica a cada série temporal.
  • O número máximo de séries temporais a serem previstas simultaneamente com a coluna "ID" é 100.000.
  • Quando se faz a previsão de várias séries temporais simultaneamente com a coluna "ID", as séries temporais inválidas que não forem ajustadas ao modelo serão ignoradas e não aparecerão nos resultados da avaliação e da previsão. Os exemplos são séries temporais de ponto único.
  • O número máximo de pontos de tempo para previsão, que é especificado com horizon, é 10.000.
  • A melhor frequência de dados compatível é "por hora".
  • A modelagem de efeitos de feriados só é válida por aproximadamente cinco anos.
  • A opção de treinamento warm_start do BigQuery ML não é compatível com modelos de série temporal.

A previsão simultânea de muitas séries temporais com a coluna "ID" pode levar a consultas de longa duração.

  • Quando muitas séries temporais são previstas simultaneamente com a coluna "ID", elas não são completamente previstas em paralelo devido à capacidade do slot. Como resultado, a consulta pode levar muito tempo para ser concluída quando há muitas séries temporais para previsão. O tempo de execução da consulta dependerá da capacidade do seu slot, das propriedades da sua série temporal, como a duração, e do non_seasonal_d determinado automaticamente. Quando você tem um grande número de séries temporais para prever (por exemplo, 100.000), é recomendável que você preveja primeiro um lote menor de séries temporais (por exemplo, 1.000) para ver quanto tempo a consulta leva. Depois, será possível estimar quanto tempo levará para prever toda a série temporal.
  • É possível usar a opção auto_arima_max_order para equilibrar entre o ambiente de execução da consulta e a precisão da previsão. Por exemplo, se você usar 4 em vez do valor padrão 5 para essa opção, o ambiente de execução da consulta poderá ser reduzido em pelo menos 30%. No entanto, a precisão da previsão pode ser reduzida um pouco em algumas das séries temporais.
  • Se você quiser evitar uma única consulta de longa duração, use o script do BigQuery.

Exemplos de CREATE MODEL

O exemplo a seguir cria modelos denominados mymodel em mydataset do projeto padrão.

Como treinar um modelo de série temporal para prever uma única série temporal

Este exemplo cria um modelo de série 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`

Como treinar vários modelos de série temporal em várias séries temporais ao mesmo tempo

Este exemplo cria vários modelos de série temporal, um para cada série 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`

A seguir