Compartilhar via


Função ai_forecast

Aplica-se a:verificação marcada como sim Databricks SQL

Importante

Essa funcionalidade está em Visualização Pública e em conformidade com HIPAA.

ai_forecast() é uma função com valor de tabela projetada para extrapolar dados de série temporal no futuro. Consulte Argumentos para saber os argumentos disponíveis para configurar essa função.

Requisito

  • SQL Warehouse Pro ou Sem Servidor

Sintaxe


ai_forecast(
  observed TABLE,
  horizon DATE | TIMESTAMP | STRING,
  time_col STRING,
  value_col STRING | ARRAY<STRING>,
  group_col STRING | ARRAY<STRING> | NULL DEFAULT NULL,
  prediction_interval_width DOUBLE DEFAULT 0.95,
  frequency STRING DEFAULT 'auto',
  seed INTEGER | NULL DEFAULT NULL,
  parameters STRING DEFAULT '{}'
)

Argumentos

ai_forecast() pode prever qualquer número de grupos (consulte group_col) e até 100 métricas (consulte value_col) dentro de cada grupo. A frequência de previsão é a mesma para todas as métricas em um grupo, mas pode ser diferente em diferentes grupos (consulte frequency).

As seguintes são argumentos disponíveis para esta função:

  • observed é a entrada com valor de tabela que é usada como dados de treinamento para o procedimento de previsão.
    • Essa relação de entrada deve conter uma coluna de “tempo” e uma ou mais colunas de “valor”. As colunas “Grupo” e “parâmetros” são opcionais. Quaisquer colunas adicionais na relação de entrada são ignoradas.
  • horizon é uma quantidade de carimbo de data/hora que representa a hora de término exclusiva à direita dos resultados da previsão. Dentro de um grupo (veja group_col), os resultados da previsão abrangem o tempo entre a última observação e o horizonte. Se o horizonte for menor que o último tempo de observação, nenhum resultado será gerado.
  • time_col é uma cadeia de caracteres que faz referência à “coluna de tempo” em observed. A coluna referenciada por time_col deve ser um DATE ou um TIMESTAMP.
  • value_col é uma cadeia de caracteres ou uma matriz de strings que faz referência a colunas de valor em observed. As colunas referenciadas por esse argumento devem ser convertíveis para DOUBLE.
  • group_col (opcional) é uma string ou uma matriz de strings que representa as colunas do grupo em observed. Se especificado, as colunas de grupo serão usadas como critérios de particionamento e as previsões serão geradas para cada grupo de forma independente. Se não for especificado, todos os dados de entrada serão tratados como um único grupo.
  • prediction_interval_width (opcional) é um valor entre 0 e 1 que representa a largura do intervalo de predição. Os valores futuros têm uma probabilidade de prediction_interval_width % de cair entre {v}_upper e {v}_lower.
  • frequency (opcional) é uma unidade de tempo ou cadeia de caracteres de alias de deslocamento pandas que especifica a granularidade da previsão. Se não for especificado, a granularidade da previsão será inferida automaticamente para cada grupo de forma independente. Se um valor de frequência for especificado, ele será aplicado igualmente a todos os grupos.
    • A frequência inferida em um grupo é determinada pela moda das observações mais recentes. Essa é uma operação de conveniência que não pode ser ajustada pelo usuário.
    • Por exemplo, uma série temporal com 99 “segundas-feiras” e 1 “terça-feira” resulta na “semana” sendo a frequência inferida.
  • seed (opcional) é um número usado para inicializar qualquer gerador de números pseudoaleatórios usado no procedimento de previsão.
  • parameters (opcional) é um JSON codificado em cadeia de caracteres ou o nome de um identificador de coluna que representa a parametrização do procedimento de previsão. Qualquer combinação de parâmetros pode ser especificada em qualquer ordem, por exemplo, {“weekly_order”: 10, “global_cap”: 1000}. Quaisquer parâmetros não especificados são determinados automaticamente com base nos atributos dos dados de treinamento. Os seguintes parâmetros são compatíveis:
    • global_cap e global_floor podem ser usados ​​em conjunto ou independentemente para definir o domínio possível dos valores métricos. {“global_floor”: 0}, por exemplo, pode ser usado para restringir uma métrica como o custo a ser sempre positiva. Eles se aplicam globalmente aos dados de treinamento e aos dados previstos e não podem ser usados ​​para fornecer restrições rígidas apenas aos valores previstos.
    • daily_order e weekly_order definem a ordem de Fourier dos componentes de sazonalidade diária e semanal.

Devoluções

Um novo conjunto de linhas contendo os dados previstos. O esquema de saída conterá as colunas de tempo e grupo com seus tipos inalterados. Por exemplo, se a coluna de tempo de entrada tiver o tipo DATE, o tipo de coluna de tempo de saída também será DATE. Para cada coluna de valor existem três colunas de saída com o padrão {v}_forecast, {v}_upper, e {v}_lower. Independentemente dos tipos de valores de entrada, as colunas de valores previstos são sempre do tipo DOUBLE. A tabela de saída contém apenas valores futuros, abrangendo o intervalo de tempo entre o final dos dados observados até o horizonte.

Veja alguns exemplos da inferência de esquema realizada pelo AI_FORECAST abaixo:

