Funktionen ai_forecast
Gäller för: Databricks SQL
Viktigt!
Den här funktionen finns i offentlig förhandsversion och HIPAA-kompatibel. Kontakta ditt Databricks-kontoteam för att delta i förhandsversionen.
ai_forecast()
är en table-värderad funktion som är utformad för att extrapolera tidsseriedata i framtiden. Se Argument för tillgängliga argument för att konfigurera den här funktionen.
Krav
Pro- eller Serverless SQL-lager
Syntax
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 '{}'
)
Argument
ai_forecast()
kan prognostisera valfritt antal i varje grupp. Prognosfrekvensen är densamma för alla mått i en grupp men kan skilja sig mellan olika grupper (se frequency
).
Följande är tillgängliga argument för den här funktionen:
-
observed
är den table-värderade indata som används som träningsdata för prognosprocessen.- Den här indatarelationen måste innehålla en "tid" column och ett eller flera "värde" columns. "Grupp" och "parameters" columns är valfria. Eventuella ytterligare columns i indatarelationen ignoreras.
-
horizon
är en tidsstämpelbegjutbar kvantitet som representerar den rätt exklusiva sluttiden för prognosresultatet. I en grupp (segroup_col
) sträcker sig prognosresultatet över tiden mellan den senaste observationen och horisonten. Om horisonten är mindre än den senaste observationstiden genereras inga resultat. -
time_col
är en sträng som refererar till "time column" iobserved
. Den column somtime_col
refererar till ska vara enDATE
eller enTIMESTAMP
. -
value_col
är en sträng eller en matris med strängar som refererar till värdet columns iobserved
. Det columns som det här argumentet refererar till bör kunna omvandlas tillDOUBLE
. -
group_col
(valfritt) är en sträng eller en matris med strängar som representerar gruppen columns iobserved
. Om det anges används grupp columns som partitioneringsvillkor och prognoser genereras för varje grupp oberoende av varandra. Om de är ospecificerade behandlas de fullständiga indata som en enda grupp. -
prediction_interval_width
(valfritt) är ett värde mellan 0 och 1 som representerar bredden på förutsägelseintervallet. Framtida values har enprediction_interval_width
% sannolikhet att falla mellan{v}_upper
och{v}_lower
. -
frequency
(valfritt) är en tidsenhet eller Pandas offset aliassträng som anger tidskornigheten för prognosresultatet. Om den är ospecificerad härleds prognoskornigheten automatiskt för varje grupp oberoende av varandra. Om ett frekvensvärde anges tillämpas det lika på alla grupper.- Den härledda frekvensen i en grupp är läget för de senaste observationerna. Det här är en bekvämlighetsåtgärd som inte kan ändras av användaren.
- Till exempel resulterar en tidsserie med 99 "måndagar" och 1 "tisdag" i "veckan" som den härledda frekvensen.
-
seed
(valfritt) är ett tal som används för att initiera eventuella pseudorandomnummergeneratorer som används i prognosproceduren. -
parameters
(valfritt) är en strängkodad JSON eller namnet på en columnidentifier som representerar parameteriseringen av prognosproceduren. Alla kombinationer av parameters kan anges i valfri ordning, till exempel{“weekly_order”: 10, “global_cap”: 1000}
. Alla ospecificerade parameters bestäms automatiskt baserat på attributen för träningsdatan. Följande parameters stöds:-
global_cap
ochglobal_floor
kan användas tillsammans eller oberoende av varandra för att definiera den möjliga domänen för måttet values.{“global_floor”: 0}
kan till exempel användas för att begränsa ett mått som kostnad till att alltid vara positivt. Dessa gäller globalt för träningsdata och prognostiserade data och kan inte användas för att ge snäva begränsningar för de prognostiserade values endast. -
daily_order
ochweekly_order
set Fourier-ordningen på de dagliga och veckovisa säsongskomponenterna.
-
Returer
Ett nytt set med rader som innehåller prognostiserade data. Utdata schema innehåller tid och grupp columns med deras typer oförändrade. Om till exempel indatatiden column har typen DATE
blir utdatatiden column typ också DATE
. För varje värde column finns det tre utdata columns med mönstret {v}_forecast
, {v}_upper
och {v}_lower
. Oavsett indatavärdetyperna är det prognostiserade värdet columns alltid typ DOUBLE
. Utdata för table innehåller endast framtida values, som sträcker sig över tidsperioden från slutet av de observerade data fram till horisonten.
Se några exempel på den schema slutsatsdragning som utförs av AI_FORECAST nedan:
Indata table | Argument | Utdata 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 |
Exempel
Följande exempelprognoser fram till ett angivet datum:
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'
)
Följande är ett mer komplext exempel:
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}'
)
Anteckning
Tables konsekvent materialiserar inte 0:or eller tomma poster. Om values av de saknade posterna kan härledas, till exempel 0
, bör dessa values sammanfogas innan du anropar funktionen ai_forecast
. Om values verkligen saknas eller är okända kan de lämnas som NULL
.
För mycket glesa data är det bästa praxis att sammansvärja saknade values eller ange ett frekvensvärde explicit för att undvika oväntade utdata från "automatisk" frekvensinferens. Till exempel kommer "automatisk" frekvensinferens på två poster med 14 dagars mellanrum att härleda en frekvens på "14D" även om "verklig" frekvens kan vara varje vecka med ett värde som saknas. Sammansvetsning av de saknade posterna tar bort den här tvetydigheten.
Följande visar ett exempel where olika prognos parameters tillämpas på olika grupper i indata table. I exemplet används argumentet parameters
som en columnidentifier. Detta gör det möjligt för användare att lagra tidigare fastställda parameter-JSON:er i en table och återanvända dem på nya data.
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'
)
Begränsningar
Följande begränsningar gäller under förhandsversionen:
- Standardprognosproceduren är en profetliknande linjär modell och säsongsvariation. Det här är den enda tillgängliga prognosproceduren som stöds.
- Felmeddelanden levereras via Python UDTF-motorn och innehåller Python-spårningsinformation. Slutet av spårningsservern innehåller det faktiska felmeddelandet.