Megosztás a következőn keresztül:


A ai_forecast függvény

A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL

ai_forecast() egy táblaértékű függvény, amely az idősoradatok jövőbeni extrapolálására szolgál. A függvény konfigurálásához elérhető argumentumokat az argumentumok között találhatja meg.

Követelmény

  • Pro vagy Kiszolgáló nélküli SQL adattárház

Szintaxis


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

Érvek

ai_forecast() tetszőleges számú csoport (lásd group_col) és legfeljebb 100 metrikát (lásd value_col) előrejelezhet minden csoporton belül. Az előrejelzés gyakorisága megegyezik a csoport összes metrikája esetében, de különböző csoportokban eltérő lehet (lásd frequency).

A függvény argumentumai a következők:

  • observed az előrejelzési eljárás betanítási adataiként használt táblaértékelő bemenet.
    • Ennek a bemeneti kapcsolatnak tartalmaznia kell egy "idő" oszlopot és egy vagy több "érték" oszlopot. A "Csoportosítás" és a "paraméterek" oszlopok megadása nem kötelező. A bemeneti relációban lévő további oszlopok figyelmen kívül lesznek hagyva.
  • horizon egy olyan időbélyegzhető mennyiség, amely az előrejelzési eredmények jobb oldalon kizárt befejezési idejét jelöli. Egy csoporton belül (lásd group_col) az előrejelzési eredmények az utolsó megfigyelés és a horizont közötti időt fedik le. Ha a horizont kisebb, mint az utolsó megfigyelési idő, akkor nem jön létre eredmény.
  • time_col egy sztring, amely az observed"időoszlopára" hivatkozik. A time_col által hivatkozott oszlopnak DATE vagy TIMESTAMPkell lennie.
  • value_col egy karakterlánc vagy karakterlánctömb, amely observedértékoszlopaira hivatkozik. Az argumentum által hivatkozott oszlopoknak átalakíthatónak kell lenniük DOUBLEtípusra.
  • group_col (nem kötelező) a observedcsoportoszlopokat képviselő karakterlánc vagy karakterláncok tömbje. Ha meg van adva, a rendszer particionálási feltételként csoportoszlopokat használ, és az egyes csoportokhoz egymástól függetlenül generál előrejelzéseket. Ha nincs meghatározva, a teljes bemeneti adatok egyetlen csoportként lesznek kezelve.
  • prediction_interval_width (nem kötelező) az előrejelzési időköz szélességét jelölő 0 és 1 közötti érték. A jövőbeli értékek prediction_interval_width % valószínűséggel esnek {v}_upper és {v}_lowerközött .
  • frequency (nem kötelező) egy időegység vagy pandas offset alias karakterlánc, amely meghatározza az előrejelzési eredmények időfelbontását. Ha nincs meghatározva, az előrejelzés részletessége automatikusan meghatározódik az egyes csoportok számára egymástól függetlenül. Ha egy gyakorisági érték van megadva, a rendszer az összes csoportra egyformán alkalmazza.
    • A csoporton belüli következtetett gyakoriság a legutóbbi megfigyelések módja. Ez egy olyan kényelmi művelet, amelyet a felhasználó nem hajtható végre.
    • Példaként egy 99 "hétfő" és 1 "kedd" tartalmazó idősor esetén a "hét" adódik gyakoriságként.
  • seed (nem kötelező) az előrejelzési eljárásban használt pszeudorandomszám-generátorok inicializálására használt szám.
  • parameters (nem kötelező) egy sztringbe kódolt JSON vagy egy oszlopazonosító neve, amely az előrejelzési eljárás paraméterezését jelöli. A paraméterek bármilyen kombinációja tetszőleges sorrendben megadható, például {“weekly_order”: 10, “global_cap”: 1000}. A rendszer automatikusan meghatározza a nem meghatározott paramétereket a betanítási adatok attribútumai alapján. A következő paraméterek támogatottak:
    • global_cap és global_floor együtt vagy egymástól függetlenül is használhatók a metrikaértékek lehetséges tartományának meghatározásához. {“global_floor”: 0}például egy metrika, például a költség korlátozására használható, hogy mindig pozitív legyen. Ezek globálisan vonatkoznak a betanítási adatokra és az előrejelzett adatokra, és nem használhatók arra, hogy csak az előrejelzett értékekre korlátozza őket.
    • daily_order és weekly_order beállítják a napi és heti szezonális összetevők Fourier-rendjét.

Visszaküldések

Az előrejelzett adatokat tartalmazó sorok új készlete. A kimeneti séma tartalmazza az idő- és csoportoszlopokat, a típusuk változatlan marad. Ha például a bemeneti idő oszlop DATEtípusú, akkor a kimeneti idő oszloptípusa is DATElesz. Minden értékoszlophoz három kimeneti oszlop tartozik, amelyek {v}_forecast, {v}_upperés {v}_lowermintát tartalmaznak. A bemeneti értéktípusoktól függetlenül az előrejelzett érték-oszlopok típusa mindig DOUBLE. A kimeneti tábla csak jövőbeli értékeket tartalmaz, a megfigyelt adatok vége és a horizont közötti időtartományt lefedve.

Tekintse meg az alábbi AI_FORECAST által végrehajtott sémakövetkezettséget:

Beviteli táblázat Argumentumok Kimeneti tábla
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

Példák

A következő példa egy megadott dátumig előrejelzést ad:


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

A következő egy összetettebb példa:


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

Jegyzet

ai_forecast a tábla hiányzó vagy NULL bejegyzései esetében nem kerülnek 0-kkal pótlásra. Ha a hiányzó bejegyzések megfelelő értékeit lehet kikövetkeztetni, akkor a ai_forecast függvény meghívása előtt kell őket beszűkíteni. Ha az értékek valóban hiányoznak vagy ismeretlenek, akkor meghagyhatja az értékeket NULL vagy eltávolíthatja őket.

A ritkán használt adatok esetében ajánlott a hiányzó értékek ritkítását vagy a gyakorisági értéket explicit módon megadni, hogy elkerülje az "automatikus" gyakorisági következtetésből származó váratlan kimenetet. Példaként az "automatikus következtetés" két bejegyzésre 14 napos különbséggel akkor is "14D" gyakoriságot jelez, ha a "valós" gyakoriság heti lehet egy hiányzó értékkel. A hiányzó bejegyzések összevonásával megszűnne ez a kétértelműség.

Az alábbi példában különböző előrejelzési paramétereket alkalmazunk a bemeneti tábla különböző csoportjaira. A példa a parameters argumentumot használja oszlopazonosítóként. Ez lehetővé teszi a felhasználók számára, hogy egy táblában tárolják a korábban meghatározott JSON-eket, és újra felhasználják őket az új adatokon.

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

Korlátozások

Az előzetes verzióban a következő korlátozások érvényesek:

  • Az alapértelmezett előrejelzési eljárás egy lineáris és szezonális, prófétikus modell. Ez az egyetlen támogatott előrejelzési eljárás.
  • A hibaüzenetek a Python UDTF motoron keresztül érkeznek, és Python-nyomkövetési információkat tartalmaznak. A nyomkövetés vége tartalmazza a tényleges hibaüzenetet.