Tabela de entrada Argumentos Tabela de saída
ts: TIMESTAMP
val: DOUBLE
time_col => 'ts'
value_col => 'val'
ts: TIMESTAMP
val_forecast: DOUBLE
val_upper: DOUBLE
val_lower: DOUBLE
ds: DATE
val BIGINT
time_col => 'ds'
value_col => 'val'
ds: DATE
val_forecast: DOUBLE
val_upper: DOUBLE
val_lower: DOUBLE
ts: TIMESTAMP
dim1: STRING
dollars: DECIMAL(10, 2)
time_col => 'ts'
value_col => 'dollars'
group_col => 'dim1'
ts: TIMESTAMP
dim1: STRING
dollars_forecast: DOUBLE
dollars_upper: DOUBLE
dollars_lower: DOUBLE
ts: TIMESTAMP
dim1: STRING
dim2: BIGINT
dollars: DECIMAL(10, 2)
users: BIGINT
time_col => 'ts'
value_col => ARRAY('dollars', 'users')
group_col => ARRAY('dim1', 'dim2')
ts: TIMESTAMP
dim1: STRING
dim2: BIGINT
dollars_forecast: DOUBLE
dollars_upper: DOUBLE
dollars_lower: DOUBLE
users_forecast: DOUBLE
users_upper: DOUBLE
users_lower: DOUBLE

Exemplos

O exemplo a seguir prevê até uma data especificada:


WITH
aggregated AS (
  SELECT
    DATE(tpep_pickup_datetime) AS ds,
    SUM(fare_amount) AS revenue
  FROM
    samples.nyctaxi.trips
  GROUP BY
    1
)
SELECT * FROM AI_FORECAST(
  TABLE(aggregated),
  horizon => '2016-03-31',
  time_col => 'ds',
  value_col => 'revenue'
)

O seguinte é um exemplo mais complexo:


WITH
aggregated AS (
  SELECT
    DATE(tpep_pickup_datetime) AS ds,
    dropoff_zip,
    SUM(fare_amount) AS revenue,
    COUNT(*) AS n_trips
  FROM
    samples.nyctaxi.trips
  GROUP BY
    1, 2
),
spine AS (
  SELECT all_dates.ds, all_zipcodes.dropoff_zip
  FROM (SELECT DISTINCT ds FROM aggregated) all_dates
  CROSS JOIN (SELECT DISTINCT dropoff_zip FROM aggregated) all_zipcodes
)
SELECT * FROM AI_FORECAST(
  TABLE(
    SELECT
      spine.*,
      COALESCE(aggregated.revenue, 0) AS revenue,
      COALESCE(aggregated.n_trips, 0) AS n_trips
    FROM spine LEFT JOIN aggregated USING (ds, dropoff_zip)
  ),
  horizon => '2016-03-31',
  time_col => 'ds',
  value_col => ARRAY('revenue', 'n_trips'),
  group_col => 'dropoff_zip',
  prediction_interval_width => 0.9,
  parameters => '{"global_floor": 0}'
)

Nota

ai_forecast não materializa 0s para entradas ausentes ou NULL na tabela. Se os valores adequados das entradas ausentes puderem ser inferidos, eles deverão ser unidos antes de chamar a ai_forecast função. Se os valores estiverem realmente ausentes ou desconhecidos, você poderá deixar os valores como NULL ou removê-los.

Para dados muito esparsos, é uma prática recomendada unir valores ausentes ou fornecer explicitamente um valor de frequência para evitar resultados inesperados da inferência de frequência “automática”. Por exemplo, a inferência de frequência “automática” em duas entradas com 14 dias de intervalo inferirá uma frequência de “14D”, mesmo que a frequência “real” possa ser semanal com 1 valor ausente. A união das entradas ausentes elimina essa ambigüidade.

O exemplo a seguir mostra um exemplo em que diferentes parâmetros de previsão são aplicados a diferentes grupos na tabela de entrada. O exemplo usa o argumento parameters como um identificador de coluna. Isso permite que os usuários armazenem JSONs de parâmetros previamente determinados em uma tabela e os reutilizem em novos dados.

WITH past AS (
  SELECT
    CASE
      WHEN fare_amount < 30 THEN 'Under $30'
      ELSE '$30 or more'
    END AS revenue_bucket,
    CASE
      WHEN fare_amount < 30 THEN '{"daily_order": 0}'
      ELSE '{"daily_order": "auto"}'
    END AS parameters,
    DATE(tpep_pickup_datetime) AS ds,
    SUM(fare_amount) AS revenue
  FROM samples.nyctaxi.trips
  GROUP BY ALL
)
SELECT * FROM AI_FORECAST(
  TABLE(past),
  horizon => (SELECT MAX(ds) + INTERVAL 30 DAYS FROM past),
  time_col => 'ds',
  value_col => 'revenue',
  group_col => ARRAY('revenue_bucket'),
  parameters => 'parameters'
)

Limitações

As seguintes limitações se aplicam durante a versão preliminar:

  • O procedimento de previsão padrão é um modelo linear por partes e sazonal, semelhante ao modelo Prophet. Esse é o único procedimento de previsão suportado disponível.
  • As mensagens de erro são entregues pelo mecanismo UDTF do Python e contêm informações de rastreamento do Python. O final do rastreamento contém a mensagem de erro real.