Prever várias série temporal com um modelo univariado


Neste tutorial, você vai aprender a usar um modelo de série temporal univariado para prever o valor futuro de uma determinada coluna com base nos valores históricos dela.

Este tutorial faz previsões para várias série temporal. Os valores previstos são calculados para cada ponto de tempo e para cada valor em uma ou mais colunas especificadas. Por exemplo, se você quisesse prever o clima e especificasse uma coluna com dados da cidade, os dados previstos teriam previsões para todos os pontos de tempo da Cidade A, depois os valores previstos para todos os pontos de tempo da Cidade B e assim por diante.

Este tutorial usa dados da tabela pública bigquery-public-data.new_york.citibike_trips. Esta tabela contém informações sobre as viagens do Citi Bike na cidade de Nova York.

Antes de ler este tutorial, recomendamos que você leia Como prever uma única série temporal com um modelo univariado.

Objetivos

Este tutorial vai orientar você nas seguintes tarefas:

Custos

Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:

  • BigQuery
  • BigQuery ML

Para mais informações sobre os custos do BigQuery, consulte a página de preços.

Para mais informações sobre os custos do BigQuery ML, consulte os preços do BigQuery ML.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. O BigQuery é ativado automaticamente em novos projetos. Para ativar o BigQuery em um projeto preexistente, acesse

    Enable the BigQuery API.

    Enable the API

Permissões exigidas

  • Para criar o conjunto de dados, é preciso ter a permissão de IAM bigquery.datasets.create.
  • Para criar o recurso de conexão, você precisa das seguintes permissões:

    • bigquery.connections.create
    • bigquery.connections.get
  • Para criar o modelo, você precisa das seguintes permissões:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.connections.delegate
  • Para executar a inferência, você precisa das seguintes permissões:

    • bigquery.models.getData
    • bigquery.jobs.create

Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Introdução ao IAM.

Criar um conjunto de dados

Crie um conjunto de dados do BigQuery para armazenar o modelo de ML:

  1. No console do Google Cloud, acesse a página do BigQuery.

    Acesse a página do BigQuery

  2. No painel Explorer, clique no nome do seu projeto.

  3. Clique em Conferir ações > Criar conjunto de dados.

    Criar conjunto de dados.

  4. Na página Criar conjunto de dados, faça o seguinte:

    • Para o código do conjunto de dados, insira bqml_tutorial.

    • Em Tipo de local, selecione Multirregião e EUA (várias regiões nos Estados Unidos).

      Os conjuntos de dados públicos são armazenados na multirregião US. Para simplificar, armazene seus conjuntos de dados no mesmo local.

    • Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.

      Página Criar conjunto de dados.

Visualizar os dados de entrada

Antes de criar o modelo, você pode visualizar os dados de série temporal de entrada para ter uma ideia da distribuição. Para isso, use o Looker Studio.

A instrução SELECT da consulta a seguir usa a função EXTRACT para extrair as informações de data da coluna starttime. A consulta usa a cláusula COUNT(*) para descobrir o número total diário de viagens do Citi Bike.

Siga estas etapas para visualizar os dados da série temporal:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No Editor de consultas, cole a consulta a seguir e clique em Executar:

    SELECT
      EXTRACT(DATE from starttime) AS date,
      COUNT(*) AS num_trips
    FROM
    `bigquery-public-data.new_york.citibike_trips`
    GROUP BY date;
  3. Quando a consulta for concluída, clique em Explorar dados > Explorar com o Looker Studio. O Looker Studio é aberto em uma nova guia. Conclua as etapas a seguir na nova guia.

  4. No Looker Studio, clique em Inserir > Gráfico de série temporal.

  5. No painel Gráfico, escolha a guia Configuração.

  6. Na seção Métrica, adicione o campo num_trips e remova a métrica padrão Contagem de registros. O gráfico resultante é semelhante a este:

    Gráfico que mostra dados de viagens de bicicleta ao longo do tempo.

