Ce tutoriel vous explique comment effectuer des prévisions multivariées sur plusieurs séries temporelles à l'aide de la fonction AI.FORECAST avec le modèle TimesFM 3.0 intégré à BigQuery ML. La prévision multivariée vous aide à améliorer la précision des prévisions en intégrant d'autres variables (covariables) qui influencent la cible.
En spécifiant des colonnes d'identifiants, vous pouvez générer des prévisions pour plusieurs entités distinctes simultanément. Ce tutoriel explique comment prévoir les courses et les tarifs des taxis new-yorkais pour différentes zones de prise en charge en intégrant des données historiques sur la distance des courses, qui constituent une covariable passée.
Objectifs
- Préparez un ensemble de données unifié pour plusieurs séries temporelles.
- Générez des prédictions pour les données de taxi de New York à l'aide de la fonction
AI.FORECASTavec le modèleTimesFM 3.0.
Coûts
Ce tutoriel utilise des composants facturables de Google Cloud, y compris les suivants :
- BigQuery
- BigQuery ML
Pour en savoir plus, consultez les pages Tarifs de BigQuery et Tarifs de BigQuery ML.
Avant de commencer
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Activez l'API BigQuery si elle ne l'est pas déjà.
Rôles requis pour activer les API
Pour activer les API, vous devez disposer de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.Pour les nouveaux projets, l'API BigQuery est automatiquement activée.
Rôles requis
Pour obtenir les autorisations nécessaires pour effectuer les tâches de ce tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants :
-
Créez l'ensemble de données :
Éditeur de données BigQuery (
roles/bigquery.dataEditor) -
Créez le modèle :
- Éditeur de données BigQuery (
roles/bigquery.dataEditor) - Utilisateur de job BigQuery (
roles/bigquery.jobUser)
- Éditeur de données BigQuery (
-
Exécutez l'inférence :
- Éditeur de données BigQuery (
roles/bigquery.dataEditor) - Utilisateur de job BigQuery (
roles/bigquery.jobUser)
- Éditeur de données BigQuery (
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Ces rôles prédéfinis contiennent les autorisations requises pour effectuer les tâches décrites dans ce tutoriel. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Vous devez disposer des autorisations suivantes pour effectuer les tâches décrites dans ce tutoriel :
-
Créez l'ensemble de données :
bigquery.datasets.create -
Créez le modèle :
-
bigquery.jobs.create -
bigquery.models.create -
bigquery.models.getData -
bigquery.models.updateData
-
-
Exécutez l'inférence :
-
bigquery.models.getData -
bigquery.jobs.create
-
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Pour plus d'informations sur les rôles et les autorisations IAM dans BigQuery, consultez la page Présentation d'IAM.Préparer les données d'entrée
Contrairement à d'autres modèles multivariés qui peuvent nécessiter des tables distinctes pour les covariables historiques et futures, la fonction AI.FORECAST avec TimesFM 3.0 attend une seule table ou requête d'entrée.
Pour une prévision de plusieurs séries temporelles, vos données doivent inclure une ou plusieurs colonnes d'identifiants afin de séparer les données en séries temporelles distinctes. Dans cet exemple, une série temporelle contient des données pour le lieu de prise en charge 132 (aéroport JFK) et l'autre série temporelle contient des données pour le lieu de prise en charge 138 (aéroport LaGuardia). Assurez-vous que vos données respectent les exigences suivantes pour chaque série temporelle individuelle :
- Lignes historiques : contiennent des valeurs non nulles pour les codes temporels, les cibles et les covariables passées.
Comme cet exemple n'utilise pas de covariables futures, la requête d'entrée n'a besoin que de fournir des données historiques. Votre tableau d'entrée doit contenir des colonnes avec les données suivantes :
- Date de la course en taxi.
- Lieu de prise en charge : 132 ou 138.
- Nombre de trajets effectués à cette date. Il s'agit d'une colonne cible.
- Montant moyen du tarif à cette date. Il s'agit d'une colonne cible.
- Distance moyenne des trajets effectués à cette date. Il s'agit d'une colonne de covariables passées utilisée dans la prévision.
Prévoir plusieurs séries temporelles multivariées
La requête suivante prévoit le nombre de trajets et le tarif moyen par jour pour les 14 prochains jours pour les zones de prise en charge JFK et LaGuardia. Il définit past_cov_avg_distance comme une fonctionnalité connue uniquement de manière historique. Vous devez fournir l'argument id_cols pour que le modèle sache comment séparer les différentes séries temporelles.
Pour prévoir des données avec le modèle TimesFM 3.0 :
Dans la console Google Cloud , accédez à la page BigQuery.
Dans l'éditeur de requête, collez la requête suivante, puis cliquez sur Exécuter :
SELECT pickup_location_id, FORMAT_DATE("%Y-%m-%d", pickup_date) AS pickup_date, # Extract the forecast value and prediction intervals for the number of trips target target_num_trips.value AS forecasted_num_trips, target_num_trips.prediction_interval_lower_bound AS num_trips_lower, target_num_trips.prediction_interval_upper_bound AS num_trips_upper, # Extract the forecast value and prediction intervals for the average fare target target_avg_fare.value AS forecasted_avg_fare, target_avg_fare.prediction_interval_lower_bound AS avg_fare_lower, target_avg_fare.prediction_interval_upper_bound AS avg_fare_upper FROM AI.FORECAST( ( SELECT DATE(pickup_datetime) AS pickup_date, pickup_location_id, COUNT(*) AS target_num_trips, AVG(fare_amount) AS target_avg_fare, AVG(trip_distance) AS past_cov_avg_distance FROM `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2022` WHERE pickup_datetime >= "2022-01-01" AND pickup_datetime < "2022-04-01" AND pickup_location_id IN ("132", "138") -- JFK and LaGuardia Airports GROUP BY 1, 2 ), model => "TimesFM 3.0", target_cols => ["target_num_trips", "target_avg_fare"], past_covariate_cols => ["past_cov_avg_distance"], timestamp_col => "pickup_date", id_cols => ["pickup_location_id"], horizon => 14 ) ORDER BY pickup_date;
Le résultat ressemble à ce qui suit, avec des valeurs arrondies pour plus de clarté :
+--------------------+-------------+----------------------+-----------------+-----------------+---------------------+----------------+----------------+
| pickup_location_id | pickup_date | forecasted_num_trips | num_trips_lower | num_trips_upper | forecasted_avg_fare | avg_fare_lower | avg_fare_upper |
+--------------------+-------------+----------------------+-----------------+-----------------+---------------------+----------------+----------------+
| 132 | 2022-04-01 | 5240 | 4633 | 5842 | 47 | 46 | 48 |
| 138 | 2022-04-01 | 3451 | 2848 | 4008 | 32 | 31 | 34 |
| ... | ... | ... | ... | ... | ... | ... | ... |
+--------------------+-------------+----------------------+-----------------+-----------------+---------------------+----------------+----------------+
Les résultats indiquent le nombre de trajets prévus et le montant moyen des courses pour les 14 prochains jours dans les zones de prise en charge de JFK et de LaGuardia. Les résultats incluent également les limites inférieure et supérieure d'un intervalle de prédiction de 95% pour chaque valeur prévue.
Effectuer un nettoyage
Pour éviter que les ressources utilisées dans ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.
Supprimer votre projet
- Dans la console Google Cloud , accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Étapes suivantes
- Pour obtenir plus d'informations sur BigQuery ML, consultez la page Présentation de l'IA et du ML dans BigQuery.
- Découvrez comment prévoir une ou plusieurs séries temporelles avec un modèle univarié TimesFM.
- Découvrez comment prévoir des séries temporelles uniques avec un modèle multivarié TimesFM.