1. Présentation
Dans cet atelier, vous apprendrez à créer un modèle de prévision de séries temporelles avec TensorFlow, puis à déployer ces modèles avec Vertex AI.
Objectifs de l'atelier
Vous allez apprendre à effectuer les opérations suivantes :
- Transformer des données afin de pouvoir les utiliser dans un modèle de ML
- Explorer et visualiser des données
- Utiliser BigQuery ML pour créer un modèle de prévision de séries temporelles
- Créer un modèle de prévision de séries temporelles avec TensorFlow à l'aide des architectures LSTM et CNN
2. Introduction à la prévision de séries temporelles
Cet atelier de programmation explique comment appliquer des techniques de prévision de séries temporelles à l'aide de Google Cloud Platform. Il ne s'agit pas d'un cours général sur la prévision de séries temporelles, mais une brève présentation des concepts peut être utile à nos utilisateurs.
Données de séries temporelles
Tout d'abord, qu'est-ce qu'une série temporelle ? Il s'agit d'un ensemble de données enregistrées à intervalles réguliers. Un ensemble de données de séries temporelles contient à la fois l'heure et au moins une variable qui en dépend.

Composants
Une série temporelle peut être décomposée en composants :
- Tendance : évolue à la hausse ou à la baisse selon un schéma raisonnablement prévisible
- Saisonnier : se répète sur une période spécifique, comme un jour, une semaine, un mois, une saison, etc.
- Aléatoire : fluctuations résiduelles
Il peut y avoir plusieurs niveaux de saisonnalité. Par exemple, un centre d'appels peut constater une tendance dans le volume d'appels certains jours de la semaine, ainsi que certains mois. Le résidu peut s'expliquer par d'autres variables que le temps.

Stationnarité
Pour obtenir les meilleurs résultats en matière de prévision, les données de séries temporelles doivent être stationnaires, c'est-à-dire que les propriétés statistiques telles que la moyenne et la variance sont constantes dans le temps. Des techniques telles que la différenciation et la suppression de la tendance peuvent être appliquées aux données brutes pour les rendre plus stationnaires.
Par exemple, le graphique ci-dessous de la concentration de CO2 montre une tendance annuelle répétée avec une tendance à la hausse. ( Source)

Après avoir supprimé la tendance linéaire, les données sont plus adaptées à la prévision, car elles ont désormais une moyenne constante.

Utiliser des données de séries temporelles pour le machine learning
Pour utiliser des données de séries temporelles dans un problème de machine learning, elles doivent être transformées afin que les valeurs précédentes puissent être utilisées pour prédire les valeurs futures. Ce tableau montre un exemple de création de variables décalées pour faciliter la prédiction de la cible.

Maintenant que nous avons abordé quelques principes de base, commençons par explorer les données et les prévisions.
3. Configurer votre environnement de notebook
Maintenant que nous avons brièvement présenté les données, configurons notre environnement de développement de modèles.
Étape 1 : Activer les API
Le connecteur BigQuery utilise l'API BigQuery Storage. Recherchez l'API BigQuery Storage dans la console et activez-la si elle est actuellement désactivée.

Étape 2 : Créer un notebook Vertex AI Workbench
Accédez à la section Vertex AI Workbench de la console Cloud, puis cliquez sur Nouveau notebook. Sélectionnez ensuite le dernier type de notebook TensorFlow Enterprise 2.x sans GPU :
Utilisez les options par défaut, puis cliquez sur Créer. Une fois l'instance créée, sélectionnez Ouvrir JupyterLab:

Créez ensuite un notebook Python 3 à partir de JupyterLab :

