Entraîner un modèle de prévision

Cette page vous explique comment entraîner un modèle de prévision à partir d'un ensemble de données tabulaire à l'aide de la console Google Cloud ou de l'API Vertex AI.

Avant de commencer

Avant d'entraîner un modèle de prévision, effectuez les opérations suivantes :

Entraîner un modèle

Console Google Cloud

  1. Dans la section Vertex AI de la console Google Cloud , accédez à la page Ensembles de données.

    Accéder à la page "Ensembles de données"

  2. Cliquez sur le nom de l'ensemble de données que vous souhaitez utiliser pour entraîner votre modèle afin d'ouvrir sa page d'informations.

  3. Si votre type de données utilise des ensembles d'annotations, sélectionnez celui que vous souhaitez utiliser pour ce modèle.

  4. Cliquez sur Entraîner le nouveau modèle.

  5. Sélectionnez Autre.

  6. Sur la page Méthode d'entraînement, configurez les éléments suivants :

    1. Sélectionnez la méthode d'entraînement de modèle. Pour en savoir plus, consultez Méthodes d'entraînement des modèles.

    2. Cliquez sur Continuer.

  7. Sur la page Informations sur le modèle, configurez les éléments suivants :

    1. Saisissez le nom à afficher pour votre nouveau modèle.

    2. Sélectionnez votre colonne cible.

      La colonne cible correspond à la valeur que le modèle prévoit. En savoir plus sur les exigences relatives aux colonnes cibles.

    3. Si vous n'avez pas défini les colonnes Identifiant de la série et Code temporel de votre ensemble de données, sélectionnez-les dès maintenant.

    4. Sélectionnez Précision des données. Sélectionnez Daily si vous souhaitez utiliser la modélisation des effets liés aux jours fériés. Découvrez comment choisir le niveau de précision des données.

    5. Facultatif : Dans le menu déroulant Jours fériés par région, sélectionnez une ou plusieurs régions géographiques pour activer la modélisation des effets liés aux jours fériés. Pendant l'entraînement, Vertex AI crée des caractéristiques catégorielles de jours fériés dans le modèle en fonction de la date figurant dans la colonne Code temporel et des régions géographiques spécifiées. Vous ne pouvez sélectionner cette option que si le paramètre Précision des données est défini sur Daily. Par défaut, la modélisation des effets liés aux jours fériés est désactivée. Pour en savoir plus sur les régions géographiques utilisées pour la modélisation des effets liés aux jours fériés, consultez Jours fériés par région.

    6. Saisissez la fenêtre de contexte et l'horizon de prévision.

      L'horizon de prévision détermine jusqu'à quand le modèle prévoit la valeur cible pour chaque ligne de données d'inférence. L'horizon de prévision est spécifié en unités de précision des données.

      La fenêtre de contexte définit jusqu'où le modèle remonte dans le temps lors de l'entraînement (et des prévisions). En d'autres termes, pour chaque point de données d'entraînement, la fenêtre de contexte détermine jusqu'à quelle période le modèle recherche des schémas prédictifs. La fenêtre de contexte est spécifiée en unités de précision des données.

      En savoir plus

    7. Si vous souhaitez exporter votre ensemble de données de test vers BigQuery, cochez la case Exporter l'ensemble de données de test vers BigQuery et indiquez le nom de la table.

    8. Si vous souhaitez contrôler manuellement votre répartition des données ou configurer la période de prévision, ouvrez les options avancées.

    9. La répartition des données par défaut est chronologique, avec les pourcentages standards 80/10/10. Si vous souhaitez spécifier manuellement les lignes à affecter à une répartition donnée, sélectionnez Manuel et spécifiez la colonne de répartition des données.

      En savoir plus sur les répartitions de données.

    10. Sélectionnez une stratégie de fenêtre glissante afin de générer une période de prévision. La stratégie par défaut est Nombre.

      • Nombre : définissez la valeur du nombre maximal de fenêtres dans la zone de texte fournie.
      • Pas : définissez la valeur de longueur de pas dans la zone de texte fournie.
      • Colonne : sélectionnez le nom de colonne approprié dans le menu déroulant fourni.

      Pour en savoir plus, consultez Stratégies de fenêtre glissante.

    11. Cliquez sur Continuer.

  8. Sur la page Options d'entraînement, configurez les éléments suivants :

    1. Si ce n'est pas déjà fait, cliquez sur Générer les statistiques.

      La génération de statistiques remplit les menus déroulants Transformation.

    2. Examinez votre liste de colonnes et excluez de l'entraînement toutes les colonnes qui ne doivent pas être utilisées pour entraîner le modèle.

      Si vous utilisez une colonne de répartition des données, vous devez l'inclure.

    3. Examinez les transformations sélectionnées pour les caractéristiques incluses et effectuez les mises à jour requises.

      Les lignes contenant des données non valides pour la transformation sélectionnée sont exclues de l'entraînement. En savoir plus sur les transformations.

    4. Pour chaque colonne que vous avez incluse pour l'entraînement, spécifiez le Type de caractéristique en fonction de la relation entre cette caractéristique et sa série temporelle, et si celle-ci est disponible ou non au moment de la prévision. En savoir plus sur le type de caractéristique et la disponibilité.

    5. Si vous souhaitez spécifier une colonne de pondération, modifier votre objectif d'optimisation par défaut ou activer les prévisions hiérarchiques, ouvrez Options avancées.

    6. Facultatif. Si vous souhaitez spécifier une colonne de pondération, sélectionnez-la dans la liste déroulante. En savoir plus sur les colonnes de pondération

    7. Facultatif. Si vous souhaitez sélectionner l'objectif d'optimisation, sélectionnez-le dans la liste. En savoir plus sur les objectifs d'optimisation

    8. Facultatif. Si vous souhaitez utiliser la prévision hiérarchique, sélectionnez Activer les prévisions hiérarchiques. Vous avez le choix entre trois options de regroupement :

      • No grouping
      • Group by columns
      • Group all

      Vous pouvez également choisir de définir les pondérations des pertes agrégées suivantes :

      • Group total weight : ce champ ne peut être défini que si vous sélectionnez l'option Group by columns ou Group all.
      • Temporal total weight.
      • Group temporal total weight : ce champ ne peut être défini que si vous sélectionnez l'option Group by columns ou Group all.

      En savoir plus sur les prévisions hiérarchiques

    9. Cliquez sur Continuer.

  9. Sur la page Options de calcul et tarifs, configurez les éléments suivants :

    1. Saisissez la durée maximale (en heures) d'entraînement du modèle. Ce paramètre vous permet de définir un plafond pour les coûts d'entraînement. Le temps écoulé peut être supérieur à cette valeur, car la création d'un modèle implique d'autres opérations.

      La durée d'entraînement suggérée dépend de la taille de votre horizon de prévision et de vos données d'entraînement. Le tableau ci-dessous contient des exemples de cycles d'entraînement de prévision et la plage de temps nécessaire pour entraîner un modèle de haute qualité.

      Lignes Fonctionnalités Horizon de prévision Durée d'entraînement
      12 millions 10 6 3 à 6 heures
      20 millions 50 13 6 à 12 heures
      16 millions 30 365 24 à 48 heures

      Pour en savoir plus sur la tarification de l'entraînement, consultez la page des tarifs.

    2. Cliquez sur Démarrer l'entraînement.

      L'entraînement du modèle peut prendre plusieurs heures, en fonction de la taille et de la complexité de vos données et de votre budget d'entraînement, le cas échéant. Vous pouvez fermer cet onglet et y revenir plus tard. Vous recevrez un e-mail une fois l'entraînement de votre modèle terminé.