Criar o modelo de série temporal

Você quer prever o número de viagens de bicicleta para cada estação do Citi Bike, o que exige muitos modelos de série temporal, um para cada estação do Citi Bike incluída nos dados de entrada. É possível gravar várias consultas CREATE MODEL para fazer isso, mas isso pode ser um processo tedioso e demorado, especialmente quando você tem um grande número de série temporal. Em vez disso, use uma única consulta para criar e ajustar um conjunto de modelos de série temporal e prever várias série temporal ao mesmo tempo.

Na consulta a seguir, a cláusula OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) indica que você está criando um modelo de série temporal com base em ARIMA. Use a opção time_series_id_col da instrução CREATE MODEL para especificar uma ou mais colunas nos dados de entrada para as quais você quer receber previsões. Neste caso, a estação do Citi Bike, representada pela coluna start_station_name. Você usa a cláusula WHERE para limitar as estações de início àquelas que tenham Central Park no nome. A opção auto_arima_max_order da instrução CREATE MODEL controla o espaço de pesquisa para ajuste de hiperparâmetros no algoritmo auto.ARIMA. A opção decompose_time_series da instrução CREATE MODEL é definida como TRUE por padrão. Assim, as informações sobre os dados de série temporal são retornadas quando você avalia o modelo na próxima etapa.

