Delen via


ai_forecast-functie

Van toepassing op:vinkje als ja aan Databricks SQL

Belangrijk

Deze functionaliteit bevindt zich in openbare preview en is HIPAA-conform. Neem contact op met uw Databricks-accountteam om deel te nemen aan de preview.

ai_forecast() is een table-waardefunctie die is ontworpen om tijdreeksgegevens in de toekomst te extrapoleren. Zie Argumenten voor beschikbare argumenten voor het configureren van deze functie.

Vereiste

Pro of Serverless SQL Warehouse

Syntaxis


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 '{}'
)

Argumenten

ai_forecast()kan een willekeurig aantal elke groep voorspellen. De prognosefrequentie is hetzelfde voor alle metrische gegevens in een groep, maar kan verschillen tussen verschillende groepen (zie frequency).

De volgende argumenten zijn beschikbaar voor deze functie:

  • observed is de table-valued input die wordt gebruikt als trainingsdata voor de prognoseprocedure.
    • Deze invoerrelatie moet één 'time' column en een of meer 'waarde' columnsbevatten. 'Groep' en 'parameters' columns zijn optioneel. Eventuele extra columns in de invoerrelatie worden genegeerd.
  • horizon is een tijdstempel-castable hoeveelheid die de juiste exclusieve eindtijd van de prognoseresultaten vertegenwoordigt. Binnen een groep (zie group_col) beslaan de prognoseresultaten de tijd tussen de laatste observatie en de horizon. Als horizon kleiner is dan de laatste observatietijd, worden er geen resultaten gegenereerd.
  • time_col is een tekenreeks die verwijst naar de 'tijd column' in observed. De column waarnaar door time_col wordt verwezen, moeten een DATE of een TIMESTAMPzijn.
  • value_col is een tekenreeks of een matrix van tekenreeksen die verwijzen naar een waarde columns in observed. De columns waar dit argument naar verwijst, moet omgezet kunnen worden naar DOUBLE.
  • group_col (optioneel) is een tekenreeks of een matrix met tekenreeksen die de groep columns in observedvertegenwoordigen. Indien opgegeven, worden groep columns gebruikt als partitioneringscriteria en worden prognoses voor elke groep onafhankelijk gegenereerd. Als dit niet is opgegeven, worden de volledige invoergegevens behandeld als één groep.
  • prediction_interval_width (optioneel) is een waarde tussen 0 en 1 die de breedte van het voorspellingsinterval vertegenwoordigt. Toekomstige values hebben een prediction_interval_width % waarschijnlijkheid tussen {v}_upper en {v}_lower.
  • frequency (optioneel) is een tijdseenheid of pandas offset aliastekenreeks die de tijdgranulariteit van de prognoseresultaten aangeeft. Indien niet opgegeven, wordt de prognosegranulariteit automatisch voor elke groep afzonderlijk afgeleid. Als een frequentiewaarde is opgegeven, wordt deze evenzeer toegepast op alle groepen.
    • De uitgestelde frequentie binnen een groep is de modus van de meest recente waarnemingen. Dit is een handige bewerking die niet door de gebruiker kan worden uitgevoerd.
    • Een tijdreeks met 99 'maandagen' en 1 'dinsdag' resulteert bijvoorbeeld in de 'week' als de uitgestelde frequentie.
  • seed (optioneel) is een getal dat wordt gebruikt voor het initialiseren van pseudorandomnummergeneratoren die worden gebruikt in de voorspellingsprocedure.
  • parameters (optioneel) is een met tekenreeks gecodeerde JSON of de naam van een columnidentifier die de parameterisatie van de prognoseprocedure vertegenwoordigt. Elke combinatie van parameters kan in elke volgorde worden opgegeven, bijvoorbeeld {“weekly_order”: 10, “global_cap”: 1000}. Alle niet-opgegeven parameters worden automatisch bepaald op basis van de kenmerken van de trainingsgegevens. De volgende parameters worden ondersteund:
    • global_cap en global_floor kunnen samen of onafhankelijk worden gebruikt om het mogelijke domein van de metrische valueste definiëren. {“global_floor”: 0}kan bijvoorbeeld worden gebruikt om een metrische waarde te beperken, zoals kosten, om altijd positief te zijn. Deze zijn globaal van toepassing op de trainingsgegevens en de voorspelde gegevens en kunnen niet worden gebruikt om strikte beperkingen te bieden voor de voorspelde values alleen.
    • daily_order en weekly_orderset de fouriervolgorde van de dagelijkse en wekelijkse seizoensgebonden onderdelen.

Retouren

Een nieuwe set rijen met de voorspelde gegevens. De uitvoer schema zal de tijd en groep columns bevatten, terwijl hun typen ongewijzigd blijven. Als de invoertijd column bijvoorbeeld type DATEheeft, wordt de uitvoertijd column type ook DATE. Voor elke waarde column zijn er drie uitvoer columns met het patroon {v}_forecast, {v}_upperen {v}_lower. Ongeacht de invoerwaardetypen zijn de voorspelde waarde columns altijd DOUBLE. De uitvoer table bevat alleen toekomstige values, die de periode omvat vanaf het einde van de waargenomen gegevens tot aan de horizon.

Bekijk enkele voorbeelden van de schema deductie die door AI_FORECAST hieronder wordt uitgevoerd:

Invoer table Argumenten Uitvoer 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

Voorbeelden

De volgende voorbeeldprognoses tot een opgegeven 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'
)

Hier volgt een complexer voorbeeld:


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}'
)

Notitie

Tables zorgt er consequent voor dat 0'en of lege vermeldingen niet worden weergegeven. Als de values van de ontbrekende vermeldingen kan worden afgeleid, bijvoorbeeld 0, sluit u deze values samen voordat u de ai_forecast functie aanroept. Als de values echt ontbreken of onbekend zijn, kunnen deze als NULLworden gelaten.

Bij zeer spaarzame gegevens is het raadzaam om ontbrekende values samen te voegen of expliciet een frequentiewaarde op te geven om onverwachte resultaten van de 'automatische frequentieverwerking' te voorkomen. Als voorbeeld wordt een 'automatische' frequentiedeductie voor twee vermeldingen van 14 dagen uit elkaar afgeleid door een frequentie van '14D', zelfs als 'echte' frequentie wekelijks met 1 ontbrekende waarde kan zijn. Als u de ontbrekende vermeldingen samenwerkt, wordt deze dubbelzinnigheid verwijderd.

Hieronder ziet u een voorbeeld where verschillende prognose-parameters worden toegepast op verschillende groepen in de invoer table. In het voorbeeld wordt het argument parameters gebruikt als een columnidentifier. Hierdoor kunnen gebruikers eerder bepaalde parameter-JSON's opslaan in een table en deze opnieuw gebruiken op nieuwe gegevens.

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'
)

Beperkingen

De volgende beperkingen zijn van toepassing tijdens de preview:

  • De standaardprognoseprocedure is een profeetachtig lineair en seizoensgebonden model. Dit is de enige ondersteunde prognoseprocedure die beschikbaar is.
  • Foutberichten worden bezorgd via de Python UDTF-engine en bevatten python-traceringsgegevens. Het einde van de tracering bevat het werkelijke foutbericht.