Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Função
Aplica-se a:
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 (vejagroup_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” emobserved. A coluna referenciada portime_coldeve ser umDATEou umTIMESTAMP. -
value_colé uma cadeia de caracteres ou uma matriz de strings que faz referência a colunas de valor emobserved. As colunas referenciadas por esse argumento devem ser convertíveis paraDOUBLE. -
group_col(opcional) é uma string ou uma matriz de strings que representa as colunas do grupo emobserved. 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 deprediction_interval_width% de cair entre{v}_uppere{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_capeglobal_floorpodem 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_ordereweekly_orderdefinem 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: 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'
)
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.