Previsão de séries temporais com a Vertex AI e o BigQuery ML

1. Visão geral

Neste laboratório, você vai aprender a criar um modelo de previsão de série temporal com o TensorFlow e a implantar esses modelos com a Vertex AI.

Conteúdo do laboratório

Você vai aprender a:

  • Transformar dados para que possam ser usados em um modelo de ML
  • Visualizar e analisar dados
  • Usar o BigQuery ML para criar um modelo de previsão de série temporal
  • Criar um modelo de previsão de série temporal com o TensorFlow usando arquiteturas LSTM e CNN

2. Introdução à previsão de série temporal

O foco deste codelab é como aplicar técnicas de previsão de série temporal usando o Google Cloud Platform. Não é um curso geral de previsão de série temporal, mas uma breve visão geral dos conceitos pode ser útil para nossos usuários.

Dados de série temporal

Primeiro, o que é uma série temporal? É um conjunto de dados com dados registrados em intervalos de tempo regulares. Um conjunto de dados de série temporal contém tempo e pelo menos uma variável que depende do tempo.

85af6a1ff05c69f2.png

Componentes

Uma série temporal pode ser decomposta em componentes:

  • Tendência: sobe ou desce em um padrão razoavelmente previsível
  • Sazonal: se repete em um período específico, como um dia, semana, mês, estação etc.
  • Aleatório: flutuações residuais

Pode haver várias camadas de sazonalidade. Por exemplo, um call center pode observar um padrão no volume de chamadas em determinados dias da semana e em determinados meses. O residual pode ser explicado por outras variáveis além do tempo.

6e8d45bbbbc388ec.png

Estacionariedade

Para melhores resultados na previsão, os dados de série temporal precisam ser estacionários, em que as propriedades estatísticas, como média e variância, sejam constantes ao longo do tempo. Técnicas como diferenciação e remoção de tendência podem ser aplicadas a dados brutos para torná-los mais estacionários.

Por exemplo, o gráfico abaixo da concentração de CO2 mostra um padrão anual repetido com uma tendência de alta. ( Fonte)

ab82857e2e7d0b89.png

Depois de remover a tendência linear, os dados são mais adequados para previsão, já que agora têm uma média constante.

c936381ab1095528.png

Como usar dados de série temporal para machine learning

Para usar dados de série temporal em um problema de machine learning, eles precisam ser transformados para que os valores anteriores possam ser usados para prever valores futuros. Esta tabela mostra um exemplo de como as variáveis atrasadas são criadas para ajudar a prever o destino.

d667a941dbd470f5.png

Agora que abordamos alguns fundamentos, vamos começar a analisar dados e fazer previsões.

3. Configurar o ambiente do notebook

Agora que fizemos uma breve introdução aos dados, vamos configurar nosso ambiente de desenvolvimento de modelos.

Etapa 1: ativar as APIs

O conector do BigQuery usa a API BigQuery Storage. Pesquise a API BigQuery Storage no console do Google Cloud e ative a API se ela estiver desativada.

9895a2fd3cdf8f8c.png

Etapa 2: criar um notebook do Vertex AI Workbench

Acesse a seção Vertex AI Workbench do console do Cloud e clique em Novo notebook. Em seguida, selecione o tipo de notebook TensorFlow Enterprise 2.x mais recente sem GPUs:

4e7b73eabf2bc061.png

Use as opções padrão e clique em Criar. Quando a instância tiver sido criada, selecione Abrir o JupyterLab:

18c9f3c462aafaee.png

Em seguida, crie um notebook Python 3 no JupyterLab:

58523671a252b95a.png

Etapa 3: fazer o download dos materiais do laboratório

Crie uma nova janela de terminal na interface do JupyterLab: Arquivo -> Novo -> Terminal.

Em seguida, clone o material de origem com este comando:

git clone https://github.com/GoogleCloudPlatform/training-data-analyst

4. Analisar e visualizar dados

