Previsão de série temporal única a partir de dados do Google Analytics


Neste tutorial, você aprenderá a criar um modelo de série temporal para realizar previsões únicas de série temporal com a tabela de amostragoogle_analytics_sample.ga_sessions.

A tabela ga_sessions contém informações sobre uma fração dos dados de sessão coletados pelo Google Analytics 360 e enviados ao BigQuery.

Objetivos

Neste tutorial, você usará:

  • A instrução CREATE MODEL: para criar um modelo de série temporal.
  • A função ML.ARIMA_EVALUATE: para avaliar o modelo.
  • A função ML.ARIMA_COEFFICIENTS: para inspecionar os coeficientes do modelo.
  • A função ML.FORECAST: para prever o total de visitas diárias.
  • A função ML.EXPLAIN_FORECAST: para recuperar vários componentes da série temporal (como periodicidade e tendência) que podem ser usados para explicar os resultados da previsão.
  • Looker Studio: para visualizar os resultados da previsão.

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

Etapa 1: criar 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.

Etapa 2 (opcional): visualizar a série temporal que você quer prever

Antes de criar o modelo, é interessante ver como fica a série temporal de entrada.

SQL

Faça isso usando o Looker Studio.

Na consulta do GoogleSQL a seguir, a cláusula FROM bigquery-public-data.google_analytics_sample.ga_sessions_* indica que você está consultando as tabelas ga_sessions_* no conjunto de dados google_analytics_sample. Essas tabelas são tabelas particionadas.

Na instrução SELECT, a consulta analisa a coluna date da tabela de entrada para o tipo TIMESTAMP e a renomeia como parsed_date. A consulta usa a cláusula SUM(...) e a cláusula GROUP BY date para acumular totals.visits diariamente.

#standardSQL
SELECT
PARSE_TIMESTAMP("%Y%m%d", date) AS parsed_date,
SUM(totals.visits) AS total_visits
FROM
`bigquery-public-data.google_analytics_sample.ga_sessions_*`
GROUP BY date

Para executar a consulta, siga estas etapas:

  1. No console do Google Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.

    #standardSQL
    SELECT
    PARSE_TIMESTAMP("%Y%m%d", date) AS parsed_date,
    SUM(totals.visits) AS total_visits
    FROM
    `bigquery-public-data.google_analytics_sample.ga_sessions_*`
    GROUP BY date
    
  3. Clique em Executar.

    A consulta leva cerca de sete segundos para ser concluída. Depois que essa consulta for executada, a saída será semelhante à captura de tela a seguir. Na captura de tela, é possível ver que essa série temporal tem 366 pontos de dados. Clique no botão Explorar dados e, em seguida, em Explorar com o Looker Studio. O Looker Studio é aberto em uma nova guia. Conclua as etapas a seguir na nova guia.

    Saída da consulta

    No painel Gráfico, escolha Gráfico de série temporal:

    Time_series_chart

    No painel Dados, abaixo do painel Gráfico, entre na seção Métrica. Adicione o campo total_visits e remova a métrica padrão total_visits. Isso é mostrado na figura a seguir.

    Time_series_data_fields

    Depois que você concluir essas etapas, o gráfico a seguir será exibido. O gráfico mostra que a série temporal de entrada tem um padrão sazonal semanal.

    Result_visualization

BigQuery DataFrames

Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

import bigframes.pandas as bpd

# Start by loading the historical data from BigQuerythat you want to analyze and forecast.
# This clause indicates that you are querying the ga_sessions_* tables in the google_analytics_sample dataset.
# Read and visualize the time series you want to forecast.
df = bpd.read_gbq("bigquery-public-data.google_analytics_sample.ga_sessions_*")
parsed_date = bpd.to_datetime(df.date, format="%Y%m%d", utc=True)
visits = df["totals"].struct.field("visits")
total_visits = visits.groupby(parsed_date).sum()

# Expected output: total_visits.head()
# date
# 2016-08-01 00:00:00+00:00    1711
# 2016-08-02 00:00:00+00:00    2140
# 2016-08-03 00:00:00+00:00    2890
# 2016-08-04 00:00:00+00:00    3161
# 2016-08-05 00:00:00+00:00    2702
# Name: visits, dtype: Int64

total_visits.plot.line()

O resultado será semelhante ao seguinte: Result_visualization

Etapa 3: criar seu modelo de série temporal

Em seguida, crie um modelo de série temporal usando os dados do Google Analytics 360. A consulta do GoogleSQL a seguir cria um modelo usado para prever totals.visits.

A cláusula CREATE MODEL cria e treina um modelo chamado bqml_tutorial.ga_arima_model.

