Prever várias série temporal com um modelo multivariável

Neste tutorial, você aprende a usar um modelo de série temporal multivariada para prever o valor futuro de uma determinada coluna com base no valor histórico de vários atributos de entrada.

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

Este tutorial usa dados das tabelas públicas bigquery-public-data.iowa_liquor_sales.sales e bigquery-public-data.covid19_weathersource_com.postal_code_day_history. A tabela bigquery-public-data.iowa_liquor_sales.sales contém dados de vendas de bebidas alcoólicas coletados de várias cidades do estado de Iowa. A tabela bigquery-public-data.covid19_weathersource_com.postal_code_day_history contém dados históricos de clima, como temperatura e umidade, de todo o mundo.

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

Objetivos

Este tutorial orienta você na conclusão das seguintes tarefas:

Custos

Este tutorial usa componentes faturáveis do Google Cloud, incluindo o seguinte:

  • 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. Faça login na sua Google Cloud conta do. Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify 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, clique no botão abaixo.

    Ative a API BigQuery.

    Funções necessárias para ativar APIs

    Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin), que contém a permissão serviceusage.services.enable. Saiba como conceder papéis.

    Ativar a API

crie um conjunto de dados

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

Console

  1. No Google Cloud console, acesse a página 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.

  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 selecione EUA.

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

bq

Para criar um novo conjunto de dados, use o bq mk --dataset comando.

  1. Crie um conjunto de dados chamado bqml_tutorial com o local de dados definido como US.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Confirme se o conjunto de dados foi criado:

    bq ls

API

Chame o datasets.insert método com um recurso de conjunto de dados definido.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

Criar uma tabela de dados de entrada

Crie uma tabela de dados que possa ser usada para treinar e avaliar o modelo. Essa tabela combina colunas das tabelas bigquery-public-data.iowa_liquor_sales.sales e bigquery-public-data.covid19_weathersource_com.postal_code_day_history para analisar como o clima afeta o tipo e o número de itens pedidos por lojas de bebidas alcoólicas. Você também cria as seguintes colunas adicionais que podem ser usadas como variáveis de entrada para o modelo:

  • date: a data do pedido
  • store_number: o número exclusivo da loja que fez o pedido
  • item_number: o número exclusivo do item que foi pedido
  • bottles_sold: o número de garrafas pedidas do item associado
  • temperature: a temperatura média na localização da loja na data do pedido
  • humidity: a umidade média na localização da loja na data do pedido

Siga estas etapas para criar a tabela de dados de entrada:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo e clique em Executar:

    CREATE OR REPLACE TABLE
      `bqml_tutorial.iowa_liquor_sales_with_weather` AS
    WITH
      sales AS (
        SELECT
          DATE,
          store_number,
          item_number,
          bottles_sold,
          SAFE_CAST(SAFE_CAST(zip_code AS FLOAT64) AS INT64) AS zip_code
        FROM
          `bigquery-public-data.iowa_liquor_sales.sales` AS sales
        WHERE
          SAFE_CAST(zip_code AS FLOAT64) IS NOT NULL
      ),
      aggregated_sales AS (
        SELECT
          DATE,
          store_number,
          item_number,
          ANY_VALUE(zip_code) AS zip_code,
          SUM(bottles_sold) AS bottles_sold,
        FROM
          sales
        GROUP BY
          DATE,
          store_number,
          item_number
      ),
      weather AS (
        SELECT
          DATE,
          SAFE_CAST(postal_code AS INT64) AS zip_code,
          avg_temperature_air_2m_f AS temperature,
          avg_humidity_specific_2m_gpkg AS humidity,
        FROM
          `bigquery-public-data.covid19_weathersource_com.postal_code_day_history`
        WHERE
          country = 'US' AND
          SAFE_CAST(postal_code AS INT64) IS NOT NULL
      )
    SELECT
      aggregated_sales.date,
      aggregated_sales.store_number,
      aggregated_sales.item_number,
      aggregated_sales.bottles_sold,
      weather.temperature AS temperature,
      weather.humidity AS humidity
    FROM
      aggregated_sales
      LEFT JOIN weather ON aggregated_sales.zip_code=weather.zip_code
      AND aggregated_sales.DATE=weather.DATE;

Criar o modelo de série temporal

Crie um modelo de série temporal para prever as garrafas vendidas para cada combinação de ID da loja e ID do item, para cada data na tabela bqml_tutorial.iowa_liquor_sales_with_weather antes de 1º de setembro de 2022. Use a temperatura e a umidade médias do local da loja em cada data como atributos a serem avaliados durante a estimativa. Há cerca de 1 milhão de combinações distintas de número de item e número de loja na tabela bqml_tutorial.iowa_liquor_sales_with_weather, o que significa que há 1 milhão de série temporal diferentes para prever.

