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()
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 (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 "kolumny czasu" w plikuobserved
. Do kolumny, do których odwołuje siętime_col
element , powinien mieć wartośćDATE
lubTIMESTAMP
.value_col
jest ciągiem lub tablicą ciągów odwołujących się do kolumn wartości w elemencieobserved
. Kolumny, do których odwołuje się ten argument, powinny być rzutowane naDOUBLE
.group_col
(opcjonalnie) to ciąg lub tablica ciągów reprezentujących kolumny grupy w obiekcieobserved
. 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żnaglobal_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
iweekly_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}_upper
i {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.