#standardSQL
CREATE OR REPLACE MODEL `bqml_tutorial.ga_arima_model`
OPTIONS
  (model_type = 'ARIMA_PLUS',
   time_series_timestamp_col = 'parsed_date',
   time_series_data_col = 'total_visits',
   auto_arima = TRUE,
   data_frequency = 'AUTO_FREQUENCY',
   decompose_time_series = TRUE
  ) AS
SELECT
  PARSE_TIMESTAMP("%Y%m%d", date) AS parsed_date,
  SUM(totals.visits) AS total_visits
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
GROUP BY date

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. Por padrão, auto_arima=TRUE, para que o algoritmo auto.ARIMA ajuste automaticamente os hiperparâmetros nos modelos ARIMA_PLUS. O algoritmo se encaixa em dezenas de modelos candidatos e escolhe o melhor com o menor índice de informações do Akaike (AIC, na sigla em inglês). Além disso, como o padrão é data_frequency='AUTO_FREQUENCY', o processo de treinamento infere automaticamente a frequência de dados da série temporal de entrada. Por fim, a instrução CREATE MODEL usa decompose_time_series=TRUE por padrão, e os usuários podem entender melhor como a série temporal é prevista buscando o método componentes de séries temporais, como períodos sazonais e efeito de fim de ano.

Execute a consulta CREATE MODEL para criar e treinar seu modelo:

  1. No console do Google Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.

    #standardSQL
    CREATE OR REPLACE MODEL `bqml_tutorial.ga_arima_model`
    OPTIONS
     (model_type = 'ARIMA_PLUS',
      time_series_timestamp_col = 'parsed_date',
      time_series_data_col = 'total_visits',
      auto_arima = TRUE,
      data_frequency = 'AUTO_FREQUENCY',
      decompose_time_series = TRUE
    ) AS
    SELECT
     PARSE_TIMESTAMP("%Y%m%d", date) AS parsed_date,
     SUM(totals.visits) AS total_visits
    FROM
     `bigquery-public-data.google_analytics_sample.ga_sessions_*`
    GROUP BY date
    
  3. Clique em Executar.

    A consulta leva por volta de 43 segundos para ser concluída. Depois disso, o modelo (ga_arima_model) aparece no painel de navegação. Como a consulta usa uma instrução CREATE MODEL para criar um modelo, não é possível ver os resultados da consulta.

Etapa 4: inspecionar as métricas de avaliação de todos os modelos avaliados

Depois de criar seu modelo, use a função ML.ARIMA_EVALUATE para ver as métricas de avaliação de todos os modelos candidatos avaliados durante o processo de ajuste automático de hiperparâmetros.

Na consulta do GoogleSQL a seguir, a cláusula FROM usa a função ML.ARIMA_EVALUATE no seu modelo, bqml_tutorial.ga_arima_model. Por padrão, essa consulta retorna as métricas de avaliação de todos os modelos candidatos.