Nesta seção, você:

  • Criar uma consulta que agrupa dados em uma série temporal
  • Preencher valores ausentes
  • Visualizar dados
  • Decompor a série temporal em componentes de tendência e sazonais

Etapa 1

No Vertex AI Workbench, acesse training-data-analyst/courses/ai-for-time-series/notebooks e abra 01-explore.ipynb.

Etapa 2

Limpe todas as células do notebook (Editar > Limpar todas as saídas), mude as configurações de região, projeto e bucket em uma das primeiras células e execute as células uma por uma.

Etapa 3

Nesta seção, você importou os dados e visualizou várias dimensões deles. Agora que você tem uma imagem mais clara dos dados, estará pronto para prosseguir com a modelagem de machine learning usando esses dados.

55839e7bc0427915.png

5. Criar um modelo com a previsão de série temporal do BigQuery

Nesta seção, você:

  • Importar os dados de entrada da série temporal para uma tabela do BigQuery
  • Criar um modelo de série temporal usando a sintaxe do BQML
  • Aprender a avaliar os parâmetros e a acurácia do modelo
  • Fazer previsões usando o modelo

Etapa 1

Vamos criar uma tabela do BigQuery com os dados brutos do CSV que acabamos de analisar. Comece fazendo o download do CSV no ambiente do notebook.

No diretório training-data-analyst/courses/ai-for-time-series/notebooks/data, clique com o botão direito do mouse em cta_ridership.csv e selecione Fazer o download para o ambiente local.

Etapa 2

Em seguida, vamos fazer o upload desses dados para uma tabela do BigQuery.

Acesse o BigQuery no console (pesquisando ou usando este link):

649e7ab1c44b75e8.png

É possível adicionar a tabela a um conjunto de dados novo ou atual, que agrupa tabelas relacionadas. Se você ainda não tiver criado um conjunto de dados, clique no seu projeto no canto inferior esquerdo e selecione Criar conjunto de dadosno canto inferior direito.

281b97020cd52f29.png

Escolha um nome, como demo, aceite os padrões e continue.

Com esse conjunto de dados selecionado, selecione Criar tabela no canto inferior direito para criar uma nova tabela.

ad47810d44cfb289.png

Para as opções de criação de tabela, selecione:

  • Criar tabela de: Upload
  • Selecionar arquivo: cta_ridership.csv
  • Nome da tabela: cta_ridership
  • Esquema: marque a caixa para detectar automaticamente Esquema e parâmetros de entrada

213e4177e9e79544.png

Etapa 3

Agora é hora de criar nosso modelo. O BigQuery ML oferece uma sintaxe simples semelhante ao SQL que permite criar uma grande variedade de tipos de modelos.

No editor de consultas, cole/digite esta consulta, substituindo demo pelo nome do conjunto de dados nos dois locais, se necessário:

CREATE OR REPLACE MODEL
  `demo.cta_ridership_model` OPTIONS(MODEL_TYPE='ARIMA',
    TIME_SERIES_TIMESTAMP_COL='service_date',
    TIME_SERIES_DATA_COL='total_rides',
    HOLIDAY_REGION='us') AS
SELECT
  service_date, total_rides
FROM
  `demo.cta_ridership`

Vamos analisar os principais elementos da sintaxe para entender:

CREATE OR REPLACE MODEL
demo.cta_ridership_model

Essa instrução cria o modelo. Há variantes dessa instrução, por exemplo, CREATE MODEL, mas escolhemos substituir um modelo atual com o mesmo nome aqui.