Siga estas etapas para criar o modelo:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No Editor de consultas, cole a consulta a seguir e clique em Executar:

    CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_group`
    OPTIONS
    (model_type = 'ARIMA_PLUS',
      time_series_timestamp_col = 'date',
      time_series_data_col = 'num_trips',
      time_series_id_col = 'start_station_name',
      auto_arima_max_order = 5
    ) AS
    SELECT
      start_station_name,
      EXTRACT(DATE from starttime) AS date,
      COUNT(*) AS num_trips
    FROM
    `bigquery-public-data.new_york.citibike_trips`
    WHERE start_station_name LIKE '%Central Park%'
    GROUP BY start_station_name, date;

    A consulta leva cerca de 24 segundos para ser concluída. Depois disso, o modelo nyc_citibike_arima_model_group aparece no painel Explorer. Como a consulta usa uma instrução CREATE MODEL, você não vê os resultados da consulta.

Essa consulta cria 12 modelos de série temporal, um para cada uma das 12 estações de partida da Citi Bike nos dados de entrada. Devido ao paralelismo, o custo de tempo, aproximadamente 24 segundos, é 1,4 vezes maior do que o de criar um único modelo de série temporal. No entanto, se você remover a cláusula WHERE ... LIKE ..., haverá mais de 600 série temporal para previsão, e elas não serão completamente previstas em paralelo devido a limitações de capacidade do slot. Nesse caso, a consulta levaria cerca de 15 minutos para ser concluída. Para reduzir o tempo de execução da consulta com o comprometimento de uma possível pequena queda na qualidade do modelo, é possível diminuir o valor da opção auto_arima_max_order para 3 ou 4 do valor padrão 5. Isso reduz o espaço de pesquisa do ajuste de hiperparâmetros no algoritmo auto.ARIMA. Para mais informações, consulte Large-scale time series forecasting best practices.

Avaliar o modelo

Avalie o modelo de série temporal usando a função ML.ARIMA_EVALUATE. A função ML.ARIMA_EVALUATE mostra as métricas de avaliação que foram geradas para o modelo durante o processo de ajuste automático de hiperparâmetros.

Siga estas etapas para avaliar o modelo:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No Editor de consultas, cole a consulta a seguir e clique em Executar:

    SELECT
     *
    FROM
     ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);

    Os resultados vão ter a aparência abaixo:

    Métricas de avaliação do modelo de série temporal.

    A coluna start_station_name identifica a coluna de dados de entrada para a qual série temporal foram criadas. Essa é a coluna que você especificou na opção time_series_id_col da instrução CREATE MODEL.

    As colunas de saída non_seasonal_p, non_seasonal_d, non_seasonal_q e has_drift definem um modelo ARIMA no pipeline de treinamento. As colunas de saída log_likelihood, AIC e variance são relevantes para o processo de ajuste do modelo ARIMA.O processo de ajuste determina o melhor modelo ARIMA usando o algoritmo auto.ARIMA, um para cada série temporal.

    O algoritmo auto.ARIMA usa o teste KPSS para determinar o melhor valor para non_seasonal_d, que neste caso é 1. Quando non_seasonal_d é 1, o algoritmo auto.ARIMA treina 42 modelos ARIMA candidatos em paralelo. Neste exemplo, todos os 42 modelos candidatos são válidos, portanto, a saída contém 42 linhas, uma para cada modelo ARIMA candidato. Nos casos em que alguns dos modelos não são válidos, eles são excluídos da saída. Esses modelos candidatos são retornados em ordem crescente pelo AIC. O modelo na primeira linha tem o AIC mais baixo e é considerado o melhor modelo. Esse melhor modelo é salvo como o modelo final e é usado quando você chama ML.FORECAST, ML.EVALUATE e ML.ARIMA_COEFFICIENTS, conforme mostrado nas etapas a seguir.

    A coluna seasonal_periods contém informações sobre o padrão sazonal identificado nos dados de série temporal. Cada série temporal pode ter diferentes padrões sazonais. Por exemplo, na figura, é possível ver que uma série temporal tem um padrão anual, enquanto outras não.

    As colunas has_holiday_effect, has_spikes_and_dips e has_step_changes são preenchidas somente quando decompose_time_series=TRUE. Essas colunas também refletem informações sobre os dados de série temporal de entrada e não estão relacionadas à modelagem ARIMA. Essas colunas também têm os mesmos valores em todas as linhas de saída.

    Para mais informações sobre as colunas de saída, consulte a função ML.ARIMA_EVALUATE.

Embora auto.ARIMA avalie dezenas de modelos ARIMA candidatos para cada série temporal, ML.ARIMA_EVALUATE gera por padrão apenas as informações do melhor modelo a fim de compactar a tabela de saída. Para conferir todos os modelos candidatos, defina o argumento show_all_candidate_model da função ML.ARIMA_EVALUATE como TRUE.

Inspecionar os coeficientes do modelo

Inspecione os coeficientes do modelo de série temporal usando a função ML.ARIMA_COEFFICIENTS.

Siga estas etapas para extrair os coeficientes do modelo:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No Editor de consultas, cole a consulta a seguir e clique em Executar:

    SELECT
     *
    FROM
     ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);

    A consulta leva menos de um segundo para ser concluída. Os resultados devem ficar assim:

    Coeficientes do modelo de série temporal.

    A coluna start_station_name identifica a coluna de dados de entrada para a qual série temporal foram criadas. Essa é a coluna que você especificou na opção time_series_id_col da instrução CREATE MODEL.

    A coluna de saída ar_coefficients mostra os coeficientes do modelo da parte autoregressiva (AR) do modelo ARIMA. Da mesma forma, a coluna de saída ma_coefficients mostra os coeficientes do modelo da parte de média móvel (MA) do modelo ARIMA. Ambas as colunas contêm valores de matriz, com comprimentos iguais a non_seasonal_p e non_seasonal_q, respectivamente. O valor intercept_or_drift é o termo constante no modelo ARIMA.

    Para mais informações sobre as colunas de saída, consulte a função ML.ARIMA_COEFFICIENTS.

Usar o modelo para prever dados

Prever valores futuros da série temporal usando a função ML.FORECAST.

Na consulta GoogleSQL a seguir, a cláusula STRUCT(3 AS horizon, 0.9 AS confidence_level) indica que a consulta prevê três pontos no tempo futuros e gera um intervalo de previsão com um nível de confiança de 90%.

Siga estas etapas para prever dados com o modelo:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No Editor de consultas, cole a consulta a seguir e clique em Executar:

    SELECT
     *
    FROM
     ML.FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`,
       STRUCT(3 AS horizon, 0.9 AS confidence_level))
  3. Clique em Executar.

    A consulta leva menos de um segundo para ser concluída. Os resultados terão o seguinte formato:

    Saída ML.FORECAST.

    start_station_name, a primeira coluna, anota a série temporal à qual cada modelo de série temporal é ajustado. Cada start_station_name tem três linhas de resultados previstos, conforme especificado pelo valor horizon.

    Para cada start_station_name, as linhas de saída estão na ordem cronológica pelo valor da coluna forecast_timestamp. Na previsão de série temporal, o intervalo de previsão, representado pelos valores das colunas prediction_interval_lower_bound e prediction_interval_upper_bound, é tão importante quanto o valor da coluna forecast_value. O valor forecast_value é o ponto central do intervalo de previsão. O intervalo de previsão depende dos valores das colunas standard_error e confidence_level.

    Para mais informações sobre as colunas de saída, consulte a função ML.FORECAST.

