Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
Databricks SQL
Wichtig
Diese Funktionalität befindet sich in Public Preview und ist HIPAA-konform.
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:
-
observedist 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.
-
horizonist eine Menge, bei der ein Zeitstempel umgewandelt werden kann und die die exklusive rechte 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_colist eine Zeichenfolge, die auf die Spalte „Zeit“ inobservedverweist. Die Spalte, auf die vontime_colverwiesen wird, sollte einDATEoder einTIMESTAMPsein. -
value_colist eine Zeichenfolge oder ein Array von Zeichenfolgen, die auf Spalten „Wert“ inobservedverweisen. Die Spalten, auf die dieses Argument verweist, sollten inDOUBLEumwandelbar sein. -
group_col(optional) ist eine Zeichenfolge oder ein Array von Zeichenfolgen, die die Spalten „Gruppe“ inobserveddarstellen. 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}_upperund{v}_lowerzu 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_capundglobal_floorkö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_orderundweekly_orderlegen die Fourierreihenfolge der täglichen und wöchentlichen Saisonalitätskomponenten fest.
-
Rückgabe
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 zum Horizontwert umfassen.
Unten finden Sie sich einige Beispiele für die Von AI_FORECAST durchgeführte Schema-Ableitung:
| Eingabetabelle | Argumente | Ausgabetabelle |
|---|---|---|
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 |
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}'
)
Anmerkung
ai_forecast materialisiert 0s nicht für fehlende oder NULL Einträge in der Tabelle. Wenn die richtigen Werte der fehlenden Einträge abgeleitet werden können, sollten sie vor dem Aufrufen der ai_forecast Funktion zusammengekettet werden. Wenn die Werte wirklich fehlen oder unbekannt sind, können Sie die Werte als NULL belassen oder entfernen.
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.
Im Folgenden sehen Sie ein Beispiel, in dem verschiedene Prognoseparameter auf verschiedene Gruppen in der Eingabetabelle angewendet werden. Im Beispiel wird das argument parameters als Spaltenbezeichner verwendet. Auf diese Weise können Benutzer zuvor ermittelte JSON-Parameterdateien in einer Tabelle speichern und für neue Daten wiederverwenden.
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'
)
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.