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() to funkcja o wartości tabeli przeznaczona do ekstrapolacji danych szeregów czasowych w przyszłości. 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ę grup (zobacz group_col) i maksymalnie 100 metryk (zobacz 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 z wartością tabeli, które są używane jako dane szkoleniowe dla procedury prognozowania.
    • Ta relacja wejściowa musi zawierać jedną kolumnę "time" i co najmniej jedną kolumnę "value". Kolumny "Group" i "parameters" są opcjonalne. Wszystkie dodatkowe kolumny 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 "kolumny czasu" w pliku observed. Do kolumny, do których odwołuje się time_col element , powinien mieć wartość DATE lub TIMESTAMP.
  • value_col jest ciągiem lub tablicą ciągów odwołujących się do kolumn wartości w elemencie observed. Kolumny, do których odwołuje się ten argument, powinny być rzutowane na DOUBLE.
  • group_col (opcjonalnie) to ciąg lub tablica ciągów reprezentujących kolumny grupy w obiekcie observed. Jeśli zostanie określony, kolumny grup 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. Wartości przyszłe mają prediction_interval_width % prawdopodobieństwa spadku między wartościami {v}_upper i {v}_lower.
  • frequency (opcjonalnie) jest jednostką czasową lub ciągiem aliasu przesunięcia biblioteki pandas określającym stopień szczegółowości czasu 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) to kod JSON zakodowany w ciągu lub nazwa identyfikatora kolumny reprezentującego parametryzacja procedury prognozowania. Dowolną kombinację parametrów można określić w dowolnej kolejności, na przykład {“weekly_order”: 10, “global_cap”: 1000}. Wszystkie nieokreślone parametry są automatycznie określane na podstawie atrybutów danych treningowych. Obsługiwane są następujące parametry:
    • global_cap można global_floor użyć razem lub niezależnie, aby zdefiniować możliwą domenę wartości metryk. {“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 prognozowanych danych i nie mogą być używane do zapewniania ścisłych ograniczeń tylko dla prognozowanych wartości.
    • daily_order i weekly_order ustaw kolejność czteroletnich składników sezonowości dziennej i tygodniowej.

Zwraca

Nowy zestaw wierszy zawierających prognozowane dane. Schemat danych wyjściowych będzie zawierać kolumny czasu i grupowania z ich typami bez zmian. Jeśli na przykład kolumna czasu wejściowego ma typ DATE, typ kolumny czasu wyjściowej będzie również mieć wartość DATE. Dla każdej kolumny wartości istnieją trzy kolumny wyjściowe ze wzorcem {v}_forecast, {v}_upperi {v}_lower. Niezależnie od typów wartości wejściowych kolumny wartości prognozowanej są zawsze typem DOUBLE. Tabela danych wyjściowych zawiera tylko przyszłe wartości obejmujące zakres czasu między końcem obserwowanych danych aż do horyzontu.

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

Tabela wejściowa Argumenty Tabela danych wyjściowych
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 tabele nie materializować 0s lub pustych wpisów. Jeśli wartości brakujących wpisów można wywnioskować, na przykład 0, te wartości należy połączyć przed wywołaniem funkcji prognozy. Jeśli wartości są naprawdę brakujące lub nieznane, można je pozostawić jako NULL.

W przypadku bardzo rozrzednionych danych najlepszym rozwiązaniem jest łączenie brakujących wartości lub jawne podanie wartości częstotliwości, aby uniknąć nieoczekiwanych danych wyjściowych z wnioskowania częstotliwości "automatycznej". 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, w którym różne parametry prognozy są stosowane do różnych grup w tabeli wejściowej:

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 identyfikatora kolumny jako argumentu parameters . Dzięki temu użytkownicy mogą przechowywać wcześniej określone parametry JSON w tabeli 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.