Explicar os resultados da previsão

É possível receber métricas de explicabilidade, além de dados de previsão, usando a função ML.EXPLAIN_FORECAST. A função ML.EXPLAIN_FORECAST prevê valores futuros da série temporal e também retorna todos os componentes separados da série temporal. Se você quiser apenas retornar dados de previsão, use a função ML.FORECAST, conforme mostrado em Usar o modelo para prever dados.

A cláusula STRUCT(3 AS horizon, 0.9 AS confidence_level) usada na função ML.EXPLAIN_FORECAST indica que a consulta prevê três pontos no tempo futuro e gera um intervalo de previsão com 90% de confiança.

Siga estas etapas para explicar os resultados do modelo:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No Editor de consultas, cole a consulta a seguir e clique em Executar:

    SELECT
     *
    FROM
     ML.EXPLAIN_FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`,
       STRUCT(3 AS horizon, 0.9 AS confidence_level));

    A consulta leva menos de um segundo para ser concluída. Os resultados terão o seguinte formato:

    As nove primeiras colunas de saída de dados e explicações de previsão. As colunas de saída de 10 a 17 dos dados e explicações de previsão. As seis últimas colunas de saída de dados e explicações de previsão.

    As primeiras milhares de linhas retornadas são todos os dados históricos. Você precisa rolar pelos resultados para conferir os dados de previsão.

    As linhas de saída são ordenadas primeiro por start_station_name e depois cronologicamente pelo valor da coluna time_series_timestamp. Na previsão de série temporal, o intervalo de previsão, representado pelos valores das colunas prediction_interval_lower_bound e prediction_interval_upper_bound, é tão importante quanto o valor da coluna forecast_value. O valor forecast_value é o ponto central do intervalo de previsão. O intervalo de previsão depende dos valores das colunas standard_error e confidence_level.

    Para mais informações sobre as colunas de saída, consulte ML.EXPLAIN_FORECAST.

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

  • exclua o projeto que você criou; ou
  • Mantenha o projeto e exclua o conjunto de dados.

Excluir o conjunto de dados

A exclusão do seu projeto removerá todos os conjuntos de dados e tabelas no projeto. Caso prefira reutilizá-lo, exclua o conjunto de dados criado neste tutorial:

  1. Se necessário, abra a página do BigQuery no console do Google Cloud.

    Acesse a página do BigQuery

  2. Na navegação, clique no conjunto de dados bqml_tutorial criado.

  3. Clique em Excluir conjunto de dados para excluir o conjunto de dados, a tabela e todos os dados.

  4. Na caixa de diálogo Excluir conjunto de dados, confirme o comando de exclusão digitando o nome do seu conjunto de dados (bqml_tutorial). Em seguida, clique em Excluir.

Excluir o projeto

Para excluir o projeto:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

A seguir