Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Funktion
Gäller för:
Databricks SQL
Viktigt!
Version 1 av den här funktionen är i offentlig förhandsversion och HIPAA-kompatibel. Version 2 (rekommenderas) är i Beta.
ai_forecast() är en tabellvärdesfunktion som extrapolerar tidsseriedata framåt i tiden. Se Argument för tillgängliga argument för att konfigurera den här funktionen.
Funktionen har två versioner. En forskningsoptimerad grundmodell för tidsserier driver version 2 för bättre noggrannhet, och version 2 ger stöd för helgdagar, externa samvariater och icke-negativa prognoser.
version Använd argumentet för att välja vilken version som ska köras. Mer information finns i Argument .
Requirements
- Pro- eller serverlös SQL-datalager
- Registrera din arbetsyta i förhandsversionen av Predictive AI Functions (obligatoriskt för den rekommenderade version 2). Se Hantera förhandsversioner av Azure Databricks.
Syntax
Tip
Azure Databricks rekommenderar version 2 för ai_forecast. Version 2 innehåller följande förbättringar jämfört med version 1:
- En forskningsoptimerad grundmodell för tidsserier för bättre noggrannhet
- Inbyggt semesterstöd med
holiday_region - Externa samvariat, inklusive framtida och endast tidigare samvariater, med
covariate_col - Icke-negativa prognoser med
positive_only
Om du vill använda version 2 skickar du version => '2'. Kontrollera att du har aktiverat förhandsversionen av Predictive AI Functions . Se Hantera förhandsversioner av Azure Databricks.
Version 2 (rekommenderas)
ai_forecast(observed, horizon, time_col, value_col
[, group_col] [, covariate_col] [, prediction_interval_width]
[, frequency] [, holiday_region] [, positive_only] [, version])
Version 1
ai_forecast(observed, horizon, time_col, value_col
[, group_col] [, prediction_interval_width] [, frequency]
[, seed] [, parameters] [, version])
Argument
ai_forecast()kan förutsäga valfritt antal grupper (se group_col) och upp till 100 mätvärden (se value_col) i varje grupp. Prognosfrekvensen är densamma för alla mått i en grupp men kan skilja sig åt mellan grupper (se frequency).
Version 2 (rekommenderas)
-
observedär tabellvärdesindata som används som träningsdata för prognosproceduren.- Den här indatarelationen måste innehålla en "tidskolumn" och en eller flera "värde"-kolumner. Kolumnerna "Gruppera" och "samvariera" är valfria. Eventuella ytterligare kolumner i indatarelationen ignoreras.
-
horizonär en kvantitet som kan omvandlas till en tidsstämpel och representerar den högra gränsen för sluttiden för prognosresultaten. 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 "tidskolumnen" iobserved. Kolumnen som refereras avtime_colmåste vara enDATEeller enTIMESTAMP. -
value_colär en sträng eller en matris med strängar som refererar till värdekolumner iobserved. Kolumnerna som refereras till av det här argumentet måste vara gjutbara tillDOUBLE. -
group_col(valfritt) är en sträng eller en matris med strängar som representerar gruppkolumnerna iobserved. Om det anges används gruppkolumner 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. -
covariate_col(valfritt) är en sträng eller en matris med strängar som refererar till externa samvariatkolumner iobserved. Covariates är ytterligare variabler som påverkar prognosen, till exempel pris, marknadsföringsutgifter eller väder. Två typer av samvariat stöds:-
Framtida samvariat: värden är kända för prognoshorisonten, till exempel planerade priser eller schemalagda kampanjer. Om du vill använda ett samvariat på det här sättet tar du med rader i
observedsom täcker prognoshorisonten (datum efter den senaste observationen, upp tillhorizon) med covariatet fyllt och kolumnernavalue_coltill vänsterNULL.ai_forecastprognostiserar dessaNULL-målrader och villkorar prognosen på deras samvariatvärden. -
Endast tidigare samvariat: värden är endast kända för den historiska perioden, till exempel observerat väder eller makroekonomiska indikatorer. Fyll endast i samvariatet på historiska rader. Om du inte anger samvariatvärden över prognoshorisonten
ai_forecastanvänder du covariatet som endast förr. Det här är inte ett fel.
-
Framtida samvariat: värden är kända för prognoshorisonten, till exempel planerade priser eller schemalagda kampanjer. Om du vill använda ett samvariat på det här sättet tar du med rader i
-
prediction_interval_width(valfritt) är ett värde mellan 0 och 1 som representerar bredden på förutsägelseintervallet. Prognostiserade värden har enprediction_interval_width% sannolikhet att falla mellan{v}_upperoch{v}_lower. -
frequency(valfritt) är en pandas offsetaliassträng (till exempel'D','W','ME','H') som anger tidskornigheten för prognosresultatet. Om ospecificerad härleds prognosens detaljeringsnivå automatiskt för varje grupp oberoende. Om den anges måste den matcha den härledda kornigheten för indata i varje grupp.- Den härledda frekvensen i en grupp är läget för de senaste observationerna. Den här slutsatsdragningen ä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.
-
holiday_region(valfritt) är en regionkod som möjliggör automatisk modellering av semestereffekter för den regionen, till exempel'US'. När de är ospecificerade modelleras inga semestereffekter. -
positive_only(valfritt) när det är inställt påTRUE, begränsar de prognostiserade värdena till icke-negativa. Använd det här argumentet för mått som inte kan vara negativa, till exempel försäljning, antal eller inventering. Standard ärFALSE. -
version(valfritt): Versionsväxel för att stödja migrering ('1'för version 1-beteende,'2'för version 2-beteende). Om det är ospecificerat är standardvärdet version 1. Version 2-argumenten (covariate_col,holiday_region,positive_only) kräverversion => '2'.
Version 1
-
observedär tabellvärdesindata som används som träningsdata för prognosproceduren.- Den här indatarelationen måste innehålla en "tidskolumn" och en eller flera "värde"-kolumner. Kolumnerna "Gruppera" och "parametrar" är valfria. Eventuella ytterligare kolumner i indatarelationen ignoreras.
-
horizonär en kvantitet som kan omvandlas till en tidsstämpel och representerar den högra gränsen för sluttiden för prognosresultaten. 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 "tidskolumnen" iobserved. Kolumnen som refereras avtime_colmåste vara enDATEeller enTIMESTAMP. -
value_colär en sträng eller en matris med strängar som refererar till värdekolumner iobserved. Kolumnerna som refereras till av det här argumentet måste vara gjutbara tillDOUBLE. -
group_col(valfritt) är en sträng eller en matris med strängar som representerar gruppkolumnerna iobserved. Om det anges används gruppkolumner 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. Prognostiserade värden har enprediction_interval_width% sannolikhet att falla mellan{v}_upperoch{v}_lower. -
frequency(valfritt) är en tidsenhet eller pandas offsetaliassträng som anger tidskornigheten för prognosresultatet. Om ospecificerad härleds prognosens detaljeringsnivå automatiskt för varje grupp oberoende. 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. Den här slutsatsdragningen ä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 starta pseudorandomnummergeneratorer som används i prognosförfarandet. -
parameters(valfritt) är en strängkodad JSON eller namnet på en kolumnidentifierare som representerar parameteriseringen av prognosproceduren. Valfri kombination av parametrar kan anges i valfri ordning, till exempel{"weekly_order": 10, "global_cap": 1000}. Alla ospecificerade parametrar bestäms automatiskt baserat på attributen för träningsdata. Följande parametrar stöds:-
global_capochglobal_floorkan användas tillsammans eller oberoende av varandra för att definiera måttvärdenas möjliga domän.{"global_floor": 0}kan till exempel användas för att begränsa ett mått som kostnad till att alltid vara positivt. Dessa begränsningar gäller globalt för träningsdata och prognostiserade data, och kan inte användas för att endast ge snäva begränsningar för de prognostiserade värdena. -
daily_orderochweekly_orderanger Fourier-ordningen för de dagliga och veckovisa säsongskomponenterna.
-
-
version(valfritt): Versionsväxel för att stödja migrering ('1'för version 1-beteende,'2'för version 2-beteende). Om det är ospecificerat är standardvärdet version 1. Version 2-argumenten (covariate_col,holiday_region,positive_only) kräverversion => '2'.
Returer
Version 2 (rekommenderas)
En ny uppsättning rader som innehåller prognostiserade data. Utdataschemat innehåller tids- och gruppkolumnerna med sina typer oförändrade. Om kolumnen för indatatid till exempel har typen DATEär kolumntypen för utdatatid också DATE. För varje värdekolumn finns det tre utdatakolumner med mönstret {v}_forecast, {v}_upperoch {v}_lower. Oavsett indatavärdetyperna är kolumnerna för prognostiserade värden alltid typ DOUBLE. Utdatatabellen innehåller endast prognostiserade värden som sträcker sig över tidsintervallet mellan slutet av de observerade data till horisont.
I följande tabell visas några exempel på schemainferensen som utförs av AI_FORECAST:
| Indatatabell | Argument | Utdatatabell |
|---|---|---|
ts: TIMESTAMPval: DOUBLE |
time_col => 'ts'value_col => 'val' |
ts: TIMESTAMPval_forecast: DOUBLEval_upper: DOUBLEval_lower: DOUBLE |
ds: DATEval BIGINT |
time_col => 'ds'value_col => 'val' |
ds: DATEval_forecast: DOUBLEval_upper: DOUBLEval_lower: DOUBLE |
ts: TIMESTAMPdim1: STRINGdollars: DECIMAL(10, 2) |
time_col => 'ts'value_col => 'dollars'group_col => 'dim1' |
ts: TIMESTAMPdim1: STRINGdollars_forecast: DOUBLEdollars_upper: DOUBLEdollars_lower: DOUBLE |
ts: TIMESTAMPdim1: STRINGdim2: BIGINTdollars: DECIMAL(10, 2)users: BIGINT |
time_col => 'ts'value_col => ARRAY('dollars', 'users')group_col => ARRAY('dim1', 'dim2') |
ts: TIMESTAMPdim1: STRINGdim2: BIGINTdollars_forecast: DOUBLEdollars_upper: DOUBLEdollars_lower: DOUBLEusers_forecast: DOUBLEusers_upper: DOUBLEusers_lower: DOUBLE |
Version 1
En ny uppsättning rader som innehåller prognostiserade data. Utdataschemat innehåller tids- och gruppkolumnerna med sina typer oförändrade. Om kolumnen för indatatid till exempel har typen DATEär kolumntypen för utdatatid också DATE. För varje värdekolumn finns det tre utdatakolumner med mönstret {v}_forecast, {v}_upperoch {v}_lower. Oavsett indatavärdetyperna är kolumnerna för prognostiserade värden alltid typ DOUBLE. Utdatatabellen innehåller endast prognostiserade värden som sträcker sig över tidsintervallet mellan slutet av de observerade data till horisont.
I följande tabell visas några exempel på schemainferensen som utförs av AI_FORECAST:
| Indatatabell | Argument | Utdatatabell |
|---|---|---|
ts: TIMESTAMPval: DOUBLE |
time_col => 'ts'value_col => 'val' |
ts: TIMESTAMPval_forecast: DOUBLEval_upper: DOUBLEval_lower: DOUBLE |
ds: DATEval BIGINT |
time_col => 'ds'value_col => 'val' |
ds: DATEval_forecast: DOUBLEval_upper: DOUBLEval_lower: DOUBLE |
ts: TIMESTAMPdim1: STRINGdollars: DECIMAL(10, 2) |
time_col => 'ts'value_col => 'dollars'group_col => 'dim1' |
ts: TIMESTAMPdim1: STRINGdollars_forecast: DOUBLEdollars_upper: DOUBLEdollars_lower: DOUBLE |
ts: TIMESTAMPdim1: STRINGdim2: BIGINTdollars: DECIMAL(10, 2)users: BIGINT |
time_col => 'ts'value_col => ARRAY('dollars', 'users')group_col => ARRAY('dim1', 'dim2') |
ts: TIMESTAMPdim1: STRINGdim2: BIGINTdollars_forecast: DOUBLEdollars_upper: DOUBLEdollars_lower: DOUBLEusers_forecast: DOUBLEusers_upper: DOUBLEusers_lower: DOUBLE |
Exempel
Version 2 (rekommenderas)
Följande exempel prognoser fram till ett angivet datum med version 2:
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',
version => '2'
)
I följande exempel modellerar semestereffekter för United States och begränsar prognosen till icke-negativa värden:
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',
holiday_region => 'US',
positive_only => true,
version => '2'
)
I följande exempel används en extern samvariat. Tabellen observed (daily_sales) innehåller en promotion kolumn som fyllts i för både den historiska perioden och prognoshorisonten, med revenue vänster NULL på raderna för prognoshorisonten, så promotion används som en framtida samvariat:
SELECT * FROM AI_FORECAST(
TABLE(daily_sales),
horizon => '2016-03-31',
time_col => 'ds',
value_col => 'revenue',
covariate_col => 'promotion',
version => '2'
)
Version 1
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
ai_forecast genererar inte nollor för saknade eller NULL-poster i tabellen. Om rätt värden för de saknade posterna kan härledas måste de sammanslutas innan funktionen ai_forecast anropas. Om värdena verkligen saknas eller är okända kan du lämna värdena som NULL eller ta bort dem.
För glesa data är det bästa praxis att slå samman saknade värden eller ange ett frekvensvärde explicit för att undvika oväntade utdata från "auto"-frekvensinferensen. Till exempel innebär "automatisk" frekvensinferens för två poster med 14 dagars mellanrum en frekvens på "14D" även om den "verkliga" frekvensen kan vara veckovis med ett värde som saknas. Sammanslagning av de saknade posterna tar bort den här tvetydigheten.
I följande exempel visas hur olika prognosparametrar tillämpas på olika grupper i indatatabellen. I exemplet används argumentet parameters som kolumnidentifierare. Med den här metoden kan användare lagra tidigare fastställda JSON-parametrar i en tabell 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
Version 2 (rekommenderas)
Följande begränsningar gäller under betaversionen:
- Version 2 är i Beta och är inte standard. Om du vill använda version 2 väljer du genom att ange
version => '2'. Version 1, som finns i offentlig förhandsversion, förblir standard. - Standardprognosproceduren är en grundmodell för tidsserier. Den här modellen är den enda tillgängliga prognosproceduren som stöds.
- Felmeddelanden levereras via Python UDTF-motorn och innehåller Python-spårningsinformation. Slutet av felsökningskedjan innehåller det faktiska felmeddelandet.
- Varje anrop av
ai_forecastutför en oberoende slutsatsdragning. Om du anroparai_forecastflera gånger med olikaprediction_interval_widthvärden för att skapa kapslade förutsägelseintervall är de resulterande intervallen inte garanterade att vara korrekt kapslade. Om du vill jämföra förutsägelseintervall använder du ett endaai_forecastanrop med ettprediction_interval_widthvärde.
Version 1
Följande begränsningar gäller under den offentliga förhandsversionen:
- Version 1 finns i offentlig förhandsversion och är standardversionen. Version 2, som finns i Beta, är tillgänglig genom att ange
version => '2'. - Version 1 finns på en utfasningssökväg. I en kommande version ändras standardversionen till version 2 och version 1 är inaktuell. Om du vill fortsätta använda version 1-beteendet efter standardändringarna fäster du det genom att ange
version => '1'. - Standardprognosproceduren är en bitvis linjär modell med säsongskomponent. Den här modellen är den enda tillgängliga prognosproceduren som stöds.
- Felmeddelanden levereras via Python UDTF-motorn och innehåller Python-spårningsinformation. Slutet av felsökningskedjan innehåller det faktiska felmeddelandet.
- Varje anrop av
ai_forecastutför en oberoende kvantilregression. Om du anroparai_forecastflera gånger med olikaprediction_interval_widthvärden för att skapa kapslade förutsägelseintervall är de resulterande intervallen inte garanterade att vara korrekt kapslade eftersom kvantantiles beräknas oberoende över anrop, utan begränsning för att verifiera korrekt ordning. Om du vill jämföra förutsägelseintervall använder du ett endaai_forecastanrop med ettprediction_interval_widthvärde.