Para executar a consulta ML.ARIMA_EVALUATE, siga estas etapas:

  1. No console do Google Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.

    #standardSQL
    SELECT
     *
    FROM
     ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.ga_arima_model`)
    
  3. Clique em Executar.

  4. A consulta leva menos de um segundo para ser concluída. Após concluir a consulta, clique na guia Resultados abaixo da área de texto da consulta. Os resultados serão semelhantes à seguinte captura de tela:

    Saída de ML.ARIMA_EVALUATE.

    Os resultados incluem as seguintes colunas:

    • non_seasonal_p
    • non_seasonal_d
    • non_seasonal_q
    • has_drift
    • log_likelihood
    • AIC
    • variance
    • seasonal_periods
    • has_holiday_effect
    • has_spikes_and_dips
    • has_step_changes
    • error_message

    As quatro colunas a seguir (non_seasonal_{p,d,q} e has_drift) definem um modelo ARIMA no pipeline de treinamento. As três métricas seguintes (log_likelihood, AIC e variance) são relevantes para o processo de ajuste do modelo ARIMA.

    O algoritmo auto.ARIMA usa primeiro o teste KPSS para decidir que o melhor valor para non_seasonal_d é 1. Quando non_seasonal_d for 1, o auto.ARIMA treinará 42 modelos ARIMA candidatos em paralelo. Quando non_seasonal_d não for 1, o auto.ARIMA treinará 21 modelos candidatos diferentes. Neste exemplo, todos os 42 modelos candidatos são válidos. Portanto, a saída contém 42 linhas, em que cada linha está associada a um modelo ARIMA candidato. Para algumas séries temporais, alguns modelos candidatos são inválidos porque não são estáticos ou não podem ser invertidos. Esses modelos inválidos são excluídos da saída, o que faz com que ela tenha menos de 42 linhas. Esses modelos candidatos são ordenados pelo AIC na ordem crescente. O modelo na primeira linha tem o AIC mais baixo e é considerado o melhor modelo. Esse melhor modelo é salvo como o modelo final. Ele é usado quando você chama ML.EXPLAIN_FORECAST, ML.FORECAST e ML.ARIMA_COEFFICIENTS, conforme mostrado nas etapas a seguir.

    A coluna seasonal_periods é sobre o padrão sazonal dentro da série temporal de entrada. Ele não tem nada a ver com a modelagem ARIMA. Portanto, ele tem o mesmo valor em todas as linhas de saída. Ele informa um padrão semanal, quee está dentro das nossas expectativas, conforme descrito anteriormente na etapa dois.

    As colunas has_holiday_effect, has_spikes_and_dips e has_step_changes são preenchidas somente quando decompose_time_series=TRUE. Eles são relacionados ao efeito de fim de ano, picos e quedas e mudanças na etapa dentro da série temporal de entrada, que não estão relacionados à modelagem ARIMA. Portanto, elas são todas iguais em todas as linhas de saída, exceto nos modelos com falha.

    A coluna error_message mostra que o possível erro incorrido durante o processo de ajuste de auto.ARIMA. Um possível motivo é que as colunas selecionadas non_seasonal_p, non_seasonal_d, non_seasonal_q e has_drift não podem estabilizar a série temporal. Para recuperar a mensagem de erro possível de todos os modelos candidatos, defina show_all_candidate_models=true.

Etapa 5: inspecionar os coeficientes do seu modelo

A função ML.ARIMA_COEFFICIENTS recupera os coeficientes do modelo ARIMA_PLUS, bqml_tutorial.ga_arima_model. ML.ARIMA_COEFFICIENTS usa o modelo como a única entrada.

Execute a consulta ML.ARIMA_COEFFICIENTS:

  1. No console do Google Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.

    #standardSQL
    SELECT
     *
    FROM
     ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.ga_arima_model`)
    
  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.ARIMA_COEFFICIENTS.

    Os resultados incluem as seguintes colunas:

    • ar_coefficients
    • ma_coefficients
    • intercept_or_drift

    ar_coefficients mostra os coeficientes do modelo da parte autoregressiva (AR) do modelo ARIMA. Da mesma forma, ma_coefficients mostra os coeficientes do modelo da parte de média móvel (MA, na sigla em inglês). Ambos são matrizes, com comprimentos iguais a non_seasonal_p e non_seasonal_q, respectivamente. Na saída de ML.ARIMA_EVALUATE, assim como na linha superior, o melhor modelo tem um non_seasonal_p de 2 e um non_seasonal_q de 3. Portanto, ar_coefficients é uma matriz de comprimento 2 e ma_coefficients é uma matriz de comprimento 3. O intercept_or_drift é o termo constante no modelo ARIMA.

Etapa 6: usar seu modelo para prever a série temporal

A função ML.FORECAST prevê valores futuros da série temporal com um intervalo de previsão usando o modelo: bqml_tutorial.ga_arima_model.

Na consulta GoogleSQL padrão a seguir, a cláusula STRUCT(30 AS horizon, 0.8 AS confidence_level) indica que a consulta prevê 30 períodos futuros e gera um intervalo de previsão com um nível de confiança de 80%. ML.FORECAST adota o modelo, além de alguns argumentos opcionais.

