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 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ě (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 "sloupec času" vobserved
. Sloupec, na který odkazujetime_col
, by měl býtDATE
neboTIMESTAMP
. -
value_col
je řetězec nebo pole řetězců odkazujících na sloupce hodnot vobserved
. Sloupce odkazované tímto argumentem by měly být přetypované naDOUBLE
. -
group_col
(volitelné) je řetězec nebo pole řetězců představujících sloupce skupiny vobserved
. 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
aglobal_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
aweekly_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}_upper
a {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 stále nezobrazují položky 0 ani prázdné záznamy (NULL
). 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é, můžete je ponechat jako NULL
nebo je odebrat.
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.