Freigeben über


ai_forecast-Funktion

Gilt für: Häkchen 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 (siehe group_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“ in observed verweist. Die Spalte, auf die von time_col verwiesen wird, sollte ein DATE oder ein TIMESTAMP sein.
  • value_col ist eine Zeichenfolge oder ein Array von Zeichenfolgen, die auf Spalten „Wert“ in observed verweisen. Die Spalten, auf die dieses Argument verweist, sollten in DOUBLE umwandelbar sein.
  • group_col (optional) ist eine Zeichenfolge oder ein Array von Zeichenfolgen, die die Spalten „Gruppe“ in observed 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 von prediction_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 und global_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 und weekly_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.