Étape 3 : Télécharger les supports de l'atelier
Créez une fenêtre de terminal à partir de l'interface JupyterLab : Fichier -> Nouveau -> Terminal.
À partir de là, clonez le matériel source avec cette commande :
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
4. Explorer et visualiser des données
Dans cette section, vous allez effectuer les tâches suivantes :
- Créer une requête qui regroupe les données dans une série temporelle
- Renseigner des valeurs manquantes
- Visualiser des données
- Décomposer les séries temporelles en composants de tendance et saisonniers
Étape 1
Dans Vertex AI Workbench, accédez à training-data-analyst/courses/ai-for-time-series/notebooks et ouvrez 01-explore.ipynb.
Étape 2
Effacez toutes les cellules du notebook (Modifier > Supprimer tous les éléments de sortie), modifiez les paramètres de région, de projet et de bucket dans l'une des premières cellules, puis exécutez les cellules une par une.
Étape 3
Dans cette section, vous avez importé les données et visualisé différentes dimensions. Maintenant que vous avez une image plus claire des données, vous êtes prêt à passer à la modélisation de machine learning à l'aide de ces données.

5. Créer un modèle avec la prévision de séries temporelles BigQuery
Dans cette section, vous allez effectuer les tâches suivantes :
- Importer vos données d'entrée de séries temporelles dans une table BigQuery
- Créer un modèle de séries temporelles à l'aide de la syntaxe BQML
- Découvrir comment évaluer les paramètres et la justesse de votre modèle
- Effectuer des prévisions à l'aide de votre modèle
Étape 1
Nous allons créer une table BigQuery avec les données brutes du fichier CSV que nous venons d'explorer. Commençons par télécharger le fichier CSV à partir de l'environnement du notebook.
Dans le répertoire training-data-analyst/courses/ai-for-time-series/notebooks/data, faites un clic droit sur cta_ridership.csv et sélectionnez Télécharger dans votre environnement local.
Étape 2
Nous allons ensuite importer ces données dans une table BigQuery.
Accédez à BigQuery dans la console (en effectuant une recherche ou en utilisant ce lien) :

Vous pouvez ajouter la table à un ensemble de données nouveau ou existant, qui regroupe les tables associées. Si vous n'avez pas encore créé d'ensemble de données, vous pouvez cliquer sur votre projet en bas à gauche, puis sélectionner Créer un ensemble de donnéesen bas à droite.

Choisissez un nom, par exemple demo, acceptez les valeurs par défaut, puis continuez.
Une fois l'ensemble de données sélectionné, sélectionnez Créer une table en bas à droite pour créer une table.

Pour les options de création de table, sélectionnez :
- Créer une table à partir de : Importer
- Sélectionner un fichier : cta_ridership.csv
- Nom du tableau : cta_ridership
- Schéma : cochez la case pour détecter automatiquement le schéma et les paramètres d'entrée.

Étape 3
Il est maintenant temps de créer notre modèle. BigQuery ML fournit une syntaxe simple semblable à SQL qui vous permet de créer une grande variété de types de modèles.
Dans l'éditeur de requête, collez/saisissez cette requête, en remplaçant demo par le nom de votre ensemble de données aux deux emplacements si nécessaire :
CREATE OR REPLACE MODEL
`demo.cta_ridership_model` OPTIONS(MODEL_TYPE='ARIMA',
TIME_SERIES_TIMESTAMP_COL='service_date',
TIME_SERIES_DATA_COL='total_rides',
HOLIDAY_REGION='us') AS
SELECT
service_date, total_rides
FROM
`demo.cta_ridership`
Examinons les éléments clés de la syntaxe pour comprendre :
| Cette instruction crée le modèle. Il existe des variantes de cette instruction, par exemple |
| Ici, nous définissons les options du modèle, la première étant le type de modèle. La sélection d'ARIMA crée un modèle de prévision de séries temporelles. |
| Colonne contenant des informations de date/heure |
| Colonne de données |
| Ce paramètre facultatif nous permet d'inclure des jours fériés dans le modèle. Étant donné que notre exploration des données à l'étape précédente a montré que le nombre de passagers était plus faible les jours fériés et que les données proviennent de Chicago, dans l'Illinois, aux États-Unis, nous incluons les jours fériés américains dans le modèle. |
| Cette section sélectionne les données d'entrée que nous utiliserons pour entraîner le modèle. |
Vous pouvez ajouter un certain nombre d'autres options à la requête, par exemple définir une colonne si vous avez plusieurs séries temporelles ou choisir de découvrir automatiquement les paramètres du modèle ARIMA. Pour en savoir plus, consultez la section Instruction CREATE MODEL pour la référence de syntaxe des modèles de séries temporelles.
Étape 4
Découvrons-en plus sur notre modèle. Une fois l'entraînement terminé, exécutons une autre requête, en remplaçant à nouveau demo si nécessaire :
SELECT * FROM ML.EVALUATE(MODEL `demo.cta_ridership_model`)
Interprétons les résultats. Dans chaque ligne, vous verrez un modèle candidat, avec ses paramètres et ses statistiques d'évaluation. Les résultats sont renvoyés par ordre croissant d'AIC, ou critère d'information Akaike, qui fournit un indicateur relatif de la qualité du modèle. Ainsi, 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.
Vous pourrez voir les paramètres p, d et q du modèle ARIMA, ainsi que la saisonnalité découverte dans le modèle. Dans ce cas, le modèle le plus performant inclut une saisonnalité hebdomadaire et annuelle.