OPTIONS(MODEL_TYPE=‘ARIMA' ... )

Aqui, definimos as opções do modelo, sendo a primeira o tipo de modelo. A seleção do ARIMA vai criar um modelo de previsão de série temporal.

TIME_SERIES_TIMESTAMP_COL=‘service_date'

A coluna com informações de data/hora

TIME_SERIES_DATA_COL=‘total_rides'

A coluna de dados

HOLIDAY_REGION=‘us'

Esse parâmetro opcional permite incluir feriados no modelo. Como nossa análise de dados na etapa anterior mostrou que o número de passageiros era menor nos feriados e os dados são de Chicago, IL, EUA, estamos incluindo feriados dos EUA no modelo.

AS SELECT ... FROM ...

Esta seção seleciona os dados de entrada que serão usados para treinar o modelo.

Há várias outras opções que podem ser adicionadas à consulta, como definir uma coluna se você tiver várias séries temporais ou escolher se os parâmetros do modelo ARIMA serão descobertos automaticamente. Para mais detalhes, consulte a instrução CREATE MODEL para referência de sintaxe de modelos de série temporal.

Etapa 4

Vamos saber mais sobre nosso modelo. Depois que ele terminar o treinamento, vamos executar outra consulta, substituindo demo novamente, se necessário:

SELECT
  *
FROM
  ML.EVALUATE(MODEL `demo.cta_ridership_model`)

Vamos interpretar os resultados. Em cada linha, você verá um modelo candidato, com os parâmetros e as estatísticas de avaliação. Os resultados são retornados em ordem crescente de AIC ou critério de informação de Akaike, que fornece um indicador relativo da qualidade do modelo. Portanto, o modelo na primeira linha tem o AIC mais baixo e é considerado o melhor modelo.

Você poderá conferir os parâmetros p, d e q do modelo ARIMA, bem como a sazonalidade descoberta no modelo. Nesse caso, o modelo principal inclui sazonalidade semanal e anual.

5b5b1e129c70a340.png

Etapa 5

Agora, estamos prontos para fazer previsões com a ML.FORECAST função!

Cole/digite o seguinte (substituindo demo se necessário):

SELECT
  *
FROM
  ML.FORECAST(MODEL `demo.cta_ridership_model`,
    STRUCT(7 AS horizon))

Essa consulta simplesmente prevê 7 dias usando nosso modelo. Podemos conferir as sete linhas retornadas abaixo. A previsão também inclui um intervalo de confiança, com padrão de 0,95, mas configurável na consulta.

b8a7f22657dc2d27.png

Ótimo trabalho: criamos um modelo de série temporal com apenas algumas consultas do BQML.

6. Criar um modelo de previsão personalizado

Nesta seção, você:

  • Remover outliers dos dados
  • Realizar previsões de várias etapas
  • Incluir recursos adicionais em um modelo de série temporal
  • Aprender sobre arquiteturas de redes neurais para previsão de série temporal: LSTM e CNN
  • Aprender sobre modelos estatísticos, incluindo o Holt-Winters Exponential Smoothing
  • Modelos do conjunto

Etapa 1

No Vertex AI Workbench, acesse training-data-analyst/courses/ai-for-time-series/notebooks e abra 02-model.ipynb.

Etapa 2

Limpe todas as células do notebook (Editar > Limpar todas as saídas), mude as configurações de região, projeto e bucket em uma das primeiras células e execute as células uma por uma.

Etapa 3

No notebook, você já analisou várias arquiteturas de modelos: LSTM, CNN e modelos estatísticos. Para cada modelo, é possível conferir o desempenho dele em relação aos dados de teste:

a528df58f4e6d372.png

7. Treinar e prever na nuvem

Nesta seção, você:

  • Preparar dados e modelos para treinamento na nuvem
  • Treinar o modelo e monitorar o progresso do job com o AI Platform Training
  • Fazer previsões usando o modelo com o AI Platform Predictions

Etapa 1

No Vertex AI Workbench, acesse training-data-analyst/courses/ai-for-time-series/notebooks e abra 03-cloud-training.ipynb.

Etapa 2

Limpe todas as células do notebook (Editar > Limpar todas as saídas), mude as configurações de região, projeto e bucket em uma das primeiras células e execute as células uma por uma.

Etapa 3

Na seção anterior, treinamos um modelo e fizemos previsões com ele, tudo em um notebook do Workbench. Nesta seção, demonstramos como usar o SDK da Vertex AI para Python no notebook para usar os serviços da Vertex AI para treinamento e implantação.

a3f6b5dc895a24fb.png

8. Desafio

Nesta seção, você vai tentar aplicar os conceitos aprendidos a um novo conjunto de dados.

Não vamos fornecer instruções detalhadas, apenas algumas dicas (se você quiser).

O objetivo é prever solicitações de serviço do 311 da cidade de Nova York. Essas solicitações não emergenciais incluem reclamações de ruído, problemas de iluminação pública etc.

Etapa 1

Vamos começar entendendo o conjunto de dados.

Primeiro, acesse o conjunto de dados de solicitações de serviço do 311 da cidade de Nova York.

Para conhecer melhor os dados, teste algumas das consultas de amostra listadas na descrição do conjunto de dados:

  • Qual o número de solicitações do 311 relacionadas a caminhões de sorvete?
  • Em quais dias da semana há mais solicitações do número 311 relacionadas a festas?

Na interface do BigQuery, selecione Criar consulta para saber como acessar o conjunto de dados. Observe que a instrução select está consultando bigquery-public-data.new_york_311.311_service_requests.

Etapa 2

Estamos prontos para começar. Nesta seção, faça modificações no notebook Analisar e visualizar para trabalhar com esses dados.

Dicas

  • Duplique o notebook 01-explore.ipynb e comece a trabalhar nele.
  • Para analisar os dados, tente esta consulta:
from google.cloud import bigquery as bq

sql = """
SELECT * FROM `bigquery-public-data.new_york_311.311_service_requests` LIMIT 5
"""

client = bq.Client(project=PROJECT)
df = client.query(sql).to_dataframe()

df.head()
  • Para receber as contagens de incidentes por mês, use esta consulta:
SELECT
  COUNT(unique_key) as y,
  DATE_TRUNC(DATE(created_date), month) as ds  
FROM `bigquery-public-data.new_york_311.311_service_requests`
GROUP by ds ORDER BY ds asc
  • Atualize as variáveis de coluna na seção de constantes. Na consulta acima, a coluna de destino é y e a coluna de data é ds. Não há outros recursos.
  • Considere mudar o nome do arquivo em que você exporta os dados para o próximo laboratório.
  • Exporte os dados usando: df.to_csv(YOUR-EXPORT-FILENAME, index=False)

Etapa 3

Agora vamos criar um modelo de série temporal com os dados mensais.

Dicas :

  • Duplique o notebook 02-model.ipynb e comece a trabalhar nele.
  • Atualize os parâmetros do conjunto de dados:
  • Atualize os parâmetros target_col e ts_col para corresponder ao novo conjunto de dados.
  • Atualize os parâmetros do modelo:
  • Frequência mensal (o código para o início do mês é "MS")
  • Etapas de entrada: 12 (a janela de lookback é de 12 meses)
  • Etapas de saída: 3 (prever 3 meses à frente)
  • Temporadas: 12 (a sazonalidade é de 12 meses)
  • Mude o nome do arquivo de entrada se você o tiver mudado no notebook anterior.
  • Se você executar a consulta no meio do mês, o total mensal do mês final será muito menor do que o esperado. Portanto, para fins deste laboratório, vamos remover o mês final do conjunto de dados usando: df = df[:-1]
  • Não parece haver outliers óbvios nos dados. Portanto, pule ou comente essas células.
  • Ajuste as unidades LSTM e os filtros CNN e o tamanho do kernel para esse novo modelo.

9. Revisão dos dados

Se você quiser continuar usando esse notebook, é recomendável que você o desative quando não estiver usando. Na interface do Workbench no console do Cloud, selecione o notebook e clique em Parar:

57213ef2edad9257.png

Se você quiser excluir todos os recursos criados neste laboratório, basta excluir o notebook do Workbench em vez de interrompê-lo.

Usando o menu de navegação do console do Cloud, acesse o Storage e exclua os dois buckets criados para armazenar os recursos do modelo (AVISO: faça isso apenas se você tiver criado novos buckets apenas para este laboratório).