API

Sélectionnez l'onglet correspondant à votre langage ou environnement :

REST

Vous utilisez la commande trainingPipelines.create pour entraîner un modèle.

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • LOCATION : votre région.
  • PROJECT : ID de votre projet.
  • TRAINING_PIPELINE_DISPLAY_NAME : nom à afficher du pipeline d'entraînement créé pour cette opération.
  • TRAINING_TASK_DEFINITION : méthode d'entraînement du modèle.
    • Encodeur dense de séries temporelles (TiDE)
      gs://google-cloud-aiplatform/schema/trainingjob/definition/time_series_dense_encoder_forecasting_1.0.0.yaml
    • Transformateur de fusion temporelle (TFT)
      gs://google-cloud-aiplatform/schema/trainingjob/definition/temporal_fusion_transformer_time_series_forecasting_1.0.0.yaml
    • AutoML (L2L)
      gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_forecasting_1.0.0.yaml
    • Seq2Seq+
      gs://google-cloud-aiplatform/schema/trainingjob/definition/seq2seq_plus_time_series_forecasting_1.0.0.yaml
    Pour en savoir plus, consultez Méthodes d'entraînement des modèles.
  • TARGET_COLUMN : colonne (valeur) que le modèle doit prédire.
  • TIME_COLUMN : colonne de date/heure. En savoir plus
  • TIME_SERIES_IDENTIFIER_COLUMN : colonne de l'identifiant de série temporelle. En savoir plus
  • WEIGHT_COLUMN (facultatif) : colonne de pondération. En savoir plus
  • TRAINING_BUDGET : durée maximale pendant laquelle le modèle doit être entraîné, en millièmes d'heures-nœud (1 000 millièmes d'heures-nœud correspondent à une heure-nœud).
  • GRANULARITY_UNIT : 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. Sélectionnez day si vous souhaitez utiliser la modélisation des effets liés aux jours fériés. Découvrez comment choisir le niveau de précision des données.
  • GRANULARITY_QUANTITY : nombre d'unités de précision qui composent l'intervalle entre les observations dans vos données d'entraînement. Doit être égal à un pour toutes les unités sauf les minutes, pouvant correspondre à 1, 5, 10, 15 ou 30. Découvrez comment choisir le niveau de précision des données.
  • GROUP_COLUMNS : noms de colonne de votre table d'entrée d'entraînement qui identifient le regroupement au niveau de la hiérarchie. La ou les colonnes doivent être "time_series_attribute_columns". En savoir plus
  • GROUP_TOTAL_WEIGHT : pondération de la perte agrégée du groupe par rapport à la perte individuelle. Désactivée si la valeur est définie sur "0.0" ou n'est pas définie. Si la colonne de groupe n'est pas définie, toutes les séries temporelles seront traitées dans le même groupe et agrégées sur toutes les séries temporelles. En savoir plus
  • TEMPORAL_TOTAL_WEIGHT : pondération de la perte agrégée dans le temps par rapport à la perte individuelle. Désactivée si la valeur est définie sur "0.0" ou n'est pas définie. En savoir plus
  • GROUP_TEMPORAL_TOTAL_WEIGHT : pondération de la perte totale (groupe x temps) par rapport à la perte individuelle. Désactivée si la valeur est définie sur "0.0" ou n'est pas définie. Si la colonne de groupe n'est pas définie, toutes les séries temporelles seront traitées dans le même groupe et agrégées sur toutes les séries temporelles. En savoir plus
  • HOLIDAY_REGIONS (facultatif) : vous pouvez sélectionner une ou plusieurs régions géographiques pour activer la modélisation des effets liés aux jours fériés. Pendant l'entraînement, Vertex AI crée des caractéristiques catégorielles de jours fériés dans le modèle en fonction de la date de TIME_COLUMN et des régions géographiques spécifiées. Pour activer cette fonctionnalité, définissez GRANULARITY_UNIT sur day, puis spécifiez une ou plusieurs régions dans le champ HOLIDAY_REGIONS. Par défaut, la modélisation des effets liés aux jours fériés est désactivée. Pour en savoir plus, consultez Jours fériés par région.
  • FORECAST_HORIZON : l'horizon de prévision détermine jusqu'à quand le modèle prévoit la valeur cible pour chaque ligne de données d'inférence. L'horizon de prévision est spécifié en unités de précision des données (GRANULARITY_UNIT). En savoir plus
  • CONTEXT_WINDOW : la fenêtre de contexte définit jusqu'où le modèle remonte dans le temps lors de l'entraînement (et des prévisions). En d'autres termes, pour chaque point de données d'entraînement, la fenêtre de contexte détermine jusqu'à quelle période le modèle recherche des schémas prédictifs. La fenêtre de contexte est spécifiée en unités de précision des données (GRANULARITY_UNIT). En savoir plus
  • OPTIMIZATION_OBJECTIVE : par défaut, Vertex AI minimise la racine carrée de l'erreur quadratique moyenne (RMSE). Si vous souhaitez définir un autre objectif d'optimisation pour votre modèle de prévision, choisissez l'une des options indiquées dan Objectifs d'optimisation pour les modèles de prévision. Si vous choisissez de minimiser la perte de quantiles, vous devez également spécifier une valeur pour QUANTILES.
  • PROBABILISTIC_INFERENCE (facultatif) : si le champ est défini sur true, Vertex AI modélise la distribution de probabilité de la prévision. L'inférence probabiliste peut améliorer la qualité du modèle en gérant les données comportant du bruit et en quantifiant l'incertitude. Si des QUANTILES sont spécifiés, Vertex AI renvoie également les quantiles de la distribution de probabilité. L'inférence probabiliste n'est compatible qu'avec les méthodes d'entraînement Time series Dense Encoder (TiDE) et AutoML (L2L). Elle n'est pas compatible avec les prévisions hiérarchiques ni avec l'objectif d'optimisation minimize-quantile-loss.
  • QUANTILES : quantiles à utiliser pour l'objectif d'optimisation minimize-quantile-loss et l'inférence probabiliste. Fournissez une liste de cinq nombres uniques au maximum, compris entre 0 et 1 (non inclus).
  • TIME_SERIES_ATTRIBUTE_COL : nom ou noms des colonnes qui sont des attributs de série temporelle. En savoir plus
  • AVAILABLE_AT_FORECAST_COL : nom de la ou des colonnes de covariable dont la valeur est connue au moment de la prévision. En savoir plus
  • UNAVAILABLE_AT_FORECAST_COL : nom de la ou des colonnes de covariable dont la valeur est inconnue au moment de la prévision. En savoir plus
  • TRANSFORMATION_TYPE : le type de transformation est fourni pour chaque colonne utilisée pour entraîner le modèle. En savoir plus
  • COLUMN_NAME : nom de la colonne avec le type de transformation spécifié. Chaque colonne utilisée pour entraîner le modèle doit être spécifiée.
  • MODEL_DISPLAY_NAME : nom à afficher du nouveau modèle entraîné.
  • DATASET_ID : ID de l'ensemble de données d'entraînement.
  • Vous pouvez fournir un objet Split pour contrôler votre division des données. Pour en savoir plus sur le contrôle de la répartition des données, consultez Contrôler la répartition des données à l'aide de REST.
  • Vous pouvez fournir un objet windowConfig pour configurer une stratégie de fenêtre glissante afin de générer une période de prévision. Pour en savoir plus, consultez Configurer la stratégie de fenêtre glissante à l'aide de REST.
  • PROJECT_NUMBER : numéro de projet généré automatiquement pour votre projet.

