Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Função
Aplica-se a:
Databricks SQL
Importante
Essa funcionalidade está no Public Preview e compatível com HIPAA.
ai_forecast() é uma função com valor de tabela projetada para extrapolar dados de séries temporais para o futuro. Consulte Argumentos para obter argumentos disponíveis para configurar esta função.
Requisito
- 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 grupos (ver group_col) e até 100 métricas (ver value_col) em cada 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 em formato de tabela que é usada como dados de treino para o procedimento de previsão.- Esta relação de entrada deve conter uma coluna "tempo" e uma ou mais colunas "valor". As colunas "Grupo" e "parâmetros" são opcionais. Todas as colunas adicionais na relação de entrada são ignoradas.
-
horizoné uma quantidade associada ao tempo que representa o término do intervalo de tempo exclusivo à direita dos resultados da previsão. Dentro de um grupo (vergroup_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 cadeia de caracteres que faz referência à "coluna de tempo" emobserved. A coluna referenciada portime_coldeve ser umDATEou umTIMESTAMP. -
value_colé uma cadeia de caracteres ou uma matriz de cadeias de caracteres que fazem referência a colunas de valor emobserved. As colunas referenciadas por este argumento devem ser convertíveis paraDOUBLE. -
group_col(opcional) é uma cadeia de caracteres ou uma matriz de cadeias de caracteres que representam as colunas do grupo emobserved. Se especificado, as colunas de grupo são usadas como critérios de particionamento e as previsões são geradas para cada grupo de forma independente. 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 valores futuros têm uma probabilidadeprediction_interval_width% de cair entre{v}_uppere{v}_lower. -
frequency(opcional) é uma unidade de tempo ou uma string de alias de deslocamento 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 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 suportados:-
global_capeglobal_floorpodem ser usados juntos ou independentemente para definir o possível domínio dos valores métricos.{“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 para fornecer restrições apertadas apenas aos valores previstos. -
daily_ordereweekly_orderdefinem a ordem de Fourier para os 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, há três colunas de saída com o padrão {v}_forecast, {v}_uppere {v}_lower. Independentemente dos tipos de valor de entrada, as colunas de valor previsto são sempre 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 por AI_FORECAST abaixo:
| Tabela de entrada | Argumentos | Tabela de saída |
|---|---|---|
ts: TIMESTAMPval: DOUBLE |
time_col => 'ts'value_col => 'val' |
ts: TIMESTAMPval_forecast: DOUBLEval_upper: DOUBLEval_lower: DOUBLE |
ds: DATEval BIGINT |
time_col => 'ds'value_col => 'val' |
ds: DATEval_forecast: DOUBLEval_upper: DOUBLEval_lower: DOUBLE |
ts: TIMESTAMPdim1: STRINGdollars: DECIMAL(10, 2) |
time_col => 'ts'value_col => 'dollars'group_col => 'dim1' |
ts: TIMESTAMPdim1: STRINGdollars_forecast: DOUBLEdollars_upper: DOUBLEdollars_lower: DOUBLE |
ts: TIMESTAMPdim1: STRINGdim2: BIGINTdollars: DECIMAL(10, 2)users: BIGINT |
time_col => 'ts'value_col => ARRAY('dollars', 'users')group_col => ARRAY('dim1', 'dim2') |
ts: TIMESTAMPdim1: STRINGdim2: BIGINTdollars_forecast: DOUBLEdollars_upper: DOUBLEdollars_lower: DOUBLEusers_forecast: DOUBLEusers_upper: DOUBLEusers_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
ai_forecast não materializa 0s para entradas ausentes ou NULL na tabela. Se os valores apropriados das entradas ausentes podem ser inferidos, então eles devem ser aglutinados antes de chamar a função ai_forecast. Se os valores estiverem realmente ausentes ou desconhecidos, você poderá deixá-los como NULL ou removê-los.
Para dados muito esparsos, é uma prática recomendada aglutinar valores 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.
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 determinados anteriormente 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 aplicam-se durante a pré-visualização:
- O procedimento de previsão padrão é um modelo por partes linear e sazonal, semelhante ao Prophet. 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.