Prévoir une seule série temporelle avec un modèle multivarié


Ce tutoriel vous explique comment utiliser un modèle de séries temporelles multivariées pour prévoir la valeur future d'une colonne donnée, en fonction de la valeur historique de plusieurs éléments d'entrée.

Ce tutoriel prévoit une seule série temporelle. Les valeurs de prévision sont calculées une fois pour chaque point temporel des données d'entrée.

Ce tutoriel utilise les données de l'ensemble de données public bigquery-public-data.epa_historical_air_quality. Cet ensemble de données contient des informations quotidiennes sur les particules en suspension (PM2,5), la température et la vitesse du vent, collectées dans plusieurs villes américaines.

Objectifs

Ce tutoriel vous guide à travers les tâches suivantes:

  • Créer un modèle de séries temporelles pour prévoir les valeurs de PM2,5 à l'aide de l'instruction CREATE MODEL.
  • Évaluer les informations de la moyenne mobile intégrée autorégressive (ARIMA) dans le modèle à l'aide de la fonction ML.ARIMA_EVALUATE.
  • Inspecter les coefficients du modèle à l'aide de la fonction ML.ARIMA_COEFFICIENTS
  • Récupération des valeurs de PM2,5 prévues à partir du modèle à l'aide de la fonction ML.FORECAST.
  • Évaluer la justesse du modèle à l'aide de la fonction ML.EVALUATE.
  • Récupérer des composants de la série temporelle, tels que la saisonnalité, la tendance et les attributions de caractéristiques, à l'aide de la fonction ML.EXPLAIN_FORECAST. Vous pouvez inspecter ces composants de série temporelle afin d'expliquer les valeurs prévues.

Coûts

Ce tutoriel utilise des composants facturables de Google Cloud, y compris :

  • BigQuery
  • BigQuery ML

Pour plus d'informations sur les coûts de BigQuery, consultez la page Tarifs de BigQuery.

Pour en savoir plus sur les coûts associés à BigQuery ML, consultez la page Tarifs de BigQuery ML.

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. BigQuery est automatiquement activé dans les nouveaux projets. Pour activer BigQuery dans un projet préexistant, accédez à .

    Enable the BigQuery API.

    Enable the API

Autorisations requises

  • Pour créer l'ensemble de données, vous devez disposer de l'autorisation IAM bigquery.datasets.create.
  • Pour créer la ressource de connexion, vous devez disposer des autorisations suivantes :

    • bigquery.connections.create
    • bigquery.connections.get
  • Pour créer le modèle, vous avez besoin des autorisations suivantes :

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.connections.delegate
  • Pour exécuter une inférence, vous devez disposer des autorisations suivantes :

    • bigquery.models.getData
    • bigquery.jobs.create

Pour plus d'informations sur les rôles et les autorisations IAM dans BigQuery, consultez la page Présentation d'IAM.

Créer un ensemble de données

Vous allez créer un ensemble de données BigQuery pour stocker votre modèle de ML :

  1. Dans la console Google Cloud, accédez à la page "BigQuery".

    Accéder à la page "BigQuery"

  2. Dans le volet Explorateur, cliquez sur le nom de votre projet.

  3. Cliquez sur Afficher les actions > Créer un ensemble de données.

    Créer l'ensemble de données

  4. Sur la page Créer un ensemble de données, procédez comme suit :

    • Dans le champ ID de l'ensemble de données, saisissez bqml_tutorial.

    • Pour Type d'emplacement, sélectionnez Multirégional, puis sélectionnez US (plusieurs régions aux États-Unis).

      Les ensembles de données publics sont stockés dans l'emplacement multirégional US. Par souci de simplicité, stockez votre ensemble de données dans le même emplacement.

    • Conservez les autres paramètres par défaut, puis cliquez sur Créer un ensemble de données.

      Créer une page d'ensemble de données

Créer une table de données d'entrée

Créez un tableau de données que vous pourrez utiliser pour entraîner et évaluer le modèle. Cette table combine les colonnes de plusieurs tables de l'ensemble de données bigquery-public-data.epa_historical_air_quality afin de fournir des données météorologiques quotidiennes. Vous créez également les colonnes suivantes à utiliser comme variables d'entrée pour le modèle:

  • date : date de l'observation
  • pm25 : concentration moyenne de particules fines PM2,5 enregistrée chaque jour
  • wind_speed : vitesse moyenne du vent enregistrée chaque jour
  • temperature : température la plus élevée enregistrée chaque jour

Dans la requête GoogleSQL suivante, la clause FROM bigquery-public-data.epa_historical_air_quality.*_daily_summary indique que vous interrogez les tables *_daily_summary de l'ensemble de données epa_historical_air_quality. Ces tables sont des tables partitionnées.

