Udostępnij przez


Funkcja ai_forecast

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej i jest zgodna z HIPAA.

ai_forecast() jest funkcją o wartości tabeli przeznaczoną 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 (patrz group_col) i do 100 metryk (patrz 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 w formie 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 wielkością, którą można zrzutować na znacznik czasu, reprezentującą prawostronnie 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 "time" w observed. Kolumna, do którą odwołuje się time_col, powinna być DATE lub TIMESTAMP.
  • value_col to ciąg lub tablica ciągów odwołujące się do kolumn wartości w observed. Kolumny, do których odwołuje się ten argument, powinny być podlegające rzutowaniu do typu DOUBLE.
  • group_col (opcjonalnie) to ciąg lub tablica ciągów reprezentujących kolumny grupy w observed. Jeśli zostaną określone kolumny grup, są one używane jako kryteria partycjonowania, a prognozy są generowane niezależnie dla każdej z grup. 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. Prawdopodobieństwo, że przyszłe wartości spadną między prediction_interval_width a {v}_upper, wynosi {v}_lower %.
  • frequency (opcjonalnie) to jednostka czasu lub ciąg aliasu przesunięcia biblioteki pandas określający 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 ułatwiająca, która nie podlega ustawieniom 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 kodowaniem ciągu JSON lub nazwą identyfikatora kolumny reprezentującą parametryzację 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 i global_floor mogą być używane razem lub niezależnie w celu zdefiniowania możliwej domeny 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.
    • Funkcje daily_order i weekly_order ustalają rząd Fouriera 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ściowego będzie również 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 typu 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}'
)

Notatka

ai_forecast nie wstawia zer dla brakujących lub NULL wpisów w tabeli. Jeśli można wywnioskować prawidłowe wartości brakujących wpisów, należy je połączyć przed wywołaniem ai_forecast funkcji. Jeśli wartości są naprawdę brakujące lub nieznane, możesz pozostawić wartości jako NULL lub je usunąć.

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 automatyczne wnioskowanie częstotliwości dla dwóch wpisów odstępujących o 14 dni spowoduje wywnioskowanie częstotliwości "14D", nawet jeśli rzeczywista częstotliwość może być co tydzień z jedną brakującą wartością. Łączenie brakujących wpisów powoduje usunięcie tej niejednoznaczności.

Poniżej przedstawiono przykład, w którym różne parametry prognozy są stosowane do różnych grup w tabeli wejściowej. W przykładzie użyto argumentu parameters jako identyfikatora kolumny. Dzięki temu użytkownicy mogą przechowywać wcześniej określone parametry JSON w tabeli i używać ich ponownie na nowych danych.

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

Ograniczenia

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

  • Domyślna procedura prognozowania to częściowy model liniowy i sezonowości typu Prophet. 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 błędów języka Python. Koniec śladu zawiera rzeczywisty komunikat o błędzie.