Condividi tramite


Funzione ai_forecast

Si applica a:segno di spunta sì Databricks SQL

Importante

Questa funzionalità si trova in anteprima pubblica e conforme a HIPAA. Contattare il team dell'account Databricks per partecipare all'anteprima.

ai_forecast() è una funzione con valori di tabella progettata 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 allenamento 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. Tutte le colonne aggiuntive nella relazione di input vengono ignorate.
  • 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 fa riferimento time_col deve essere un DATE o un TIMESTAMP.
  • value_col è una stringa o un array di stringhe che fanno riferimento a colonne di valore in observed. Le colonne a cui fa riferimento questo argomento dovrebbero poter essere convertite in DOUBLE.
  • 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 probabilità prediction_interval_width % di cadere tra {v}_upper e {v}_lower.
  • frequency (facoltativo) è una stringa di 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 parametri seguenti:
    • 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 previsti e non possono essere usati per fornire vincoli limitati solo sui valori previsti.
    • daily_order e weekly_order impostano l'ordine di Fourier dei componenti di stagionalità giornaliera e settimanale.

Valori restituiti

Nuovo set di righe contenente i dati previsti. Lo schema di output conterrà le colonne del tempo e del gruppo con i tipi invariati. Ad esempio, se la colonna del tempo di input ha tipo DATE, anche la colonna del tempo di output avrà tipo DATE. Per ogni colonna di valore sono presenti tre colonne di output con il modello {v}_forecast, {v}_uppere {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 copre l'intervallo di tempo compreso tra la fine dei dati osservati e l'orizzonte.

Vedere alcuni esempi dell'inferenza dello schema eseguita da AI_FORECAST di seguito:

Tabella di input Argomenti Tabella dei risultati
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}'
)

Nota

Le tabelle costantemente non presentano zeri o elementi vuoti (NULL). Se è possibile dedurre i valori delle voci mancanti, ad esempio 0, unire questi valori prima di chiamare la funzione ai_forecast. Se i valori sono effettivamente mancanti o sconosciuti, è possibile lasciare i valori come NULL o rimuoverli.

Per i dati molto sparsamente, è consigliabile raccogliere i valori mancanti o fornire in modo esplicito un valore di frequenza per evitare risultati imprevisti dall'inferenza della frequenza "auto". 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à.

Di seguito viene illustrato un esempio in cui diversi parametri di previsione vengono applicati a gruppi diversi nella tabella di input. Nell'esempio viene usato l'argomento parameters come identificatore di colonna. In questo modo gli utenti possono archiviare i JSON di parametri determinati in precedenza in una tabella e riutilizzarli sui nuovi dati.

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'
)

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.