Pour créer le tableau de données d'entrée, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, collez la requête suivante, puis cliquez sur Exécuter:

    CREATE TABLE `bqml_tutorial.seattle_air_quality_daily`
    AS
    WITH
      pm25_daily AS (
        SELECT
          avg(arithmetic_mean) AS pm25, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.pm25_nonfrm_daily_summary`
        WHERE
          city_name = 'Seattle'
          AND parameter_name = 'Acceptable PM2.5 AQI & Speciation Mass'
        GROUP BY date_local
      ),
      wind_speed_daily AS (
        SELECT
          avg(arithmetic_mean) AS wind_speed, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.wind_daily_summary`
        WHERE
          city_name = 'Seattle' AND parameter_name = 'Wind Speed - Resultant'
        GROUP BY date_local
      ),
      temperature_daily AS (
        SELECT
          avg(first_max_value) AS temperature, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.temperature_daily_summary`
        WHERE
          city_name = 'Seattle' AND parameter_name = 'Outdoor Temperature'
        GROUP BY date_local
      )
    SELECT
      pm25_daily.date AS date, pm25, wind_speed, temperature
    FROM pm25_daily
    JOIN wind_speed_daily USING (date)
    JOIN temperature_daily USING (date);

Visualiser les données d'entrée

Avant de créer le modèle, vous pouvez éventuellement visualiser vos données de série temporelle d'entrée pour avoir une idée de la distribution. Pour ce faire, utilisez Looker Studio.

Pour visualiser les données de série temporelle:

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, collez la requête suivante, puis cliquez sur Exécuter:

    SELECT
      *
    FROM
      `bqml_tutorial.seattle_air_quality_daily`;
  3. Une fois la requête terminée, cliquez sur Explorer les données > Explorer avec Looker Studio. Looker Studio s'ouvre dans un nouvel onglet. Procédez comme suit dans le nouvel onglet.

  4. Dans Looker Studio, cliquez sur Insérer > Graphique de séries temporelles.

  5. Dans le volet Graphique, sélectionnez l'onglet Configuration.

  6. Dans la section Métrique, ajoutez les champs pm25, temperature et wind_speed, puis supprimez la métrique par défaut Nombre d'enregistrements. Le graphique obtenu ressemble à ceci:

    Graphique montrant la météo au fil du temps.

    En examinant le graphique, vous pouvez voir que la série temporelle d'entrée présente une tendance saisonnière hebdomadaire.

Créer le modèle de série temporelle

Créez un modèle de série temporelle pour prévoir les valeurs de particules, comme représenté par la colonne pm25, à l'aide des valeurs des colonnes pm25, wind_speed et temperature comme variables d'entrée. Entraînez le modèle sur les données de qualité de l'air de la table bqml_tutorial.seattle_air_quality_daily, en sélectionnant les données recueillies entre le 1er janvier 2012 et le 31 décembre 2020.

Dans la requête suivante, la clause OPTIONS(model_type='ARIMA_PLUS_XREG', time_series_timestamp_col='date', ...) indique que vous créez un modèle ARIMA avec des régresseurs externes. L'option auto_arima de l'instruction CREATE MODEL est définie par défaut sur TRUE. L'algorithme auto.ARIMA ajuste donc automatiquement les hyperparamètres du modèle. L'algorithme s'adapte à des dizaines de modèles candidats et choisit le meilleur d'entre eux, qui présente l'AIC (Akaike information criterion) le plus faible. L'option data_frequency des instructions CREATE MODEL est définie par défaut sur AUTO_FREQUENCY. Le processus d'entraînement déduit donc automatiquement la fréquence des données de la série temporelle d'entrée.

Pour créer le modèle, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, collez la requête suivante, puis cliquez sur Exécuter:

    CREATE OR REPLACE
      MODEL
        `bqml_tutorial.seattle_pm25_xreg_model`
      OPTIONS (
        MODEL_TYPE = 'ARIMA_PLUS_XREG',
        time_series_timestamp_col = 'date',  # Identifies the column that contains time points
        time_series_data_col = 'pm25')       # Identifies the column to forecast
    AS
    SELECT
      date,                                  # The column that contains time points
      pm25,                                  # The column to forecast
      temperature,                           # Temperature input to use in forecasting
      wind_speed                             # Wind speed input to use in forecasting
    FROM
      `bqml_tutorial.seattle_air_quality_daily`
    WHERE
      date
      BETWEEN DATE('2012-01-01')
      AND DATE('2020-12-31');

    L'exécution de la requête prend environ 20 secondes, après quoi le modèle seattle_pm25_xreg_model apparaît dans le volet Explorer. Étant donné que la requête utilise une instruction CREATE MODEL pour créer un modèle, les résultats de la requête ne sont pas affichés.

Évaluer les modèles candidats

Évaluez les modèles de séries temporelles à l'aide de la fonction ML.ARIMA_EVALUATE. La fonction ML.ARIMA_EVALUATE affiche les métriques d'évaluation de tous les modèles candidats évalués lors du processus de réglage automatique des hyperparamètres.

Pour évaluer le modèle, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, collez la requête suivante, puis cliquez sur Exécuter:

    SELECT
     *
    FROM
     ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);

    Le résultat doit ressembler à ce qui suit :

    Métriques d'évaluation du modèle de série temporelle.

    Les colonnes de sortie non_seasonal_p, non_seasonal_d, non_seasonal_q et has_drift définissent un modèle ARIMA dans le pipeline d'entraînement. Les colonnes de sortie log_likelihood, AIC et variance sont pertinentes pour le processus d'ajustement du modèle ARIMA.

    L'algorithme auto.ARIMA utilise le test KPSS pour déterminer la meilleure valeur pour non_seasonal_d, qui est 1 dans ce cas. Lorsque non_seasonal_d est 1, l'algorithme auto.ARIMA entraîne 42 modèles ARIMA candidats différents en parallèle. Dans cet exemple, les 42 modèles candidats sont valides. La sortie contient donc 42 lignes, une pour chaque modèle ARIMA candidat. Si certains des modèles ne sont pas valides, ils sont exclus de la sortie. Ces modèles candidats sont renvoyés par ordre croissant de l'AIC. Le modèle de la première ligne présente l'AIC le plus bas, et il est considéré comme le meilleur modèle. Le meilleur modèle est enregistré en tant que modèle final et est utilisé lorsque vous appelez des fonctions telles que ML.FORECAST sur le modèle.

    La colonne seasonal_periods contient des informations sur la tendance saisonnière identifiée dans les données de la série temporelle. Il n'a rien à voir avec la modélisation ARIMA. Par conséquent, il présente la même valeur sur toutes les lignes de sortie. Il indique une tendance hebdomadaire, ce qui correspond aux résultats que vous avez obtenus si vous avez choisi de visualiser les données d'entrée.

    Les colonnes has_holiday_effect, has_spikes_and_dips et has_step_changes fournissent des informations sur les données de série temporelle d'entrée et ne sont pas liées à la modélisation ARIMA. Ces colonnes sont renvoyées, car la valeur de l'option decompose_time_series dans l'instruction CREATE MODEL est TRUE. Ces colonnes ont également les mêmes valeurs pour toutes les lignes de sortie.

    La colonne error_message indique les erreurs qui se sont produites lors du processus d'ajustement auto.ARIMA. Cela peut s'expliquer par le fait que les colonnes non_seasonal_p, non_seasonal_d, non_seasonal_q et has_drift sélectionnées ne peuvent pas stabiliser la série temporelle. Pour récupérer le message d'erreur de tous les modèles candidats, définissez l'option show_all_candidate_models sur TRUE lorsque vous créez le modèle.

    Pour en savoir plus sur les colonnes de sortie, consultez la section Fonction ML.ARIMA_EVALUATE.

Inspecter les coefficients du modèle

Inspectez les coefficients du modèle de série temporelle à l'aide de la fonction ML.ARIMA_COEFFICIENTS.

Pour récupérer les coefficients du modèle, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, collez la requête suivante, puis cliquez sur Exécuter:

    SELECT
     *
    FROM
     ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);

    Le résultat doit ressembler à ce qui suit :

    Coefficients du modèle de série temporelle.

    La colonne de sortie ar_coefficients affiche les coefficients de modèle de la partie autorégressive (AR) du modèle ARIMA. De même, la colonne de sortie ma_coefficients affiche les coefficients de modèle de la partie moyenne mobile (MA) du modèle ARIMA. Ces deux colonnes contiennent des valeurs de tableau, dont la longueur est respectivement égale à non_seasonal_p et non_seasonal_q. Dans la sortie de la fonction ML.ARIMA_EVALUATE, vous avez vu que le meilleur modèle a une valeur non_seasonal_p de 0 et une valeur non_seasonal_q de 5. Par conséquent, dans la sortie ML.ARIMA_COEFFICIENTS, la valeur ar_coefficients est un tableau vide et la valeur ma_coefficients est un tableau à cinq éléments. La valeur intercept_or_drift correspond au terme constant dans le modèle ARIMA.

    Les colonnes de sortie processed_input, weight et category_weights indiquent les pondérations de chaque caractéristique et l'interception dans le modèle de régression linéaire. Si la caractéristique est une caractéristique numérique, la pondération se trouve dans la colonne weight. Si la caractéristique est une caractéristique catégorielle, la valeur category_weights est un tableau de valeurs de structure, où chaque valeur de structure contient le nom et le poids d'une catégorie donnée.

    Pour en savoir plus sur les colonnes de sortie, consultez la section Fonction ML.ARIMA_COEFFICIENTS.

Utiliser le modèle pour prévoir des données

Prévoyez les valeurs futures de la série temporelle à l'aide de la fonction ML.FORECAST.

Dans la requête GoogleSQL suivante, la clause STRUCT(30 AS horizon, 0.8 AS confidence_level) indique que la requête prévoit 30 points temporels futurs et génère un intervalle de prédiction avec un niveau de confiance de 80 %.

Pour prévoir des données avec le modèle, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, collez la requête suivante, puis cliquez sur Exécuter:

    SELECT
      *
    FROM
      ML.FORECAST(
        MODEL `bqml_tutorial.seattle_pm25_xreg_model`,
        STRUCT(30 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            date,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ));

    Le résultat doit ressembler à ce qui suit :

    Résultats de prévision du modèle de série temporelle.

    Les lignes de sortie sont triées par ordre chronologique en fonction de la valeur de la colonne forecast_timestamp. Dans les prévisions de séries temporelles, l'intervalle de prédiction, représenté par les valeurs des colonnes prediction_interval_lower_bound et prediction_interval_upper_bound, est aussi important que la valeur de la colonne forecast_value. La valeur forecast_value correspond au point central de l'intervalle de prédiction. L'intervalle de prédiction dépend des valeurs des colonnes standard_error et confidence_level.

    Pour en savoir plus sur les colonnes de sortie, consultez la section Fonction ML.FORECAST.

Évaluer la précision des prévisions

Évaluez la précision des prévisions du modèle à l'aide de la fonction ML.EVALUATE.

Dans la requête GoogleSQL suivante, la deuxième instruction SELECT fournit les données avec les caractéristiques futures, qui sont utilisées pour prévoir les valeurs futures à comparer aux données réelles.

Pour évaluer la justesse du modèle, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, collez la requête suivante, puis cliquez sur Exécuter:

    SELECT
      *
    FROM
      ML.EVALUATE(
        MODEL `bqml_tutorial.seattle_pm25_xreg_model`,
        (
          SELECT
            date,
            pm25,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ),
        STRUCT(
          TRUE AS perform_aggregation,
          30 AS horizon));

    Les résultats doivent ressembler à ce qui suit:

    Métriques d'évaluation du modèle.

    Pour en savoir plus sur les colonnes de sortie, consultez la section Fonction ML.EVALUATE.

Expliquer les résultats des prévisions

Vous pouvez obtenir des métriques d'explicabilité en plus des données de prévision à l'aide de la fonction ML.EXPLAIN_FORECAST. La fonction ML.EXPLAIN_FORECAST prédit les valeurs futures des séries temporelles et renvoie également tous les composants distincts de la série temporelle.

Comme la fonction ML.FORECAST, la clause STRUCT(30 AS horizon, 0.8 AS confidence_level) utilisée dans la fonction ML.EXPLAIN_FORECAST indique que la requête prévoit 30 points temporels futurs et génère un intervalle de prédiction avec un indice de confiance de 80 %.

Pour expliquer les résultats du modèle, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, collez la requête suivante, puis cliquez sur Exécuter:

    SELECT
      *
    FROM
      ML.EXPLAIN_FORECAST(
        MODEL `bqml_tutorial.seattle_pm25_xreg_model`,
        STRUCT(30 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            date,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ));

    Le résultat doit ressembler à ce qui suit :

    Les neuf premières colonnes de sortie des données et des explications de prévision. Colonnes de sortie 10 à 17 des données et des explications de prévision. Les six dernières colonnes de sortie des données et des explications de prévision.

    Les lignes de sortie sont triées chronologiquement par la valeur de la colonne time_series_timestamp.

    Pour en savoir plus sur les colonnes de sortie, consultez la section Fonction ML.EXPLAIN_FORECAST.

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

  • Supprimez le projet que vous avez créé.
  • Ou conservez le projet et supprimez l'ensemble de données.

Supprimer l'ensemble de données

Si vous supprimez votre projet, tous les ensembles de données et toutes les tables qui lui sont associés sont également supprimés. Si vous préférez réutiliser le projet, vous pouvez supprimer l'ensemble de données que vous avez créé dans ce tutoriel :

  1. Si nécessaire, ouvrez la page BigQuery dans Cloud Console.

    Accéder à BigQuery

  2. Dans le panneau de navigation, cliquez sur l'ensemble de données bqml_tutorial que vous avez créé.

  3. Cliquez sur Delete dataset (Supprimer l'ensemble de données) dans la partie droite de la fenêtre. Cette action supprime l'ensemble de données, la table et toutes les données.

  4. Dans la boîte de dialogue Supprimer l'ensemble de données, confirmez la commande de suppression en saisissant le nom de votre ensemble de données (bqml_tutorial), puis cliquez sur Supprimer.

Supprimer votre projet

Pour supprimer le projet :

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Étape suivante