Fonction ai_forecast
S’applique à : Databricks SQL
Important
Cette fonctionnalité n’existe qu’en préversion publique. Contactez l’équipe de votre compte Databricks pour participer à la préversion.
ai_forecast()
est une fonction table conçue pour extrapoler les données de série chronologique dans le futur. Consultez Arguments pour connaître les arguments disponibles pour configurer cette fonction.
Exigence
Entrepôt SQL pro ou serverless
Syntaxe
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 '{}'
)
Arguments
ai_forecast()
peut prévoir n’importe quel nombre de groupes (voir group_col
) et jusqu’à 100 métriques (voir value_col
) au sein de chaque groupe. La fréquence de prévision est la même pour toutes les métriques d’un groupe, mais peut être différente entre différents groupes (voir frequency
).
Les arguments disponibles pour cette fonction sont les suivants :
observed
est l’entrée table-valeur utilisée comme données d’apprentissage pour la procédure de prévisions.- Cette relation d’entrée doit contenir une colonne « heure », ainsi qu’une ou plusieurs colonnes « valeur ». Les colonnes « Groupe » et « paramètres » sont facultatives. Toutes les colonnes supplémentaires de la relation d’entrée sont ignorées.
horizon
est une quantité horodateur-castable représentant l’heure de fin exclusive des résultats de prévisions. Dans un groupe (consultezgroup_col
), les résultats des prévisions étendent le temps entre la dernière observation et l’horizon. Si l’horizon est inférieur à la dernière heure d’observation, aucun résultat n’est généré.time_col
est une chaîne référençant la « colonne heure » dansobserved
. La colonne référencée partime_col
doit être unDATE
ou unTIMESTAMP
.value_col
est une chaîne ou un tableau de chaînes référençant les colonnes de valeur dansobserved
. Les colonnes référencées par cet argument doivent être castables versDOUBLE
.group_col
(facultatif) est une chaîne ou un tableau de chaînes représentant les colonnes de groupe dansobserved
. Si elles sont spécifiées, les colonnes de groupe sont utilisées comme critères de partitionnement et des prévisions générées pour chaque groupe indépendamment. Si elles ne sont pas spécifiées, les données d’entrée complètes sont traitées en tant que groupe unique.prediction_interval_width
(facultatif) est une valeur (comprise entre 0 et 1) représentant la largeur de l’intervalle de prédiction. Les valeurs futures ont une probabilité deprediction_interval_width
% de chute entre{v}_upper
et{v}_lower
.frequency
(facultatif) est une unité de temps ou une chaîne d’alias de décalage pandas spécifiant la granularité temporelle des résultats de prévisions. Si elle n’est pas spécifiée, la granularité de la prévision est déduite automatiquement et indépendamment pour chaque groupe. Si une valeur de la fréquence est spécifiée, elle est appliquée de façon égale à tous les groupes.- La fréquence déduite au sein d’un groupe est le mode des observations les plus récentes. Il s’agit d’une opération pratique et non paramétrable par l’utilisateur.
- Par exemple, une série chronologique avec 99 « lundis » et 1 « mardi » entraîne une fréquence déduite pour la « semaine ».
seed
(facultatif) est un nombre utilisé pour initialiser tous les générateurs pseudo-facultatifs de nombre utilisés dans la procédure de prévisions.parameters
(facultatif) est un JSON encodé en chaîne ou le nom d’un identificateur de colonne qui représente le paramétrage de la procédure de prévisions. Toute combinaison de paramètres peut être spécifiée dans n’importe quel ordre, par exemple{“weekly_order”: 10, “global_cap”: 1000}
. Tous les paramètres non spécifiés sont automatiquement déterminés en fonction des attributs des données de formation. Les paramètres suivants sont pris en charge :global_cap
etglobal_floor
peuvent être utilisés conjointement ou indépendamment pour définir le domaine possible des valeurs de métriques. Par exemple,{“global_floor”: 0}
peut être utilisé pour restreindre une métrique telle que le coût à une valeur positive. Celles-ci s’appliquent de manière globale aux données d’apprentissage et aux données prévues, mais ne peuvent pas être utilisées pour fournir des contraintes strictes sur les valeurs prévues uniquement.daily_order
etweekly_order
définissent l’ordre fourier des composants de saisonnalité quotidienne et hebdomadaire.
Retours
Nouvel ensemble de lignes contenant les données prévues. Le schéma de sortie contient les colonnes temps et groupe avec leurs types inchangés. Par exemple, si la colonne heure d’entrée a le type DATE
, le type de colonne heure de sortie est également DATE
. Pour chaque colonne de valeur, il existe trois colonnes de sortie avec le modèle {v}_forecast
, {v}_upper
et {v}_lower
. Quels que soient les types de valeur d’entrée, les colonnes de valeur prévues sont toujours du type DOUBLE
. La table de sortie contient uniquement les valeurs futures, couvrant la plage de temps entre la fin des données observées et l’horizon.
Consultez quelques exemples d’inférence de schéma effectuée par AI_FORECAST ci-dessous :
Table d’entrée | Arguments | Table de sortie |
---|---|---|
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 |
Exemples
L’exemple suivant effectue des prévisions jusqu’à une date spécifiée :
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'
)
Voici un exemple plus complexe :
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}'
)
Remarquez qu’il est très courant que les tables ne matérialisent pas les entrées de valeur 0 ou vides. Si les valeurs des entrées manquantes peuvent être déduites (par exemple 0
), ces valeurs doivent être fusionnées avant d’appeler la fonction de prévisions. Si les valeurs sont vraiment manquantes ou inconnues, elles peuvent être laissées en tant que NULL
.
Pour les données très éparses, il est recommandé de fusionner les valeurs manquantes ou de fournir explicitement une valeur de fréquence pour éviter une sortie inattendue de l’inférence de fréquence « auto ». Par exemple, l’inférence de fréquence « auto » sur deux entrées à14 jours d’intervalle déduit une fréquence de « 14D », même si la fréquence « réelle » peut être hebdomadaire avec 1 valeur manquante. La fusion des entrées manquantes supprime cette ambiguïté.
Enfin, nous montrons un exemple dans lequel différents paramètres de prévision sont appliqués à différents groupes dans la table d’entrée :
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'
)
Remarquez l’utilisation d’un identificateur de colonne comme argument parameters
. Cela permet aux utilisateurs de stocker les fichiers JSON du paramètre précédemment déterminés dans une table et de les réutiliser sur de nouvelles données.
Limites
Les limitations suivantes s’appliquent pendant la préversion :
- La procédure de prévision par défaut est un modèle saisonnier, mais également linéaire et parcellaire de type prophétique. Il s’agit de la seule procédure de prévision disponible prise en charge.
- Les messages d’erreur sont remis au travers du moteur UDTF Python et contiennent des informations du retour de trace Python. La fin du retour de trace contient le message d’erreur réel.