Prophet est un modèle de prévision géré par Meta. Consultez l'article sur Prophet pour obtenir des détails sur l'algorithme et la documentation pour en savoir plus sur la bibliothèque.
Comme BigQuery ML ARIMA_PLUS, Prophet tente de décomposer chaque série temporelle en tendances, saisons et jours fériés, afin de produire une prévision à l'aide de l'agrégation des prédictions de ces modèles. Cependant, une différence importante est que BQML ARIMA+ utilise ARIMA pour modéliser le composant de tendance, tandis que Prophet tente d'ajuster une courbe à l'aide d'un modèle logistique ou linéaire par fragments.
Google Cloud propose un pipeline pour l'entraînement d'un modèle Prophet et un autre pour obtenir des prédictions par lot à partir d'un modèle Prophet. Les deux pipelines sont des instances de Vertex AI Pipelines provenant des composants du pipeline Google Cloud (GCPC).
L'intégration de Prophet à Vertex AI vous permet d'effectuer les opérations suivantes :
- Utilisez la répartition des données et les stratégies de fenêtrage de Vertex AI.
- Lire des données à partir de tables BigQuery ou de fichiers CSV stockés dans Cloud Storage. Vertex AI s'attend à ce que chaque ligne ait le même format que Vertex AI Forecasting.
Bien que Prophet soit un modèle multivarié, Vertex AI n'accepte qu'une version univariée de ce modèle.
Pour en savoir plus sur les comptes de service utilisés par ce workflow, consultez la page Comptes de service pour les workflows tabulaires.
API de workflows
Ce workflow utilise les API suivantes :
- Vertex AI
- Dataflow
- BigQuery
- Cloud Storage
Entraîner un modèle avec Prophet
Prophet est conçu pour une seule série temporelle. Vertex AI regroupe les données par ID de série temporelle et entraîne un modèle Prophet pour chaque série temporelle. Le pipeline d'entraînement de modèle effectue un réglage des hyperparamètres à l'aide de la recherche par grille et de la logique intégrée de test de rétropropagation.
Pour accepter plusieurs séries temporelles, le pipeline utilise un job d'entraînement personnalisé et Dataflow pour entraîner plusieurs modèles Prophet en parallèle. Dans l'ensemble, le nombre de modèles entraînés est le produit du nombre de séries temporelles et du nombre d'essais de réglage des hyperparamètres.
L'exemple de code suivant montre comment exécuter un pipeline d'entraînement de modèle Prophet :
job = aiplatform.PipelineJob(
...
template_path=train_job_spec_path,
parameter_values=train_parameter_values,
...
)
job.run(service_account=SERVICE_ACCOUNT)
Le paramètre facultatif service_account
dans job.run()
vous permet de définir le compte de service Vertex AI Pipelines sur le compte de votre choix.
Le pipeline et les valeurs des paramètres sont définis par la fonction suivante.
(
train_job_spec_path,
train_parameter_values,
) = utils.get_prophet_train_pipeline_and_parameters(
...
)
Voici un sous-ensemble de paramètres get_prophet_train_pipeline_and_parameters
:
Nom du paramètre | Type | Définition |
---|---|---|
project |
Chaîne | L'ID de votre projet. |
location |
Chaîne | Votre région. |
root_dir |
Chaîne | Emplacement Cloud Storage pour stocker le résultat. |
target_column |
Chaîne | Colonne (valeur) que le modèle doit prédire. |
time_column |
Chaîne | Colonne Heure. Vous devez spécifier une colonne heure et chaque ligne doit contenir une valeur. La colonne Heure indique l'heure à laquelle une observation donnée a été effectuée. |
time_series_identifier_column |
Chaîne | Colonne de l'identifiant de série temporelle. Vous devez spécifier une colonne d'identifiant de série temporelle et elle doit comporter une valeur pour chaque ligne. La prévision des données d'entraînement comprend généralement plusieurs séries temporelles. L'identifiant indique à Vertex AI dans quelle série temporelle se trouvent les données d'entraînement faisant l'objet d'une observation. Toutes les lignes d'une série temporelle donnée ont la même valeur dans la colonne d'identifiant de la série temporelle. Il est courant d'utiliser l'ID d'un produit, l'identifiant d'un magasin ou une région comme identifiant de série temporelle. Il est possible d'entraîner un modèle de prévision sur une seule série temporelle, avec une valeur identique pour toutes les lignes de la colonne d'identifiant de la série temporelle. Toutefois, Vertex AI est une solution plus adaptée pour les données d'entraînement contenant au moins deux séries temporelles. Pour des résultats optimaux, utilisez au moins 10 séries temporelles pour chaque colonne utilisée pour entraîner le modèle. |
data_granularity_unit |
Chaîne | Unité à utiliser pour la précision de vos données d'entraînement, de l'horizon de prévision et de la fenêtre de contexte. Il peut s'agir de minute , hour , day , week , month ou year . Découvrez comment choisir le niveau de précision des données. |
data_source_csv_filenames |
Chaîne | URI d'un fichier CSV stocké dans Cloud Storage. |
data_source_bigquery_table_path |
Chaîne | URI d'une table BigQuery. |
forecast_horizon |
Entier | L'horizon de prévision détermine jusqu'à quand le modèle prévoit la valeur cible pour chaque ligne de données de prédiction. L'horizon de prévision est spécifié en unités de précision des données. En savoir plus |
optimization_objective |
Chaîne | Objectif d'optimisation du modèle. En savoir plus |
max_num_trials |
Entier | Nombre maximal d'essais de réglage à effectuer par série temporelle. |
Paramètres Dataflow
Voici un sous-ensemble de paramètres get_prophet_train_pipeline_and_parameters
pour la personnalisation Dataflow :
Nom du paramètre | Type | Définition |
---|---|---|
trainer_dataflow_machine_type |
Chaîne | Type de machine Dataflow à utiliser pour l'entraînement. |
trainer_dataflow_max_num_workers |
Entier | Nombre maximal de nœuds de calcul Dataflow à utiliser pour l'entraînement. |
evaluation_dataflow_machine_type |
Chaîne | Type de machine Dataflow à utiliser pour l'évaluation. |
evaluation_dataflow_max_num_workers |
Entier | Nombre maximal de nœuds de calcul Dataflow à utiliser pour l'évaluation. |
dataflow_service_account |
Chaîne | Compte de service personnalisé permettant d'exécuter des tâches Dataflow. La tâche Dataflow peut être configurée pour utiliser des adresses IP privées et un sous-réseau VPC spécifique. Ce paramètre sert de valeur de remplacement pour le compte de service de nœud de calcul Dataflow par défaut. |
Étant donné que les tâches d'entraînement Prophet s'exécutent sur Dataflow, le temps de démarrage initial est de 5 à 7 minutes. Pour réduire un environnement d'exécution supplémentaire, vous pouvez effectuer un scaling vertical ou horizontal. Par exemple, pour effectuer un scaling à la hausse, vous pouvez remplacer le type de machine n1-standard-1
par e2-highcpu-8
. Vous pouvez augmenter le nombre de nœuds de calcul de 1
à 200
pour effectuer un scaling horizontal.
Paramètres de répartition des données
Le pipeline d'entraînement propose les options suivantes pour répartir vos données :
Répartition des données | Description | Paramètres |
---|---|---|
Répartition par défaut | Par défaut, Vertex AI sélectionne de manière aléatoire 80 % des lignes de données pour l'ensemble d'entraînement, 10 % pour l'ensemble de validation et 10 % pour l'ensemble de test. Vertex AI utilise la colonne Heure pour déterminer l'ordre chronologique des lignes de données. | Aucun |
Fractionnement de la fraction | Vertex AI utilise les valeurs que vous fournissez pour partitionner vos données dans l'ensemble d'entraînement, l'ensemble de validation et l'ensemble de test. Vertex AI utilise la colonne Heure pour déterminer l'ordre chronologique des lignes de données. |
|
Répartition par horodatage | Vertex AI utilise les valeurs training_fraction , validation_fraction et test_fraction pour partitionner vos données dans l'ensemble d'entraînement, l'ensemble de validation et l'ensemble de test. Vertex AI utilise la colonne timestamp_split_key pour déterminer l'ordre chronologique des lignes de données. |
|
Répartition manuelle (prédéfinie) | Vertex AI divise les données à l'aide des valeurs TRAIN, VALIDATE ou TEST dans la colonne predefined_split_key . |
|
Vous définissez les paramètres de répartition des données dans get_prophet_train_pipeline_and_parameters
comme suit :
Nom du paramètre | Type | Définition |
---|---|---|
predefined_split_key |
Chaîne | Nom de la colonne contenant les valeurs TRAIN, VALIDATE ou TEST. Définissez cette valeur si vous utilisez une répartition manuelle (prédéfinie). |
training_fraction |
Nombre à virgule flottante | Pourcentage de données à attribuer à l'ensemble d'entraînement. Définissez cette valeur si vous utilisez une division de fraction ou une répartition d'horodatage. |
validation_fraction |
Nombre à virgule flottante | Pourcentage de données à attribuer à l'ensemble de validation. Définissez cette valeur si vous utilisez une division de fraction ou une répartition d'horodatage. |
test_fraction |
Nombre à virgule flottante | Pourcentage de données à attribuer à l'ensemble de test. Définissez cette valeur si vous utilisez une division de fraction ou une répartition d'horodatage. |
timestamp_split_key |
Chaîne | Nom de la colonne contenant les horodatages pour la répartition des données. Définissez cette valeur si vous utilisez une répartition par horodatage. |
Paramètres de fenêtrage
Vertex AI génère des fenêtres de prévision à partir des données d'entrée à l'aide d'une stratégie de fenêtre glissante. Si vous ne définissez pas les paramètres de fenêtrage, Vertex AI utilise la stratégie Count avec la valeur maximale par défaut de 100,000,000
. Le pipeline d'entraînement propose les stratégies de fenêtre glissante suivantes :
Stratégie de fenêtre glissante | Description | Paramètres |
---|---|---|
Nombre |
Le nombre de fenêtres générées par Vertex AI ne doit pas dépasser une valeur maximale fournie par l'utilisateur. Si le nombre de lignes dans l'ensemble de données d'entrée est inférieur au nombre maximal de fenêtres, chaque ligne est utilisée pour générer une fenêtre.
Sinon, Vertex AI effectue un échantillonnage aléatoire pour sélectionner les lignes.
La valeur par défaut pour le nombre maximal de fenêtres est 100,000,000 .
Le nombre maximal de fenêtres ne peut pas dépasser 100,000,000 .
|
window_max_count |
Pas |
Vertex AI utilise une ligne toutes les X lignes d'entrée pour générer une fenêtre, jusqu'à 100 000 000 de fenêtres maximum. Cette option est utile pour les prédictions saisonnières ou périodiques. Par exemple, vous pouvez limiter les prévisions à un seul jour de la semaine en définissant la valeur du pas sur 7 . Cette valeur peut être comprise entre 1 et 1000 .
|
window_stride_length |
Colonne |
Vous pouvez ajouter à vos données d'entrée une colonne dont les valeurs sont True ou False . Vertex AI génère une fenêtre pour chaque ligne d'entrée dont la valeur de colonne est True . Les valeurs True et False peuvent être définies dans n'importe quel ordre, à condition que le nombre total de lignes True soit inférieur à 100,000,000 . Les valeurs booléennes sont préférées, mais les valeurs de chaîne sont également acceptées. Les valeurs de chaîne ne sont pas sensibles à la casse.
|
window_column |
Vous définissez les paramètres de fenêtrage dans get_prophet_train_pipeline_and_parameters
comme suit :
Nom du paramètre | Type | Définition |
---|---|---|
window_column |
Chaîne | Nom de la colonne avec les valeurs True et False . |
window_stride_length |
Entier | Valeur de la longueur du pas. |
window_max_count |
Entier | Nombre maximal de fenêtres. |
Effectuer des prédictions avec Prophet
Le pipeline d'entraînement de modèle pour Prophet de Vertex AI crée un modèle Prophet pour chaque série temporelle dans les données. Le pipeline de prédiction regroupe les données d'entrée par ID de séries temporelles et calcule les prédictions séparément pour chaque série temporelle. Le pipeline dissocie ensuite les résultats de la prédiction pour qu'ils correspondent au format des prévisions Vertex AI.
L'exemple de code suivant montre comment exécuter un pipeline de prédiction Prophet :
job = aiplatform.PipelineJob(
...
template_path=prediction_job_spec_path,
parameter_values=prediction_parameter_values,
...
)
job.run(...)
Le pipeline et les valeurs des paramètres sont définis par la fonction suivante.
(
prediction_job_spec_path,
prediction_parameter_values,
) = utils.get_prophet_prediction_pipeline_and_parameters(
...
)
Voici un sous-ensemble de paramètres get_prophet_prediction_pipeline_and_parameters
:
Nom du paramètre | Type | Définition |
---|---|---|
project |
Chaîne | L'ID de votre projet. |
location |
Chaîne | Votre région. |
model_name |
Chaîne | Nom de la ressource de modèle. Formatez la chaîne comme suit : projects/{project}/locations/{location}/models/{model} . |
time_column |
Chaîne | Colonne Heure. Vous devez spécifier une colonne heure et chaque ligne doit contenir une valeur. La colonne Heure indique l'heure à laquelle une observation donnée a été effectuée. |
time_series_identifier_column |
Chaîne | Colonne de l'identifiant de série temporelle. Vous devez spécifier une colonne d'identifiant de série temporelle et elle doit comporter une valeur pour chaque ligne. La prévision des données d'entraînement comprend généralement plusieurs séries temporelles. L'identifiant indique à Vertex AI dans quelle série temporelle se trouvent les données d'entraînement faisant l'objet d'une observation. Toutes les lignes d'une série temporelle donnée ont la même valeur dans la colonne d'identifiant de la série temporelle. Il est courant d'utiliser l'ID d'un produit, l'identifiant d'un magasin ou une région comme identifiant de série temporelle. Il est possible d'entraîner un modèle de prévision sur une seule série temporelle, avec une valeur identique pour toutes les lignes de la colonne d'identifiant de la série temporelle. Toutefois, Vertex AI est une solution plus adaptée pour les données d'entraînement contenant au moins deux séries temporelles. Pour des résultats optimaux, utilisez au moins 10 séries temporelles pour chaque colonne utilisée pour entraîner le modèle. |
target_column |
Chaîne | Colonne (valeur) que le modèle doit prédire. |
data_source_csv_filenames |
Chaîne | URI d'un fichier CSV stocké dans Cloud Storage. |
data_source_bigquery_table_path |
Chaîne | URI d'une table BigQuery. |
bigquery_destination_uri |
Chaîne | URI de l'ensemble de données de destination souhaité Si cette valeur n'est pas définie, les ressources sont créées sous un nouvel ensemble de données dans le projet. |
machine_type |
Chaîne | Type de machine à utiliser pour la prédiction par lot. |
max_num_workers |
Entier | Nombre maximal de nœuds de calcul à utiliser pour la prédiction par lot. |