Para executar a consulta ML.FORECAST, use as seguintes etapas:

  1. No console do Google Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.

    #standardSQL
    SELECT
     *
    FROM
     ML.FORECAST(MODEL `bqml_tutorial.ga_arima_model`,
                 STRUCT(30 AS horizon, 0.8 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.

    Os resultados incluem as seguintes colunas:

    • forecast_timestamp
    • forecast_value
    • standard_error
    • confidence_level
    • prediction_interval_lower_bound
    • prediction_interval_upper_bound
    • confidence_interval_lower_bound (suspensa em breve)
    • confidence_interval_upper_bound (suspensa em breve)

    As linhas de saída são ordenadas na ordem cronológica de forecast_timestamp. Na previsão de série temporal, o intervalo de previsão, capturado pelos limites mínimo e máximo, é tão importante quanto o forecast_value. O forecast_value é o ponto central do intervalo de previsão. O intervalo de previsão depende de standard_error e confidence_level.

Etapa 7: explicar e visualizar os resultados da previsão

Para entender como a série temporal é prevista e visualizar as séries temporais previstas com a série temporal do histórico e todos os componentes separados, a função ML.EXPLAIN_FORECAST prevê valores futuros de séries temporais com um intervalo de previsão usando seu modelo, bqml_tutorial.ga_arima_model e, ao mesmo tempo, retorna todos os componentes separados da série temporal.

Como a função ML.FORECAST, a cláusula STRUCT(30 AS horizon, 0.8 AS confidence_level) 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 usa o modelo e alguns argumentos opcionais.

Para executar a consulta ML.EXPLAIN_FORECAST, use as seguintes etapas:

  1. No console do Google Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.

    #standardSQL
    SELECT
     *
    FROM
     ML.EXPLAIN_FORECAST(MODEL `bqml_tutorial.ga_arima_model`,
                         STRUCT(30 AS horizon, 0.8 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:

    ML.EXPLAIN_FORECAST output1. ML.EXPLAIN_FORECAST output2.

    Os resultados incluem as seguintes colunas:

    • time_series_timestamp
    • time_series_type
    • time_series_data
    • time_series_adjusted_data
    • standard_error
    • confidence_level
    • prediction_interval_lower_bound
    • prediction_interval_lower_bound
    • trend
    • seasonal_period_yearly
    • seasonal_period_quarterly
    • seasonal_period_monthly
    • seasonal_period_weekly
    • seasonal_period_daily
    • holiday_effect
    • spikes_and_dips
    • step_changes
    • residual

    As linhas de saída são ordenadas na ordem cronológica de time_series_timestamp. Componentes diferentes são listados como colunas da saída. Para mais informações, consulte a definição de ML.EXPLAIN_FORECAST.

  4. Após a conclusão da consulta, clique no botão Explorar dados e, depois, em Explorar com o Looker Studio. O Looker Studio é aberto em uma nova guia.

    Saída Union_all_query

  5. No painel Gráfico, escolha Gráfico de série temporal:

    Time_series_chart

  6. No painel Dados, faça o seguinte:

    1. Na seção Dimensão do período, selecione time_series_timestamp (Date).
    2. Na seção Dimensão, selecione time_series_timestamp (Date).
    3. Na seção Métrica, remova a métrica padrão Record Count e adicione o seguinte:
      • time_series_data
      • prediction_interval_lower_bound
      • prediction_interval_upper_bound
      • trend
      • seasonal_period_weekly
      • step_changes

    Data_panel

  7. No painel Estilo, role a tela para baixo até a opção Dados ausentes e use Quebras de linha em vez de Linha até zero.

    Style_section

    O gráfico a seguir é exibido:

    Result_visualization

Etapa 8 (opcional): visualizar os resultados da previsão sem ativar a decompose_time_series

Se decompose_time_series for definido como falso no treinamento ARIMA_PLUS, será possível concatenar a série temporal do histórico e a série temporal prevista usando a cláusula UNION ALL e a função ML.FORECAST.

Na consulta a seguir, o SQL antes da cláusula UNION ALL forma a série temporal da história. O SQL após a cláusula UNION ALL usa ML.FORECAST para gerar a série temporal prevista e o intervalo de previsão. A consulta usa campos diferentes para history_value e forecasted_value a fim de traçá-los em cores diferentes.

Para executar a consulta, siga estas etapas:

  1. No console do Google Cloud, clique no botão Escrever nova consulta.

  2. Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.

    #standardSQL
    SELECT
     history_timestamp AS timestamp,
     history_value,
     NULL AS forecast_value,
     NULL AS prediction_interval_lower_bound,
     NULL AS prediction_interval_upper_bound
    FROM
     (
       SELECT
         PARSE_TIMESTAMP("%Y%m%d", date) AS history_timestamp,
         SUM(totals.visits) AS history_value
       FROM
         `bigquery-public-data.google_analytics_sample.ga_sessions_*`
       GROUP BY date
       ORDER BY date ASC
     )
    UNION ALL
    SELECT
     forecast_timestamp AS timestamp,
     NULL AS history_value,
     forecast_value,
     prediction_interval_lower_bound,
     prediction_interval_upper_bound
    FROM
     ML.FORECAST(MODEL `bqml_tutorial.ga_arima_model`,
                 STRUCT(30 AS horizon, 0.8 AS confidence_level))
    
  3. Clique em Executar.

  4. Após a conclusão da consulta, clique no botão Explorar dados e, depois, em Explorar com o Looker Studio. O Looker Studio é aberto em uma nova guia. Conclua as etapas a seguir na nova guia.

    Saída Union_all_query

  5. No painel Gráfico, escolha Gráfico de série temporal:

    Time_series_chart

  6. No painel Dados, abaixo do painel Gráfico, entre na seção Métrica. Adicione as seguintes métricas: history_value, forecast_value, prediction_interval_lower_bound e prediction_interval_upper_bound. Em seguida, remova a métrica padrão Record Count.

    Data_section

  7. No painel Estilo, role a tela para baixo até a opção Dados ausentes e use Quebras de linha em vez de Linha até zero.

    Style_section

    Depois de concluir essas etapas, o gráfico a seguir será exibido no painel esquerdo. A série temporal do histórico de entrada está em azul, enquanto a série prevista está em verde. O intervalo de previsão é a região entre a série limite inferior e a série limite superior.

    Result_visualization

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 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) e 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