Como lidar com dados do mundo real na previsão de séries temporais

Dados de séries temporais do mundo real geralmente são imperfeitos, com intervalos de tempo ausentes, duplicados ou desalinhados. As funções ML de previsão e detecção de anomalias incluem estes recursos de pré-processamento para ajudar você a usar seus dados do mundo real para treinar um modelo que faz previsões úteis:

  • Você pode especificar uma frequência de evento para substituir a frequência que o modelo infere automaticamente.

  • O modelo pode inferir dados em intervalos de tempo ausentes e agregar vários valores dentro de um intervalo de tempo. Você pode especificar como a agregação deve ser feita para cada recurso ou tipo de recurso, ou deixar que a função ML faça isso para você automaticamente.

Esses recursos permitem que você treine um modelo útil mesmo quando seus dados de treinamento apresentam problemas comuns de consistência. Geralmente, quanto mais consistentes forem seus dados, mais preciso será seu modelo de previsão, mas um número relativamente pequeno desses ajustes não afeta significativamente a precisão do modelo.

Especificação da frequência do evento

O treinamento do modelo infere a frequência das etapas de tempo nos seus dados de treinamento usando heurísticas que, em raras ocasiões, escolhem a frequência errada. Para evitar esse risco ou corrigir uma inferência incorreta, você pode opcionalmente especificar a frequência desejada ao iniciar o treinamento usando o parâmetro CONFIG_OBJECT frequency. Este parâmetro especifica um período de tempo em um formato semelhante a '1 day' ou '2 weeks'.

  • A especificação do intervalo deve ser colocada entre aspas simples, porque é uma cadeia de caracteres.

  • Os intervalos suportados são segundos, minutos, horas, dias, semanas, meses, trimestres e anos.

  • Use os nomes completos dos intervalos. Plurais são aceitáveis. (“segundo” ou “segundos”, não “seg”).

O exemplo a seguir mostra como treinar um modelo de previsão usando uma frequência de um dia.

CREATE SNOWFLAKE.ML.FORECAST model1(
  INPUT_DATA => TABLE(v1),
  TIMESTAMP_COLNAME => 'date',
  TARGET_COLNAME => 'sales',
  CONFIG_OBJECT => {'frequency': '1 day'}
);
Copy

Se você não especificar uma frequência de evento, o processo de treinamento inferirá a frequência de evento correspondente mais próxima.

Preenchimento dos valores para etapas de tempo ausentes

Um registro de data e hora que não tem um valor de destino usa:

Os valores de recurso ausentes não são preenchidos, mas sim substituídos por valores NULL. O treinamento do modelo ignora isso.

Como manipular vários valores em um intervalo de tempo

Quando há vários eventos em um intervalo de tempo, o pré-processamento pode agregar seus valores de várias maneiras. Por exemplo, se a frequência de eventos for horária, os valores que ocorrem fora da cadência horária podem ser calculados para produzir um valor para o carimbo de data/hora e hora canônico mais próximo.

A tabela a seguir resume os comportamentos de agregação disponíveis.

Tipo de valor

Comportamentos disponíveis

Comportamento padrão

Numérico

  • MEAN: média de valores

  • MEDIAN: valor médio

  • MODE: valor mais frequente

  • MIN: menor valor

  • MAX: maior valor

  • SUM: total de valores

  • FIRST: valor mais antigo

  • LAST: valor mais recente

MEAN

Categórico (cadeia de caracteres ou booliano)

  • MODE: valor mais frequente

  • FIRST: valor mais antigo

  • LAST: valor mais recente

MODE

Dica

Use o método SUM para contar dados, como o número de itens vendidos. MEAN é apropriado para a maioria dos outros valores numéricos.

Todos os comportamentos ignoram valores NULL e são aplicados ao período que está sendo interpolado ou agregado. Por exemplo, a SUM dos valores em uma cadência horária é a soma dos valores dentro da hora centralizada no registro de data e hora canônico.

Você pode substituir o comportamento padrão de uma coluna de duas maneiras:

  • Por tipo de valor (destino, numérico ou categórico)

  • Pelo nome exato da coluna

Se você substituir comportamentos de ambas as maneiras, a substituição do nome da coluna terá precedência.

Substituição por tipo de valor

Defina as seguintes opções no parâmetro CONFIG_OBJECT da função para substituir tipos específicos de valores: categórico, numérico e destino. Os comportamentos são como definidos anteriormente.

Opção

Valores possíveis

aggregation_categorical

MODE, FIRST, LAST

aggregation_numeric

MEAN, MEDIAN, MODE, MIN, MAX, SUM, FIRST, LAST

aggregation_target

MEAN, MEDIAN, MODE, MIN, MAX, SUM, FIRST, LAST

Nota

Se aggregation_target não for especificado, a agregação de destino usará o comportamento, se houver, especificado por aggregate_numeric. Caso contrário, o padrão, MEAN, será usado.

O exemplo a seguir mostra como definir comportamentos de agregação para recursos categóricos e numéricos.

CREATE SNOWFLAKE.ML.FORECAST model1(
  INPUT_DATA => TABLE(v1),
  TIMESTAMP_COLNAME => 'date',
  TARGET_COLNAME => 'sales',
  CONFIG_OBJECT => {
    'frequency': '1 day',
    'aggregation_categorical': 'MODE',
    'aggregation_numeric': 'MEDIAN'}
);
Copy

Dica

Considere especificar todos esses valores, mesmo se estiver usando os padrões. Dessa forma, você não precisa saber qual é o comportamento padrão para entender o que a instrução está fazendo e, se quiser alterar o comportamento mais tarde, não precisará consultar o nome do parâmetro.

Substituição pelo nome da coluna

A opção aggregation_column em CONFIG_OBJECT é um objeto que mapeia comportamentos para nomes de colunas. Esses comportamentos substituem quaisquer comportamentos especificados usando os parâmetros descritos acima.

Nota

O comportamento de agregação do valor de destino não pode ser especificado pelo nome da coluna. Use a opção aggregation_target em vez disso.

Alteração sugerida Por exemplo, a instrução SQL a seguir especifica comportamentos de agregação para duas colunas diferentes usando a opção aggregation_column.

CREATE SNOWFLAKE.ML.FORECAST model1(
  INPUT_DATA => TABLE(v1),
  TIMESTAMP_COLNAME => 'date',
  TARGET_COLNAME => 'sales',
  CONFIG_OBJECT => {
    'frequency': '1 day',
    'aggregation_target': 'MEDIAN',
    'aggregation_column': {
        'temperature': 'MEDIAN',
        'employee_id': 'FIRST'
    }
  }
);
Copy