Udostępnij za pośrednictwem


Funkcja ai_forecast

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej. Skontaktuj się z zespołem konta usługi Databricks, aby wziąć udział w wersji zapoznawczej.

ai_forecast() jest funkcją o wartościach table, zaprojektowaną w celu ekstrapolacji danych szeregów czasowych na przyszłość. Zobacz Argumenty dla dostępnych argumentów, aby skonfigurować tę funkcję.

Wymaganie

Usługa SQL Warehouse pro lub bezserwerowa

Składnia


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

Argumenty

ai_forecast()może prognozować dowolną liczbę value_col w każdej grupie. Częstotliwość prognozy jest taka sama dla wszystkich metryk w grupie, ale może być różna w różnych grupach (zobacz frequency).

Następujące argumenty są dostępne dla tej funkcji:

  • observed to dane wejściowe o wartości table, które są używane jako dane szkoleniowe dla procedury prognozowania.
    • Ta relacja wejściowa musi zawierać jeden column "time" i co najmniej jedną "wartość" columns. "Grupa" i "parameters" columns są opcjonalne. Wszelkie dodatkowe columns w relacji wejściowej są ignorowane.
  • horizon jest ilością rzutowania znacznika czasu reprezentującą wyłączny czas zakończenia wyników prognozowania. W grupie (patrz group_col) wyniki prognozy obejmują czas między ostatnią obserwacją a horyzontem. Jeśli horyzont jest krótszy niż czas ostatniej obserwacji, nie są generowane żadne wyniki.
  • time_col to ciąg odwołujący się do ciągu "time column" w observed. column, do których odwołuje się time_col, powinny być DATE lub TIMESTAMP.
  • value_col jest ciągiem lub tablicą ciągów odwołującą się do wartości columns w observed. columns przywoływane przez ten argument powinno zostać przekonwertowane na DOUBLE.
  • group_col (opcjonalnie) to ciąg lub tablica ciągów reprezentujących grupę columns w observed. Jeśli zostaną określone, grupy columns są używane jako kryteria partycjonowania, a prognozy są generowane niezależnie dla każdej grupy. Jeśli nie określono, pełne dane wejściowe są traktowane jako pojedyncza grupa.
  • prediction_interval_width (opcjonalnie) jest wartością z zakresu od 0 do 1 reprezentującą szerokość interwału przewidywania. Przyszłe values mają prawdopodobieństwo prediction_interval_width % mieszczące się między {v}_upper a {v}_lower.
  • frequency (opcjonalnie) to jednostka czasu lub ciąg aliasu biblioteki pandas offset określający szczegółowość czasową wyników prognozy. Jeśli nie określono, stopień szczegółowości prognozy jest automatycznie wnioskowany dla każdej grupy niezależnie. Jeśli określono wartość częstotliwości, jest ona stosowana równie do wszystkich grup.
    • Wywnioskowana częstotliwość w grupie jest trybem najnowszych obserwacji. Jest to operacja wygody, która nie jest dostrojona przez użytkownika.
    • Na przykład szereg czasowy z 99 "poniedziałkami" i 1 "wtorek" powoduje, że "tydzień" jest częstotliwością wnioskowaną.
  • seed (opcjonalnie) jest liczbą używaną do inicjowania wszystkich generatorów liczb pseudorandom używanych w procedurze prognozowania.
  • parameters (opcjonalnie) jest ciągiem JSON w postaci zakodowanej lub nazwą columnidentifier, która reprezentuje parametryzację procedury prognozowania. Dowolną kombinację parameters można określić w dowolnej kolejności, na przykład {“weekly_order”: 10, “global_cap”: 1000}. Wszystkie niezdefiniowane parameters są automatycznie ustalane na podstawie atrybutów danych treningowych. Obsługiwane są następujące parameters:
    • global_cap i global_floor mogą być używane razem lub niezależnie w celu zdefiniowania możliwej domeny valuesmetryki . {“global_floor”: 0}, na przykład można użyć do ograniczenia metryki, takiej jak koszt, aby zawsze były dodatnie. Mają one zastosowanie globalnie do danych treningowych i danych prognozowanych i nie mogą być używane do zapewniania ścisłych ograniczeń dotyczących tylko prognozowanych danych values.
    • daily_order i weekly_orderset rząd Fouriera składników sezonowości dziennej i tygodniowej.

Zwraca

set nowych wierszy zawierających prognozowane dane. Dane wyjściowe schema będą zawierać czas i grupę columns z ich typami bez zmian. Na przykład, jeśli czas wejściowy column ma typ DATE, to czas wyjściowy column będzie miał również typ DATE. Dla każdej wartości column istnieją trzy columns wyjściowe ze wzorcem {v}_forecast, {v}_upperi {v}_lower. Niezależnie od typów wartości wejściowych prognozowane wartości columns są zawsze typu DOUBLE. Dane wyjściowe table zawierają tylko przyszłe values, obejmujące zakres czasu od końca obserwowanych danych do horyzontu.

Zobacz kilka przykładów wnioskowania schema wykonywanego przez AI_FORECAST poniżej:

Wejście table Argumenty Wyjście 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

Przykłady

Następujące przykładowe prognozy do określonej daty:


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

Poniżej przedstawiono bardziej złożony przykład:


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

Należy pamiętać, że bardzo często zdarza się, że tables nie generuje zer ani pustych wpisów. Jeśli values brakujących wpisów można wywnioskować, na przykład 0, te values należy połączyć przed wywołaniem funkcji prognozy. Jeśli values naprawdę brakuje lub są nieznane, można je pozostawić jako NULL.

W przypadku bardzo rozrzednionych danych najlepszym rozwiązaniem jest scalanie brakujących values lub podanie wartości częstotliwości wprost, aby uniknąć nieoczekiwanych wyników automatycznego wnioskowania częstotliwości. Na przykład wnioskowanie częstotliwości automatycznej dla dwóch wpisów 14 dni od siebie spowoduje wywnioskowanie częstotliwości "14D", nawet jeśli "rzeczywista" częstotliwość może być co tydzień z 1 brakującą wartością. Łączenie brakujących wpisów powoduje usunięcie tej niejednoznaczności.

Na koniec pokazujemy przykład where różnych parameters prognozy są stosowane do różnych grup w tablewejściowych:

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

Zwróć uwagę na użycie columnidentifier jako argumentu parameters. Dzięki temu użytkownicy mogą przechowywać wcześniej określone parametry JSON w table i używać ich ponownie na nowych danych.

Ograniczenia

W wersji zapoznawczej obowiązują następujące ograniczenia:

  • Domyślna procedura prognozowania to model liniowy i sezonowości podobny do proroka. Jest to jedyna obsługiwana procedura prognozowania dostępna.
  • Komunikaty o błędach są dostarczane za pośrednictwem aparatu UDTF języka Python i zawierają informacje o śledzeniu języka Python. Koniec powrotu śledzenia zawiera rzeczywisty komunikat o błędzie.