Partilhar via


Função ai_forecast

Aplica-se a:Marque Sim Databricks SQL

Importante

Essa funcionalidade está no Public Preview e compatível com HIPAA. Entre em contato com sua equipe de conta Databricks para participar da visualização.

ai_forecast() é uma função de valor tableprojetada para extrapolar dados de séries temporais para o futuro. Consulte Argumentos para obter argumentos disponíveis para configurar esta função.

Necessidade

Armazém SQL 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 gruposcada grupo. A frequência de previsão é a mesma para todas as métricas de um grupo, mas pode ser diferente entre diferentes grupos (consulte frequency).

Os seguintes argumentos estão disponíveis para esta função:

  • observed é a entrada com valor de tableque é usada como dados de treinamento para o procedimento de previsão.
    • Esta relação de entrada deve conter um column tempo e um ou mais valor columns. "Grupo" e "parameters" e columns são opcionais. Qualquer columns adicional na relação de entrada é ignorada.
  • horizon é uma quantidade passível de carimbo de data/hora que representa a hora de término exclusiva dos resultados da previsão. Dentro de um grupo (ver group_col) os resultados da previsão abrangem o tempo entre a última observação e o horizonte. Se o horizonte for menor do que o último tempo de observação, então nenhum resultado é gerado.
  • time_col é uma string que faz referência ao "tempo column" em observed. O column referenciado por time_col deve ser um DATE ou um TIMESTAMP.
  • value_col é uma cadeia de caracteres ou uma matriz de cadeias de caracteres que fazem referência ao valor columns em observed. O columns referenciado por este argumento deve ser convertido para DOUBLE.
  • group_col (opcional) é uma cadeia de caracteres ou uma matriz de cadeias de caracteres que representam o grupo columns em observed. Se especificado, o grupo columns é usado como critério de particionamento, e as previsões são geradas para cada grupo individualmente. Se não forem especificados, os dados de entrada completos são tratados como um único grupo.
  • prediction_interval_width (opcional) é um valor entre 0 e 1 que representa a largura do intervalo de previsão. Os futuros values têm uma probabilidade de prediction_interval_width % de caírem entre {v}_upper e {v}_lower.
  • frequency (opcional) é uma unidade de tempo ou uma string de alias offset do pandas que especifica a granularidade temporal dos resultados da previsão. Se não for especificado, a granularidade da previsão é automaticamente inferida 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 dentro de um grupo é o modo das observações mais recentes. Esta é uma operação de conveniência que não é ajustável pelo usuário.
    • Como 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 quaisquer geradores de números pseudoaleatórios usados no procedimento de previsão.
  • parameters (opcional) é um JSON codificado em cadeia de caracteres ou o nome de um columnidentifier que representa a parametrização do procedimento de previsão. Qualquer combinação de parameters pode ser especificada em qualquer ordem, por exemplo, {“weekly_order”: 10, “global_cap”: 1000}. Qualquer parameters não especificado é determinado automaticamente com base nos atributos dos dados de treinamento. Os seguintes parameters são suportados:
    • global_cap e global_floor podem ser usados juntos ou independentemente para definir o possível domínio da métrica values. {“global_floor”: 0}, por exemplo, pode ser usado para restringir uma métrica como o custo a ser sempre positiva. Estes aplicam-se globalmente aos dados de formação e aos dados previstos, e não podem ser utilizados apenas para fornecer restrições rigorosas sobre as values previstas.
    • daily_order e weekly_order,set a ordem de Fourier dos componentes de sazonalidade diária e semanal.

Devoluções

Uma nova set de linhas contendo os dados previstos. A saída schema conterá o tempo e o grupo columns com os seus tipos inalterados. Por exemplo, se o tipo do tempo de entrada column for DATE, então o tipo do tempo de saída column também será DATE. Para cada valor column há três saídas columns com o padrão {v}_forecast, {v}_uppere {v}_lower. Independentemente dos tipos de valor de entrada, os valores previstos columns são sempre do tipo DOUBLE. A saída table contém apenas values futuro, abrangendo o intervalo de tempo entre o final dos dados observados até ao horizonte.

Veja alguns exemplos da inferência schema realizada por AI_FORECAST abaixo:

Entrada table Argumentos Saída table
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'
)

Segue-se 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}'
)

Observação

Tables consistentemente não materializam 0s ou entradas vazias. Se a values das entradas ausentes puder ser inferida, por exemplo, 0, então aglutine essas values antes de chamar a função ai_forecast. Se os values estão realmente ausentes ou desconhecidos, então eles podem ser deixados como NULL.

Para dados muito esparsos, é uma prática recomendada aglutinar values ausentes ou fornecer um valor de frequência explicitamente para evitar saídas inesperadas da inferência de frequência "automática". Como 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 aglutinação das entradas em falta elimina esta ambiguidade.

O exemplo a seguir mostra um where exemplo de previsões diferentes parameters aplicadas a grupos diferentes no tablede entrada. O exemplo usa o argumento parameters como um columnidentifier. Isso permite que os usuários armazenem JSONs de parâmetros determinados anteriormente em um table 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 aplicam-se durante a pré-visualização:

  • O procedimento de previsão padrão é um modelo linear e sazonal semelhante a um profeta. Este é o único procedimento de previsão suportado disponível.
  • As mensagens de erro são entregues através do mecanismo UDTF do Python e contêm informações de rastreio do Python. O final do rastreio contém a mensagem de erro real.