Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja
Dotyczy:
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:
-
observedto 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.
-
horizonjest wielkością, którą można zrzutować na znacznik czasu, reprezentującą prawostronnie wyłączny czas zakończenia wyników prognozowania. W grupie (patrzgroup_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_colto ciąg odwołujący się do kolumny "time" wobserved. Kolumna, do którą odwołuje siętime_col, powinna byćDATElubTIMESTAMP. -
value_colto ciąg lub tablica ciągów odwołujące się do kolumn wartości wobserved. Kolumny, do których odwołuje się ten argument, powinny być podlegające rzutowaniu do typuDOUBLE. -
group_col(opcjonalnie) to ciąg lub tablica ciągów reprezentujących kolumny grupy wobserved. 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ędzyprediction_interval_widtha{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_capiglobal_floormogą 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_orderiweekly_orderustalają 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: 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 |
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.