Función ai_forecast

Se aplica a: casilla marcada como sí Databricks SQL

Importante

Esta funcionalidad está en versión preliminar pública. Póngase en contacto con el equipo de la cuenta de Databricks para participar en la versión preliminar.

La función ai_forecast() es una función con valores de tabla diseñada para extrapolar los datos de series temporales en el futuro. Consulte Argumentos para ver los argumentos disponibles para configurar esta función.

Requisito

Almacenamiento SQL pro o sin servidor

Sintaxis


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 '{}'
)

Argumentos

ai_forecast() puede predecir cualquier número de grupos (consulte group_col) y hasta 100 métricas (consulte value_col) dentro de cada grupo. La frecuencia de previsión es la misma para todas las métricas de un grupo, pero puede ser diferente en distintos grupos (consulte frequency).

Están disponibles los siguientes argumentos para esta función:

  • observed es la entrada con valores de tabla que se usa como datos de entrenamiento para el procedimiento de previsión.
    • Esta relación de entrada debe contener una columna "time" y una o varias columnas "value". Las columnas "Group" y "parameters" son opcionales. Se omiten las columnas adicionales de la relación de entrada.
  • horizon es una cantidad convertible de marca de tiempo que representa la hora de finalización exclusiva de los resultados de previsión. Dentro de un grupo (ver group_col) los resultados de previsión abarcan el tiempo entre la última observación y el horizonte. Si horizon es menor que la última hora de observación, no se generan resultados.
  • time_col es una cadena que hace referencia a la "columna de tiempo" en observed. La columna a la que hace referencia time_col debe ser un DATE o un TIMESTAMP.
  • value_col es una cadena o una matriz de cadenas que hacen referencia a columnas de valor en observed. Las columnas a las que hace referencia este argumento deben convertirse en DOUBLE.
  • group_col (opcional) es una cadena o una matriz de cadenas que representan las columnas de grupo en observed. Si se especifica, las columnas de grupo se usan como criterios de creación de particiones y las previsiones se generan para cada grupo de forma independiente. Si no se especifica, los datos de entrada completos se tratan como un único grupo.
  • prediction_interval_width (opcional) es un valor entre 0 y 1 que representa el ancho del intervalo de predicción. Los valores futuros tienen una probabilidad prediction_interval_width % de estar entre {v}_upper y {v}_lower.
  • frequency (opcional) es una cadena de alias de desplazamiento de pandas o unidad de tiempo que especifica la granularidad de tiempo de los resultados de la previsión. Si no se especifica, la granularidad de la previsión se deduce automáticamente para cada grupo de forma independiente. Si se especifica un valor de frecuencia, se aplica igualmente a todos los grupos.
    • La frecuencia inferida dentro de un grupo es el modo de las observaciones más recientes. Se trata de una operación de conveniencia que el usuario no puede optimizar.
    • Por ejemplo, una serie temporal con 99 "lunes" y 1 "martes" da como resultado que la "semana" sea la frecuencia inferida.
  • seed (opcional) es un número que se usa para inicializar los generadores de números pseudoaleatorios utilizados en el procedimiento de previsión.
  • parameters (opcional) es un JSON con codificación de cadena o el nombre de un identificador de columna que representa la parametrización del procedimiento de previsión. Cualquier combinación de parámetros se puede especificar en cualquier orden, por ejemplo, {“weekly_order”: 10, “global_cap”: 1000}. Los parámetros no especificados se determinan automáticamente en función de los atributos de los datos de entrenamiento. Se admiten los siguientes parámetros:
    • global_cap y global_floor se pueden usar juntos o de forma independiente para definir el dominio posible de los valores de métricas. {“global_floor”: 0}, por ejemplo, se puede usar para restringir una métrica como el costo para que siempre sea positivo. Se aplican globalmente a los datos de entrenamiento y a los datos previstos, y no se pueden usar para proporcionar restricciones estrictas solo en los valores previstos.
    • daily_order y weekly_order establecen el orden fourier de los componentes de estacionalidad diaria y semanal.

Devoluciones

Nuevo conjunto de filas que contienen los datos previstos. El esquema de salida contendrá la hora y las columnas de grupo con sus tipos sin cambios. Por ejemplo, si la columna de hora de entrada tiene el tipo DATE, el tipo de columna de hora de salida también será DATE. Para cada columna de valor hay tres columnas de salida con el patrón {v}_forecast, {v}_upper y {v}_lower. Independientemente de los tipos de valor de entrada, las columnas de valor previsto siempre son de tipo DOUBLE. La tabla de salida solo contiene valores futuros, que abarcan el intervalo de tiempo entre el final de los datos observados hasta el horizonte.

Consulte algunos ejemplos de la inferencia de esquema realizada por AI_FORECAST a continuación:

Input table (Tabla de entrada) Argumentos Tabla de salida
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

Ejemplos

En el ejemplo siguiente se prevé hasta una fecha especificada:


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'
)

A continuación se muestra un ejemplo más complejo:


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}'
)

Tenga en cuenta que es muy común que las tablas no materialicen 0 o entradas vacías. Si los valores de las entradas que faltan se pueden deducir, por ejemplo 0, estos valores se deben fusionar antes de llamar a la función de previsión. Si los valores realmente faltan o se desconocen, se pueden dejar como NULL.

Para los datos muy dispersos, se recomienda fusionar valores que faltan o proporcionar un valor de frecuencia explícitamente para evitar una salida inesperada de la inferencia de frecuencia "automática". Por ejemplo, la inferencia de frecuencia "automática" en dos entradas separadas de 14 días deducirá una frecuencia de "14D", incluso si la frecuencia "real" podría ser semanal con 1 valor que falta. La fusión de las entradas que faltan elimina esta ambigüedad.

Por último, se muestra un ejemplo en el que se aplican distintos parámetros de previsión a distintos grupos de la tabla de entrada:

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'
)

Tenga en cuenta el uso de un identificador de columna como argumento parameters. Esto permite a los usuarios almacenar JSON de parámetros determinados previamente en una tabla y reutilizarlos en nuevos datos.

Limitaciones

Se aplican las siguientes limitaciones durante la versión preliminar:

  • El procedimiento de previsión predeterminado es un modelo lineal y estacionalidad similar a un profeta. Este es el único procedimiento de previsión admitido disponible.
  • Los mensajes de error se entregan a través del motor UDTF de Python y contienen información de seguimiento de Python. El final del seguimiento contiene el mensaje de error real.