Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:
Databricks SQL
Belangrijk
Deze functionaliteit bevindt zich in openbare preview en is HIPAA-conform.
ai_forecast() is een tabelwaardefunctie 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 groepen voorspellen (zie group_col) en tot 100 kenmerken (zie value_col) binnen elke groep. 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:
-
observedis de invoer met tabelwaarde die wordt gebruikt als trainingsgegevens voor de prognoseprocedure.- Deze invoerrelatie moet één kolom 'tijd' en een of meer 'waardekolommen' bevatten. Kolommen Groeperen en Parameters zijn optioneel. Eventuele extra kolommen in de invoerrelatie worden genegeerd.
-
horizonis een hoeveelheid die kan worden omgezet naar een tijdstempel en die de rechtsuitsluitende eindtijd van de prognoseresultaten vertegenwoordigt. Binnen een groep (ziegroup_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_colis een tekenreeks die verwijst naar de 'tijdkolom' inobserved. De kolom waarnaartime_colverwijst, moet eenDATEof eenTIMESTAMPzijn. -
value_colis een tekenreeks of een matrix met tekenreeksen die verwijzen naar waardekolommen inobserved. De kolommen waarnaar door dit argument wordt verwezen, moeten omgezet kunnen worden inDOUBLE. -
group_col(optioneel) is een tekenreeks of een matrix met tekenreeksen die de groepskolommen inobservedvertegenwoordigen. Indien opgegeven, worden groepskolommen 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 waarden hebben eenprediction_interval_width% kans om tussen{v}_upperen{v}_lowerte vallen. -
frequency(optioneel) is een tijdseenheid of een pandas-offset aliasstring die de tijdsgranulariteit 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 afgeleide 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 kolom-id die de parameterisatie van de prognoseprocedure vertegenwoordigt. Elke combinatie van parameters kan in elke volgorde worden opgegeven, bijvoorbeeld{“weekly_order”: 10, “global_cap”: 1000}. Eventuele niet-opgegeven parameters worden automatisch bepaald op basis van de kenmerken van de trainingsgegevens. De volgende parameters worden ondersteund:-
global_capenglobal_floorkunnen samen of onafhankelijk worden gebruikt om het mogelijke domein van de metrische waarden te 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 alleen strikte beperkingen voor de voorspelde waarden te bieden. -
daily_orderenweekly_orderstellen de fouriervolgorde van de dagelijkse en wekelijkse seizoensgebonden onderdelen in.
-
Retouren
Een nieuwe set rijen met de voorspelde gegevens. Het uitvoerschema bevat de tijd- en groepskolommen met hun typen ongewijzigd. Als de invoertijdkolom bijvoorbeeld type DATEheeft, wordt het kolomtype uitvoertijd ook DATE. Voor elke waardekolom zijn er drie uitvoerkolommen met het patroon {v}_forecast, {v}_upperen {v}_lower. Ongeacht de invoerwaardetypen zijn de kolommen met voorspelde waarden altijd type DOUBLE. De uitvoertabel bevat alleen toekomstige waarden, die het tijdsbereik tussen het einde van de waargenomen gegevens tot de horizon beslaat.
Zie enkele voorbeelden van de schemadeductie die door AI_FORECAST hieronder wordt uitgevoerd:
| Invoertabel | Argumenten | Uitvoertabel |
|---|---|---|
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 |
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
ai_forecast materialiseert geen 0's voor ontbrekende of NULL vermeldingen in de tabel. Als de juiste waarden van de ontbrekende vermeldingen kunnen worden afgeleid, moeten ze worden samengesamend voordat de ai_forecast functie wordt aangeroepen. Als de waarden echt ontbreken of onbekend zijn, kunt u de waarden laten staan als NULL of verwijderen.
Voor zeer schaarse gegevens is het raadzaam om ontbrekende waarden samen te voegen of expliciet een frequentiewaarde op te geven om onverwachte uitvoer van de 'automatische' frequentie-inferentie te voorkomen. Als een voorbeeld wordt een 'automatische' frequentie-afleiding voor twee vermeldingen die 14 dagen uit elkaar liggen afgeleid tot een frequentie van '14D', zelfs als de werkelijke frequentie wekelijks kan zijn met 1 ontbrekende waarde. Als u de ontbrekende vermeldingen samenwerkt, wordt deze dubbelzinnigheid verwijderd.
Hieronder ziet u een voorbeeld waarin verschillende prognoseparameters worden toegepast op verschillende groepen in de invoertabel. In het voorbeeld wordt het argument parameters gebruikt als kolom-id. Hierdoor kunnen gebruikers eerder bepaalde parameter-JSON's opslaan in een tabel 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 standaard prognoseprocedure is een stukgewijs liniar en seizoensgebonden model vergelijkbaar met Prophet. Dit is de enige ondersteunde prognoseprocedure die beschikbaar is.
- Foutberichten worden bezorgd via de Python UDTF-engine en bevatten python-traceringsgegevens. Het einde van het terugtraceerproces bevat het werkelijke foutbericht.