Funzione ai_forecast
Si applica a: Databricks SQL
Importante
Questa funzionalità è in anteprima pubblica. Contattare il team dell'account Databricks per partecipare all'anteprima.
ai_forecast()
è una funzione con valori di tabella progettati per estrapolare i dati delle serie temporali in futuro. Si veda Argomenti per gli argomenti disponibili per configurare questa funzione.
Requisito
Pro o Serverless SQL Warehouse
Sintassi
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 '{}'
)
Argomenti
ai_forecast()
può prevedere un numero qualsiasi di gruppi (si veda group_col
) e fino a 100 metriche (si veda value_col
) all'interno di ogni gruppo. La frequenza di previsione è la stessa per tutte le metriche in un gruppo, ma può essere diversa in gruppi diversi (si veda frequency
).
Per questa funzione sono disponibili i seguenti argomenti:
observed
è l'input con valori di tabella utilizzato come dati di training per la procedura di previsione.- Questa relazione di input deve contenere una colonna "time" e una o più colonne "value". Le colonne "Group" e "parameters" sono facoltative. Qualsiasi colonna aggiuntiva nella relazione di input viene ignorata.
horizon
è una quantità di timestamp castable che rappresenta l'ora di fine esclusiva corretta dei risultati della previsione. All'interno di un gruppo (vederegroup_col
) i risultati delle previsioni si estendono nel tempo tra l'ultima osservazione e l'orizzonte. Se l'orizzonte è minore dell'ora dell'ultima osservazione, non vengono generati risultati.time_col
è una stringa che fa riferimento alla "colonna temporale" inobserved
. La colonna a cuitime_col
fa riferimento deve essereDATE
oppureTIMESTAMP
.value_col
è una stringa o una matrice di stringhe che fanno riferimento a colonne di valori inobserved
. Si deve poter eseguire il cast aDOUBLE
delle colonne a cui fa riferimento questo argomento.group_col
(facoltativo) è una stringa o una matrice di stringhe che rappresentano le colonne di gruppo inobserved
. Se specificato, le colonne di gruppo vengono usate come criteri di partizionamento e le previsioni vengono generate per ogni gruppo in modo indipendente. Se non specificato, i dati di input completi vengono considerati come un singolo gruppo.prediction_interval_width
(facoltativo) è un valore compreso tra 0 e 1 che rappresenta la larghezza dell'intervallo di previsione. I valori futuri hanno una percentuale di probabilità delprediction_interval_width
di cadere tra{v}_upper
e{v}_lower
.frequency
(facoltativo) è una stringa alias dell'unità temporale o pandas che specifica la granularità temporale dei risultati della previsione. Se non specificato, la granularità della previsione viene dedotta automaticamente per ogni gruppo in modo indipendente. Se è specificato un valore di frequenza, viene applicato allo stesso modo a tutti i gruppi.- La frequenza inferita all'interno di un gruppo è la modalità delle osservazioni più recenti. Si tratta di un'operazione di praticità che non è ottimizzabile dall'utente.
- Ad esempio, una serie temporale con 99 “lunedì” e 1 “martedì” determina come frequenza inferita la “settimana”.
seed
(facoltativo) è un numero utilizzato per inizializzare qualsiasi generatore di numeri pseudorandom utilizzato nella procedura di previsione.parameters
(facoltativo) è un codice JSON con codifica stringa o il nome di un identificatore di colonna che rappresenta la parametrizzazione della procedura di previsione. Qualsiasi combinazione di parametri può essere specificata in qualsiasi ordine, ad esempio{“weekly_order”: 10, “global_cap”: 1000}
. Tutti i parametri non specificati vengono determinati automaticamente in base agli attributi dei dati di training. Sono supportati i seguenti parametri:global_cap
eglobal_floor
possono essere usati insieme o indipendentemente per definire il possibile dominio dei valori delle metriche.{“global_floor”: 0}
, ad esempio, può essere usato per vincolare una metrica come il costo per essere sempre positiva. Questi dati si applicano a livello globale ai dati di training e ai dati di previsione e non possono essere usati per imporre vincoli limitati solo sui valori di previsione.daily_order
eweekly_order
impostano l'ordine più lungo dei componenti di stagionalità giornaliera e settimanale.
Valori restituiti
Nuovo set di righe contenente i dati di previsione. Lo schema di output conterrà le colonne tempo e gruppo con i rispettivi tipi invariati. Ad esempio, se la colonna ora di input ha tipo DATE
, allora anche il tipo di colonna ora di output sarà DATE
. Per ogni colonna valore sono presenti tre colonne di output con il modello {v}_forecast
, {v}_upper
e {v}_lower
. Indipendentemente dai tipi di valore di input, le colonne del valore previsto sono sempre di tipo DOUBLE
. La tabella di output contiene solo valori futuri, che coprono l'intervallo di tempo tra la fine dei dati osservati e l'orizzonte.
Si vedano alcuni esempi dell'inferenza dello schema eseguita da AI_FORECAST:
Tabella di input | Argomenti | Tabella di output |
---|---|---|
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 |
Esempi
L'esempio seguente effettua previsioni fino a una data specificata:
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'
)
Il seguente esempio è più complesso:
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}'
)
Si noti che è molto comune che le tabelle non producano 0 o voci vuote. Se è possibile inferire i valori delle voci mancanti, ad esempio 0
, questi valori devono essere uniti prima di chiamare la funzione di previsione. Se i valori sono effettivamente mancanti o sconosciuti, possono essere lasciati come NULL
.
Per i dati molto scarsi, è consigliabile unire i valori mancanti o fornire esplicitamente un valore di frequenza per evitare risultati inaspettati dall'inferenza di frequenza “automatica”. Ad esempio, l'inferenza di frequenza “automatica” su due voci distanti 14 giorni dedurrà una frequenza di “14g” anche se la frequenza “reale” potrebbe essere settimanale con un valore mancante. L'accorpamento delle voci mancanti elimina questa ambiguità.
Viene infine illustrato un esempio in cui diversi parametri di previsione vengono applicati a gruppi diversi nella tabella di input:
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'
)
Si noti l'uso di un identificatore di colonna come argomento parameters
. In questo modo gli utenti possono archiviare i JSON di parametri determinati in precedenza in una tabella e riutilizzarli con nuovi dati.
Limiti
Durante l'anteprima, si applicano le seguenti limitazioni:
- La procedura di previsione predefinita è un modello di tipo profetico, lineare e stagionale. Questa è l'unica procedura di previsione supportata disponibile.
- I messaggi di errore vengono recapitati tramite il motore UDTF Python e contengono informazioni di tracciamento Python. La fine del tracciamento contiene il messaggio di errore vero e proprio.