Siga estas etapas para criar o modelo:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo e clique em Executar:

    CREATE
    OR REPLACE MODEL `bqml_tutorial.multi_time_series_arimax_model`
    OPTIONS(
      model_type = 'ARIMA_PLUS_XREG',
      time_series_id_col = ['store_number', 'item_number'],
      time_series_data_col = 'bottles_sold',
      time_series_timestamp_col = 'date'
    )
    AS SELECT
      *
    FROM
      `bqml_tutorial.iowa_liquor_sales_with_weather`
    WHERE
      DATE < DATE('2022-09-01');

    A consulta leva aproximadamente 38 minutos para ser concluída. Depois disso, você pode acessar o modelo multi_time_series_arimax_model. Como a consulta usa uma instrução CREATE MODEL para criar um modelo, não é possível ver os resultados da consulta.

Usar o modelo para prever dados

Preveja valores de série temporal futuros usando a função ML.FORECAST.

Na consulta GoogleSQL a seguir, a cláusula STRUCT(5 AS horizon, 0.8 AS confidence_level) indica que a consulta prevê 5 pontos no tempo futuro e gera um intervalo de previsão com um nível de confiança de 80%.

A assinatura de dados dos dados de entrada para a função ML.FORECAST é a mesma dos dados de treinamento usados para criar o modelo. A coluna bottles_sold não está incluída na entrada, porque são os dados que o modelo está tentando prever.

Siga estas etapas para prever dados com o modelo:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo e clique em Executar:

    SELECT
      *
    FROM
      ML.FORECAST (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (5 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            * EXCEPT (bottles_sold)
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE>=DATE('2022-09-01')
        )
      );

    A resposta deve ficar assim:

    Dados previstos para o número de garrafas vendidas.

    As linhas de saída estão em ordem pelo valor store_number, depois pelo valor item_ID e, em seguida, em 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 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 de série temporal futuros e também retorna todos os componentes separados da série temporal.

Semelhante à função ML.FORECAST, a cláusula STRUCT(5 AS horizon, 0.8 AS confidence_level) usada na função ML.EXPLAIN_FORECAST indica que a consulta prevê 30 pontos no tempo futuro e gera um intervalo de previsão com 80% de confiança.

A função ML.EXPLAIN_FORECAST fornece dados históricos e de previsão. Para conferir apenas os dados de previsão, adicione a opção time_series_type à consulta e especifique forecast como o valor da opção.

Siga estas etapas para explicar os resultados do modelo:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo e clique em Executar:

    SELECT
      *
    FROM
      ML.EXPLAIN_FORECAST (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (5 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            * EXCEPT (bottles_sold)
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

    A resposta deve ficar assim:

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

    As linhas de saída são ordenadas cronologicamente pelo valor da coluna time_series_timestamp.

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

Avaliar a acurácia da previsão

Avalie a acurácia da previsão do modelo executando-o em dados em que o modelo não foi treinado. Para fazer isso, use a função ML.EVALUATE. A função ML.EVALUATE avalia cada série temporal de forma independente.

Na consulta GoogleSQL a seguir, a segunda instrução SELECT fornece os dados com os atributos futuros, que são usados para prever os valores futuros a serem comparados com os dados reais.

Siga estas etapas para avaliar a acurácia do modelo:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo e clique em Executar:

    SELECT
      *
    FROM
      ML.EVALUATE (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        (
          SELECT
            *
          FROM
           `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

    A resposta deve ficar assim:

    Métricas de avaliação do modelo.

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

Usar o modelo para detectar anomalias

Detecte anomalias nos dados de treinamento usando a função ML.DETECT_ANOMALIES.

Na consulta a seguir, a cláusula STRUCT(0.95 AS anomaly_prob_threshold) faz com que a função ML.DETECT_ANOMALIES identifique pontos de dados anômalos com um nível de confiança de 95%.

Siga estas etapas para detectar anomalias nos dados de treinamento:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo e clique em Executar:

    SELECT
      *
    FROM
      ML.DETECT_ANOMALIES (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (0.95 AS anomaly_prob_threshold)
      );

    A resposta deve ficar assim:

    Informações de detecção de anomalias para os dados de treinamento.

    A coluna anomaly_probability nos resultados identifica a probabilidade de um determinado valor da coluna bottles_sold ser anômalo.

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

Detectar anomalias em novos dados

Detecte anomalias nos novos dados fornecendo dados de entrada para a função ML.DETECT_ANOMALIES. Os novos dados precisam ter a mesma assinatura de dados que os dados de treinamento.

Siga estas etapas para detectar anomalias em novos dados:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta abaixo e clique em Executar:

    SELECT
      *
    FROM
      ML.DETECT_ANOMALIES (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (0.95 AS anomaly_prob_threshold),
        (
          SELECT
            *
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

    A resposta deve ficar assim:

    Informações de detecção de anomalias para novos dados.

Liberar espaço

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 Google Cloud console.

    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 no lado direito da janela. Essa ação exclui o conjunto, 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. No Google Cloud console, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
  3. Na caixa de diálogo, digite o ID do projeto e clique em Desligar para excluir o projeto.

A seguir