Étape 5
Nous sommes maintenant prêts à effectuer des prévisions avec la ML.FORECAST fonction.
Collez/saisissez les éléments suivants (en remplaçant demo si nécessaire) :
SELECT
*
FROM
ML.FORECAST(MODEL `demo.cta_ridership_model`,
STRUCT(7 AS horizon))
Cette requête prévoit simplement 7 jours à l'aide de notre modèle. Nous pouvons voir les sept lignes renvoyées ci-dessous. La prévision inclut également un intervalle de confiance, qui est de 0,95 par défaut, mais qui peut être configuré dans la requête.

Excellent travail : nous avons créé un modèle de séries temporelles avec seulement quelques requêtes BQML.
6. Créer un modèle de prévision personnalisé
Dans cette section, vous allez effectuer les tâches suivantes :
- Supprimer les valeurs aberrantes des données
- Effectuer des prévisions en plusieurs étapes
- Inclure des fonctionnalités supplémentaires dans un modèle de séries temporelles
- Découvrir les architectures de réseaux de neurones pour la prévision de séries temporelles : LSTM et CNN
- Découvrir les modèles statistiques, y compris le lissage exponentiel de Holt-Winters
- Modèles ensemblistes
Étape 1
Dans Vertex AI Workbench, accédez à training-data-analyst/courses/ai-for-time-series/notebooks et ouvrez 02-model.ipynb.
Étape 2
Effacez toutes les cellules du notebook (Modifier > Supprimer tous les éléments de sortie), modifiez les paramètres de région, de projet et de bucket dans l'une des premières cellules, puis exécutez les cellules une par une.
Étape 3
Dans le notebook, vous avez exploré plusieurs architectures de modèles : LSTM, CNN et modèles statistiques. Pour chaque modèle, vous pouvez voir ses performances par rapport aux données de test :

7. Entraîner et prédire dans le cloud
Dans cette section, vous allez effectuer les tâches suivantes :
- Préparer les données et les modèles pour l'entraînement dans le cloud
- Entraîner votre modèle et surveiller la progression du job avec AI Platform Training
- Effectuer des prédictions à l'aide du modèle avec AI Platform Predictions
Étape 1
Dans Vertex AI Workbench, accédez à training-data-analyst/courses/ai-for-time-series/notebooks et ouvrez 03-cloud-training.ipynb.
Étape 2
Effacez toutes les cellules du notebook (Modifier > Supprimer tous les éléments de sortie), modifiez les paramètres de région, de projet et de bucket dans l'une des premières cellules, puis exécutez les cellules une par une.
Étape 3
Dans la section précédente, nous avons entraîné un modèle et effectué des prédictions avec celui-ci, le tout dans un notebook Workbench. Dans cette section, nous avons montré comment utiliser le SDK Python pour Vertex AI à partir de votre notebook afin d'utiliser les services Vertex AI pour l'entraînement et le déploiement.

