Funkce ai_forecast
Platí pro: 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ě (vizgroup_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“ vobserved
. column odkazovanétime_col
by mělo býtDATE
neboTIMESTAMP
. -
value_col
je řetězec nebo pole řetězců odkazujících na hodnotu columns vobserved
. columns odkazovaný tímto argumentem by měl být přetypován naDOUBLE
. -
group_col
(volitelné) je řetězec nebo pole řetězců představujících skupinu columns vobserved
. 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
aglobal_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
aweekly_order
set 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}_upper
a {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.