Číst v angličtině

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 hodnotou tabulky navržená k extrapolaci dat č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 tabulkový vstup, který se používá jako tréninková data pro prognostický postup.
    • Tento vstupní vztah musí obsahovat jeden sloupec "čas" a jeden nebo více sloupců "hodnota". Sloupce "Group" a "parameters" jsou volitelné. Všechny další sloupce 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 "sloupec času" v observed. Sloupec, na který odkazuje time_col, by měl být DATE nebo TIMESTAMP.
  • value_col je řetězec nebo pole řetězců odkazujících na sloupce hodnot v observed. Sloupce odkazované tímto argumentem by měly být přetypované na DOUBLE.
  • group_col (volitelné) je řetězec nebo pole řetězců představujících sloupce skupiny v observed. Pokud je zadáno, sloupce skupiny se používají 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í hodnoty mají prediction_interval_width % pravděpodobnost spadající mezi {v}_upper a {v}_lower.
  • frequency (volitelné) je řetězec určený jako časová jednotka nebo alias posunu pro pandas, 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 identifikátoru sloupce, který představuje parametrizaci procedury prognózy. Libovolnou kombinaci parametrů lze zadat v libovolném pořadí, například {“weekly_order”: 10, “global_cap”: 1000}. Všechny nezadané parametry se automaticky určují na základě atributů trénovacích dat. Podporují se následující parametry:
    • global_cap a global_floor lze použít společně nebo nezávisle na sobě k definování možné domény hodnot metriky. {“global_floor”: 0}Můžete například použít k omezení metriky, jako jsou náklady, aby vždy byly kladné. Tyto možnosti se vztahují globálně na trénovací data a předpovídaná data a nelze je použít k zajištění omezených omezení pouze pro prognózované hodnoty.
    • daily_order a weekly_order určují fourierovy řády složek denní a týdenní sezónnosti.

Návraty

Nová sada řádků obsahující prognózovaná data. Výstupní schéma bude obsahovat sloupce času a seskupení s jejich typy beze změny. Pokud má například sloupec vstupního času typ DATE, typ výstupního časového sloupce bude také DATE. Pro každý sloupec hodnot existují tři výstupní sloupce se vzorem {v}_forecast, {v}_uppera {v}_lower. Bez ohledu na vstupní typy hodnot jsou sloupce prognózované hodnoty vždy typ DOUBLE. Výstupní tabulka obsahuje pouze budoucí hodnoty, které pokrývají časový rozsah mezi koncem pozorovaných dat až do horizontu.

Podívejte se na některé příklady odvození schématu prováděného AI_FORECAST níže:

Vstupní tabulka Argumenty Výstupní tabulka
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

Tabulky konzistentně ne materializují 0 ani prázdné položky. Pokud lze odvodit hodnoty chybějících položek, například 0, pak tyto hodnoty sloučte před voláním funkce ai_forecast. Pokud hodnoty skutečně chybí nebo jsou neznámé, mohou být ponechány jako NULL.

Pro velmi řídká data je nejlepší praxí sjednocovat chybějící hodnoty nebo explicitně poskytnout hodnotu četnosti, aby se zabránilo neočekávaným výstupům automatického určení 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í příklad ukazuje, kde se pro různé skupiny ve vstupní tabulce použijí různé parametry prognózy. V příkladu se jako identifikátor sloupce používá argument parameters. To umožňuje uživatelům ukládat dříve určené hodnoty JSONs parametrů do tabulky 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.