ai_forecast
-Funktion
Gilt für: Databricks SQL
Wichtig
Diese Funktion befindet sich in der Public Preview. Wenden Sie sich an Ihr Databricks-Kontoteam, um sich für die Vorschau zu registrieren.
ai_forecast()
ist eine Tabellenwertfunktion, die zum Extrapolieren von Zeitreihendaten in die Zukunft konzipiert ist. Informationen zu verfügbaren Argumenten zum Konfigurieren dieser Funktion finden Sie unter Argumente.
Anforderung
Pro oder Serverless SQL Warehouse
Syntax
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 '{}'
)
Argumente
ai_forecast()
kann eine beliebige Anzahl von Gruppen (siehe group_col
) und bis zu 100 Metriken (siehe value_col
) innerhalb jeder Gruppe vorhersagen. Die Häufigkeit der Vorhersagen ist für alle Metriken in einer Gruppe identisch, kann aber in verschiedenen Gruppen unterschiedlich sein (siehe frequency
).
Für diese Funktion sind die folgenden Argumente verfügbar:
observed
ist die Tabellenwerteingabe, die als Trainingsdaten für das Prognoseverfahren verwendet wird.- Diese Eingaberelation muss eine Spalte „Zeit“ und eine oder mehrere Spalten „Wert“ enthalten. Die Spalten „Gruppe“ und „Parameter“ sind optional. Alle zusätzlichen Spalten in der Eingaberelation werden ignoriert.
horizon
ist eine Menge, bei der ein Zeitstempel umgewandelt werden kann, und die die rechte exklusive Endzeit der Prognoseergebnisse darstellt. Innerhalb einer Gruppe (siehegroup_col
) umfassen Prognoseergebnisse die Zeit zwischen der letzten Beobachtung und „horizon“. Wenn „horizon“ kleiner als die letzte Beobachtungszeit ist, werden keine Ergebnisse generiert.time_col
ist eine Zeichenfolge, die auf die Spalte „Zeit“ inobserved
verweist. Die Spalte, auf die vontime_col
verwiesen wird, sollte einDATE
oder einTIMESTAMP
sein.value_col
ist eine Zeichenfolge oder ein Array von Zeichenfolgen, die auf Spalten „Wert“ inobserved
verweisen. Die Spalten, auf die dieses Argument verweist, sollten inDOUBLE
umwandelbar sein.group_col
(optional) ist eine Zeichenfolge oder ein Array von Zeichenfolgen, die die Spalten „Gruppe“ inobserved
darstellen. Wenn angegeben, werden „Gruppe“-Spalten als Partitionierungskriterien verwendet, und für jede Gruppe werden unabhängig voneinander Prognosen generiert. Wenn nicht angegeben, werden die vollständigen Eingabedaten als einzelne Gruppe behandelt.prediction_interval_width
(optional) ist ein Wert zwischen 0 und 1, der die Breite des Vorhersageintervalls darstellt. Zukünftige Werte haben eine Wahrscheinlichkeit vonprediction_interval_width
%, zwischen{v}_upper
und{v}_lower
zu liegen.frequency
(optional) ist eine Zeiteinheit oder Pandas-Offset-Aliaszeichenfolge, die die Zeitgranularität der Prognoseergebnisse angibt. Wenn nicht angegeben, wird automatisch für jede Gruppe unabhängig die Prognosegranularität abgeleitet. Wenn ein Frequenzwert angegeben wird, wird er auch auf alle Gruppen angewendet.- Die abgeleitete Frequenz innerhalb einer Gruppe ist der Modus der aktuellsten Beobachtungen. Dies ist ein Vorgang für die Benutzerfreundlichkeit, der vom Benutzer nicht optimiert werden kann.
- Beispielsweise führt eine Zeitreihe mit 99 „Montagen“ und 1 „Dienstag“ dazu, dass die abgeleitete Frequenz „Woche“ ist.
seed
(optional) ist eine Zahl, die zum Initialisieren pseudozufälliger Zahlen-Generatoren verwendet wird, die in der Prognoseprozedur verwendet werden.parameters
(optional) ist eine als Zeichenfolge verschlüsselte JSON-Datei oder der Name eines Spaltenbezeichners, der die Parametrisierung der Prognoseprozedur darstellt. Eine Kombination von Parametern kann in beliebiger Reihenfolge angegeben werden, z. B.{“weekly_order”: 10, “global_cap”: 1000}
. Alle nicht angegebenen Parameter werden automatisch basierend auf den Attributen der Trainingsdaten bestimmt. Die folgenden Parameter werden unterstützt:global_cap
undglobal_floor
können zusammen oder unabhängig voneinander verwendet werden, um die mögliche Domäne der Metrikwerte zu definieren.{“global_floor”: 0}
kann z. B. verwendet werden, um eine Metrik wie „Kosten“ immer positiv einzuschränken. Diese gelten global für die Trainingsdaten und die prognostizierten Daten und können nicht verwendet werden, um nur enge Einschränkungen für die vorhergesagten Werte bereitzustellen.daily_order
undweekly_order
legen die Fourierreihenfolge der täglichen und wöchentlichen Saisonalitätskomponenten fest.
Gibt zurück
Hierbei handelt es sich um eine neue Gruppe von Zeilen, die die prognostizierten Daten enthalten. Das Ausgabeschema enthält die Spalten „Zeit“ und „Gruppe“ mit ihren unveränderten Typen. Wenn z. B. die Spalte „Eingabezeit“ den Typ DATE
hat, wird der Spaltentyp der „Ausgabezeit“ ebenfalls DATE
sein. Für jede Spalte „Wert“ gibt es drei Ausgabespalten mit den Mustern {v}_forecast
, {v}_upper
und {v}_lower
. Unabhängig von den Eingabewerttypen sind die Spalten für prognostizierte Werte immer vom Typ DOUBLE
. Die Ausgabetabelle enthält nur zukünftige Werte, die den Zeitraum zwischen dem Ende der beobachteten Daten bis zu „horizon“ umfassen.
Unten finden Sie sich einige Beispiele für die Von AI_FORECAST durchgeführte Schema-Ableitung:
Eingabetabelle | Argumente | Ausgabetabelle |
---|---|---|
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 |
Beispiele
Das folgende Beispiel prognostiziert bis zu einem angegebenen Datum:
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'
)
Nachfolgend sehen Sie ein komplexeres Beispiel:
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}'
)
Beachten Sie, dass Tabellen häufig keine 0 oder leere Einträge materialisieren. Wenn die Werte der fehlenden Einträge abgeleitet werden können, z. B. 0
, sollten diese Werte vor dem Aufrufen der Prognosefunktion zusammengefügt werden. Wenn die Werte wirklich fehlen oder unbekannt sind, können sie als NULL
verbleiben.
Bei Daten mit geringer Dichte ist es eine bewährte Methode, fehlende Werte zusammenzufügen oder explizit einen Frequenzwert bereitzustellen, um unerwartete Ausgaben von der Frequenzableitung „automatisch“ zu vermeiden. Beispielsweise wird die Frequenzableitung „automatisch“ für zwei Einträge im Abstand von 14 Tagen eine Frequenz von „14D“ ableiten, auch wenn die tatsächliche Frequenz wöchentlich mit 1 fehlenden Wert ist. Durch das Zusammenfügen der fehlenden Einträge wird diese Mehrdeutigkeit entfernt.
Abschließend sehen Sie ein Beispiel, in dem verschiedene Prognoseparameter auf verschiedene Gruppen in der Eingabetabelle angewendet werden:
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'
)
Ein Spaltenbezeichner wird als parameters
-Argument verwendet. Auf diese Weise können Benutzer zuvor ermittelte JSON-Parameterdateien in einer Tabelle speichern und für neue Daten wiederverwenden.
Begrenzungen
Die folgenden Einschränkungen gelten während der Vorschau:
- Das Standardprognoseverfahren ist ein stückweise lineares Saisonalitätsmodell ähnlich Prophet. Dies ist das einzige verfügbare unterstützte Prognoseverfahren.
- Fehlermeldungen werden über die Python UDTF-Engine übermittelt und enthalten Python-Zurückverfolgungsinformationen. Das Ende der Zurückverfolgung enthält die tatsächliche Fehlermeldung.