Sdílet prostřednictvím


Funkce ai_forecast

Platí pro:zaškrtnutí označeného ano Databricks SQL

Důležité

Tato funkce je ve verzi Public Preview a je kompatibilní s HIPAA . Spojte se s týmem účtu Databricks a zapojte se do verze Preview.

ai_forecast() je funkce s hodnotami table, která je navržena pro extrapolaci časových řad do budoucnosti. Informace o dostupných argumentech pro konfiguraci této funkce najdete v části Argumenty .

Požadavek

Pro nebo bezserverový SQL Warehouse

Syntaxe


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

Argumenty

ai_forecast()může v každé skupině předpovídat libovolný počet skupin (viz) a až 100 group_col (viz).value_col Frekvence prognózy je stejná pro všechny metriky ve skupině, ale může se lišit v různých skupinách (viz).frequency

Následující argumenty jsou k dispozici pro tuto funkci:

  • observed je vstup table-valued, který se používá jako trénovací data pro proceduru prognózy.
    • Tento vstupní vztah musí obsahovat jeden „čas“ column a jednu nebo více „hodnot“ columns. "Skupina" a "parameters" "columns" jsou volitelné. Všechny další columns ve vstupní relaci se ignorují.
  • horizon je množství s časovým razítkem, které představuje výhradní koncový čas výsledků prognózování. Výsledky prognózy ve skupině (viz group_col) zahrnují čas mezi posledním pozorováním a horizontem. Pokud je horizont kratší než čas posledního pozorování, nevygenerují se žádné výsledky.
  • time_col je řetězec odkazující na „čas column“ v observed. column odkazované time_col by mělo být DATE nebo TIMESTAMP.
  • value_col je řetězec nebo pole řetězců odkazujících na hodnotu columns v observed. columns odkazovaný tímto argumentem by měl být přetypován na DOUBLE.
  • group_col (volitelné) je řetězec nebo pole řetězců představujících skupinu columns v observed. Pokud jsou skupiny columns zadány, používají se jako kritéria dělení a prognózy se generují pro každou skupinu nezávisle. Pokud není zadáno, zachází se úplná vstupní data jako s jednou skupinou.
  • prediction_interval_width (volitelné) je hodnota mezi 0 a 1 představující šířku intervalu předpovědi. Budoucí values mají prediction_interval_width % pravděpodobnost poklesu mezi {v}_upper a {v}_lower.
  • frequency (volitelně) je časová jednotka nebo aliasový řetězec pandas offset, který specifikuje časovou granularitu výsledků prognózy. Pokud není zadáno, členitost prognózy se automaticky odvodí pro každou skupinu nezávisle. Pokud je zadaná hodnota četnosti, použije se stejně pro všechny skupiny.
    • Odvozená frekvence ve skupině je režim nejnovějších pozorování. Jedná se o pohodlnou operaci, kterou uživatel neladí.
    • Například časová řada s 99 "pondělími" a 1 "úterým" výsledkem je "týden" odvozená frekvence.
  • seed (volitelné) je číslo, které slouží k inicializaci libovolných generátorů pseudonáhodných čísel používaných v postupu prognózování.
  • parameters (volitelné) je řetězec kódovaný JSON nebo název columnidentifier, který představuje parametrizaci procedury prognózy. Libovolnou kombinaci parameters lze zadat v libovolném pořadí, například {“weekly_order”: 10, “global_cap”: 1000}. Všechny nezadané parameters se automaticky určují na základě atributů trénovacích dat. Podporují se následující parameters:
    • global_cap a global_floor lze použít společně nebo nezávisle definovat možnou doménu valuesmetriky . {“global_floor”: 0}Můžete například použít k omezení metriky, jako jsou náklady, aby vždy byly kladné. Tyto zásady platí globálně pro trénovací data a předpovídaná data a nelze je použít k zajištění omezených omezení pouze pro prognózované values.
    • daily_order a weekly_orderset Fourierovo pořadí denní a týdenní sezónní složky.

Návraty

Nový set řádků obsahujících prognózovaná data. Výstup schema bude obsahovat čas a skupinu columns, přičemž jejich typy zůstanou beze změny. Pokud má například vstupní čas column typ DATE, bude výstupní čas column také DATE. Pro každou hodnotu column existují tři výstupní columns se vzorem {v}_forecast, {v}_uppera {v}_lower. Bez ohledu na vstupní typy hodnot jsou předpovídaná hodnota columns vždy typ DOUBLE. Výstup table obsahuje pouze budoucí values, v rozsahu času od konce pozorovaných dat až po horizont.

Podívejte se na některé příklady odvození schema provedených AI_FORECAST níže:

Vstup table Argumenty Výstup table
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

Příklady

Následující příklad prognózuje do zadaného data:


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

Následuje složitější příklad:


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

Poznámka

Tables důsledně nematerializuje nuly ani prázdné položky. Pokud lze values chybějících položek odvodit, například 0, pak tyto values sjednotíte před voláním funkce ai_forecast. Pokud values skutečně chybí nebo jsou neznámé, mohou být ponechány jako NULL.

U velmi řídkých dat se doporučuje sjednotit chybějící data označená values nebo explicitně poskytnout hodnotu frekvence, aby se předešlo neočekávaným výsledkům při určení "automatické" frekvence. Například "automatická" četnost odvozování dvou položek o 14 dnech od sebe odvodí frekvenci "14D", i když "skutečná" frekvence může být týdenní s chybějící hodnotou 1. Když shodíte chybějící položky, odebere se tato nejednoznačnost.

Následující ukazuje příklad where, kde různé prognózy parameters jsou aplikovány na různé skupiny ve vstupním table. Příklad používá argument parameters jako columnidentifier. To umožňuje uživatelům ukládat dříve určené hodnoty JSON parametrů do table a znovu je používat u nových dat.

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

Omezení

Během verze Preview platí následující omezení:

  • Výchozí procedura prognózování je model lineární a sezónnosti podobný prorokovi. Toto je jediný dostupný podporovaný postup prognózování.
  • Chybové zprávy se doručují prostřednictvím modulu UDTF Pythonu a obsahují informace o zpětném trasování Pythonu. Konec zpětného trasování obsahuje skutečnou chybovou zprávu.