Dela via


Funktionen ai_forecast

Gäller för:markerad ja 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 (se group_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" i observed. Den column som time_col refererar till ska vara en DATE eller en TIMESTAMP.
  • value_col är en sträng eller en matris med strängar som refererar till värdet columns i observed. Det columns som det här argumentet refererar till bör kunna omvandlas till DOUBLE.
  • group_col (valfritt) är en sträng eller en matris med strängar som representerar gruppen columns i observed. 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 en prediction_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 och global_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 och weekly_orderset 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 DATEblir utdatatiden column typ också DATE. För varje värde column finns det tre utdata columns med mönstret {v}_forecast, {v}_upperoch {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.