Méthode HTTP et URL :

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/trainingPipelines

Corps JSON de la requête :

{
    "displayName": "TRAINING_PIPELINE_DISPLAY_NAME",
    "trainingTaskDefinition": "TRAINING_TASK_DEFINITION",
    "trainingTaskInputs": {
        "targetColumn": "TARGET_COLUMN",
        "timeColumn": "TIME_COLUMN",
        "timeSeriesIdentifierColumn": "TIME_SERIES_IDENTIFIER_COLUMN",
        "weightColumn": "WEIGHT_COLUMN",
        "trainBudgetMilliNodeHours": TRAINING_BUDGET,
        "dataGranularity": {"unit": "GRANULARITY_UNIT", "quantity": GRANULARITY_QUANTITY},
        "hierarchyConfig": {"groupColumns": GROUP_COLUMNS, "groupTotalWeight": GROUP_TOTAL_WEIGHT, "temporalTotalWeight": TEMPORAL_TOTAL_WEIGHT, "groupTemporalTotalWeight": GROUP_TEMPORAL_TOTAL_WEIGHT}
        "holidayRegions" : ["HOLIDAY_REGIONS_1", "HOLIDAY_REGIONS_2", ...]
        "forecast_horizon": FORECAST_HORIZON,
        "context_window": CONTEXT_WINDOW,
        "optimizationObjective": "OPTIMIZATION_OBJECTIVE",
        "quantiles": "QUANTILES",
        "enableProbabilisticInference": "PROBABILISTIC_INFERENCE",
        "time_series_attribute_columns": ["TIME_SERIES_ATTRIBUTE_COL_1", "TIME_SERIES_ATTRIBUTE_COL_2", ...]
        "available_at_forecast_columns": ["AVAILABLE_AT_FORECAST_COL_1", "AVAILABLE_AT_FORECAST_COL_2", ...]
        "unavailable_at_forecast_columns": ["UNAVAILABLE_AT_FORECAST_COL_1", "UNAVAILABLE_AT_FORECAST_COL_2", ...]
        "transformations": [
            {"TRANSFORMATION_TYPE_1":  {"column_name" : "COLUMN_NAME_1"} },
            {"TRANSFORMATION_TYPE_2":  {"column_name" : "COLUMN_NAME_2"} },
            ...
    },
    "modelToUpload": {"displayName": "MODEL_DISPLAY_NAME"},
    "inputDataConfig": {
      "datasetId": "DATASET_ID",
    }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/trainingPipelines/TRAINING_PIPELINE_ID",
  "displayName": "myModelName",
  "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tabular_1.0.0.yaml",
  "modelToUpload": {
    "displayName": "myModelName"
  },
  "state": "PIPELINE_STATE_PENDING",
  "createTime": "2020-08-18T01:22:57.479336Z",
  "updateTime": "2020-08-18T01:22:57.479336Z"
}

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.

def create_training_pipeline_forecasting_time_series_dense_encoder_sample(
    project: str,
    display_name: str,
    dataset_id: str,
    location: str = "us-central1",
    model_display_name: str = "my_model",
    target_column: str = "target_column",
    time_column: str = "date",
    time_series_identifier_column: str = "time_series_id",
    unavailable_at_forecast_columns: List[str] = [],
    available_at_forecast_columns: List[str] = [],
    forecast_horizon: int = 1,
    data_granularity_unit: str = "week",
    data_granularity_count: int = 1,
    training_fraction_split: float = 0.8,
    validation_fraction_split: float = 0.1,
    test_fraction_split: float = 0.1,
    budget_milli_node_hours: int = 8000,
    timestamp_split_column_name: str = "timestamp_split",
    weight_column: str = "weight",
    time_series_attribute_columns: List[str] = [],
    context_window: int = 0,
    export_evaluated_data_items: bool = False,
    export_evaluated_data_items_bigquery_destination_uri: Optional[str] = None,
    export_evaluated_data_items_override_destination: bool = False,
    quantiles: Optional[List[float]] = None,
    enable_probabilistic_inference: bool = False,
    validation_options: Optional[str] = None,
    predefined_split_column_name: Optional[str] = None,
    sync: bool = True,
):
    aiplatform.init(project=project, location=location)

    # Create training job
    forecasting_tide_job = aiplatform.TimeSeriesDenseEncoderForecastingTrainingJob(
        display_name=display_name,
        optimization_objective="minimize-rmse",
    )

    # Retrieve existing dataset
    dataset = aiplatform.TimeSeriesDataset(dataset_id)

    # Run training job
    model = forecasting_tide_job.run(
        dataset=dataset,
        target_column=target_column,
        time_column=time_column,
        time_series_identifier_column=time_series_identifier_column,
        unavailable_at_forecast_columns=unavailable_at_forecast_columns,
        available_at_forecast_columns=available_at_forecast_columns,
        forecast_horizon=forecast_horizon,
        data_granularity_unit=data_granularity_unit,
        data_granularity_count=data_granularity_count,
        training_fraction_split=training_fraction_split,
        validation_fraction_split=validation_fraction_split,
        test_fraction_split=test_fraction_split,
        predefined_split_column_name=predefined_split_column_name,
        timestamp_split_column_name=timestamp_split_column_name,
        weight_column=weight_column,
        time_series_attribute_columns=time_series_attribute_columns,
        context_window=context_window,
        export_evaluated_data_items=export_evaluated_data_items,
        export_evaluated_data_items_bigquery_destination_uri=export_evaluated_data_items_bigquery_destination_uri,
        export_evaluated_data_items_override_destination=export_evaluated_data_items_override_destination,
        quantiles=quantiles,
        enable_probabilistic_inference=enable_probabilistic_inference,
        validation_options=validation_options,
        budget_milli_node_hours=budget_milli_node_hours,
        model_display_name=model_display_name,
        sync=sync,
    )

    model.wait()

    print(model.display_name)
    print(model.resource_name)
    print(model.uri)
    return model

Contrôler la répartition des données à l'aide de REST

Vous contrôlez la manière dont vos données d'entraînement sont réparties entre les ensembles d'entraînement, de validation et de test. Utilisez une colonne de répartition des données pour spécifier manuellement la répartition des données pour chaque ligne et la fournir en tant que partie d'un objet Split PredefinedSplit dans le inputDataConfig de la requête JSON.

DATA_SPLIT_COLUMN est la colonne contenant les valeurs de répartition des données (TRAIN, VALIDATION, TEST).

"predefinedSplit": {
  "key": DATA_SPLIT_COLUMN
},

En savoir plus sur les répartitions de données

Configurer la stratégie de fenêtre glissante à l'aide de REST

Fournissez un objet windowConfig pour configurer une stratégie de fenêtre glissante afin de générer une période de prévision. La stratégie par défaut est maxCount.

  • Pour utiliser l'option maxCount, ajoutez ce qui suit à l'élément trainingTaskInputs de la requête JSON. MAX_COUNT_VALUE fait référence au nombre maximal de fenêtres.

      "windowConfig": {
        "maxCount": MAX_COUNT_VALUE
      },
      ```
    
  • Pour utiliser l'option strideLength, ajoutez ce qui suit à l'élément trainingTaskInputs de la requête JSON. STRIDE_LENGTH_VALUE fait référence à la valeur de la longueur de pas.

      "windowConfig": {
        "strideLength": STRIDE_LENGTH_VALUE
      },
      ```
    
  • Pour utiliser l'option column, ajoutez ce qui suit à l'élément trainingTaskInputs de la requête JSON. COLUMN_NAME fait référence au nom de la colonne avec les valeurs True ou False.

      "windowConfig": {
        "column": "COLUMN_NAME"
      },
      ```
    

Pour en savoir plus, consultez Stratégies de fenêtre glissante.

Étape suivante