8. Défi
Dans cette section, vous allez essayer d'appliquer les concepts que vous avez appris à un nouvel ensemble de données.
Nous ne fournirons pas d'instructions détaillées, mais seulement quelques conseils (si vous le souhaitez).
L'objectif est de prédire les demandes de service 311 de la ville de New York. Ces demandes non urgentes incluent les plaintes concernant le bruit, les problèmes d'éclairage public, etc.
Étape 1
Commençons par comprendre l'ensemble de données.
Tout d'abord, accédez à l'ensemble de données Demandes de service 311 de la ville de New York.
Pour mieux connaître les données, essayez quelques-unes des requêtes exemples listées dans la description de l'ensemble de données :
- Quel est le nombre de demandes 311 liées aux camions de glaces ?
- Quels sont les jours où le plus de demandes 311 sont liées à des fêtes ?
Dans l'interface utilisateur BigQuery, sélectionnez Créer une requête pour découvrir comment accéder à l'ensemble de données. Notez que l'instruction select interroge bigquery-public-data.new_york_311.311_service_requests.
Étape 2
Nous sommes prêts à commencer. Dans cette section, modifiez le notebook Explorer et visualiser pour utiliser ces données.
Conseils
- Dupliquez le notebook
01-explore.ipynbet commencez à travailler à partir de celui-ci. - Pour explorer les données, essayez cette requête :
from google.cloud import bigquery as bq
sql = """
SELECT * FROM `bigquery-public-data.new_york_311.311_service_requests` LIMIT 5
"""
client = bq.Client(project=PROJECT)
df = client.query(sql).to_dataframe()
df.head()
- Pour obtenir le nombre d'incidents par mois, utilisez cette requête :
SELECT
COUNT(unique_key) as y,
DATE_TRUNC(DATE(created_date), month) as ds
FROM `bigquery-public-data.new_york_311.311_service_requests`
GROUP by ds ORDER BY ds asc
- Mettez à jour les variables de colonne dans la section des constantes. Dans la requête ci-dessus, la colonne cible est y et la colonne de date est ds. Aucune fonctionnalité supplémentaire n'est disponible.
- Envisagez de modifier le nom du fichier dans lequel vous exportez les données pour l'atelier suivant.
- Exportez les données à l'aide de :
df.to_csv(YOUR-EXPORT-FILENAME, index=False)
Étape 3
Créons maintenant un modèle de séries temporelles avec les données mensuelles.
Conseils :
- Dupliquez le notebook
02-model.ipynbet commencez à travailler à partir de celui-ci. - Mettez à jour les paramètres de l'ensemble de données :
- Mettez à jour les paramètres
target_coletts_colpour qu'ils correspondent à votre nouvel ensemble de données. - Mettez à jour les paramètres du modèle :
- Fréquence mensuelle (le code pour le début du mois est "MS")
- Étapes d'entrée : 12 (la fenêtre de rétrospection est de 12 mois)
- Étapes de sortie : 3 (prévoir 3 mois à l'avance)
- Saisons : 12 (la saisonnalité est de 12 mois)
- Modifiez le nom du fichier d'entrée si vous l'avez modifié dans le notebook précédent.
- Si vous exécutez la requête en milieu de mois, le total mensuel du dernier mois sera beaucoup plus faible que prévu. Ainsi, pour les besoins de cet atelier, supprimons le dernier mois de l'ensemble de données à l'aide de :
df = df[:-1] - Il ne semble pas y avoir de valeurs aberrantes évidentes dans les données. Ignorez ou commentez ces cellules.
- Ajustez les unités LSTM, les filtres CNN et la taille du noyau pour ce nouveau modèle.
9. Nettoyage
Si vous souhaitez continuer à utiliser ce notebook, nous vous recommandons de le désactiver quand vous ne vous en servez pas. Dans l'interface utilisateur Workbench de la console Cloud, sélectionnez le notebook, puis sélectionnez Arrêter :

Si vous souhaitez supprimer toutes les ressources que vous avez créées dans cet atelier, il vous suffit de supprimer le notebook Workbench au lieu de l'arrêter.
Dans le menu de navigation de la console Cloud, accédez à Stockage et supprimez les deux buckets que vous avez créés pour stocker les éléments de votre modèle (AVERTISSEMENT : ne le faites que si vous avez créé de nouveaux buckets pour cet atelier).
