Condividi tramite


Funzione ai_forecast

Si applica a: segno di spunta sì 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 (vedere group_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" in observed. La colonna a cui time_col fa riferimento deve essere DATE oppure TIMESTAMP.
  • value_col è una stringa o una matrice di stringhe che fanno riferimento a colonne di valori in observed. Si deve poter eseguire il cast a DOUBLE delle colonne a cui fa riferimento questo argomento.
  • group_col (facoltativo) è una stringa o una matrice di stringhe che rappresentano le colonne di gruppo in observed. 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à del prediction_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 e global_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 e weekly_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.