Funkcja ai_forecast
Dotyczy: 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 (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_col
to ciąg odwołujący się do ciągu "time column" wobserved
. column, do których odwołuje siętime_col
, powinny byćDATE
lubTIMESTAMP
. -
value_col
jest ciągiem lub tablicą ciągów odwołującą się do wartości columns wobserved
. columns przywoływane przez ten argument powinno zostać przekonwertowane naDOUBLE
. -
group_col
(opcjonalnie) to ciąg lub tablica ciągów reprezentujących grupę columns wobserved
. 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ństwoprediction_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
iglobal_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
iweekly_order
set 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}_upper
i {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.