Dans cette leçon, vous allez entraîner un modèle de prévision de série temporelle univariée à l'aide de l'algorithme AdditiveModelForecast de la bibliothèque d'analyses prédictives (PAL) de SAP HANA. Vous utiliserez des nuitées agrégées mensuelles comme données de saisie et prévoyez des valeurs futures à l'aide d'un modèle SAP HANA PAL entraîné. Il s'agit d'une étape de base dans l'utilisation de SAP HANA pour les prévisions de séries chronologiques opérationnelles.
Le client d'apprentissage automatique Python pour SAP HANA (hana-ml) présente toutes les fonctions SAP HANA Predictive Analysis Library (PAL) ainsi que les fonctions Automated Predictive Library (APL) dans Python pour une utilisation en fonction des données de saisie des DataFrames SAP HANA.
Ensuite, nous entraînons un modèle de série temporelle sur les agrégats mensuels à l'aide de l'algorithme AdditiveModelForecast [1].
12amf = AdditiveModelForecast()
amf.fit(data=hdf_overnightstays_agg)<hana_ml.algorithms.pal.tsa.additive_model_preast.AdditiveModelForecast à l'adresse 0x1d9bdeefb00>
L'analyse des séries chronologiques du modèle additif utilise un modèle additif pour prévoir les données de séries chronologiques. Il traite les données avec de forts effets saisonniers et est robuste pour modifier la tendance historique.
L'analyse des séries chronologiques du modèle additionnel - également appelée 'Prophète' - utilise un modèle de série temporelle décomposable avec trois composants principaux : tendance, saisonnalité et jours fériés ou événements.
Nous pouvons explorer le modèle entraîné en consultant un rapport graphique comme indiqué ci-dessous :
1UnifiedReport(amf).build().display()100%|█████████| 6/6 [00:51<00:00, 8.57s/it]

Création du DataFrame SAP HANA pour les prévisions
Jusqu'à présent, nous n'avons pas créé de prévision. Pour créer une prévision, nous devons d'abord créer un DataFrame SAP HANA contenant les dates/mois pour lesquels nous souhaitons des prévisions.
Par conséquent, nous devons trouver la date la plus récente du jeu de données d'entraînement qui est affichée ci-dessous.
123str_lastdate = hdf_overnightstays_agg.tail(1, ref_col='MONTH').collect().iloc[0,0]
str_lastdate = str(str_lastdate)[0:10]
print(str_lastdate)2024-05-01
Ensuite, en fonction de la dernière date connue/du dernier mois indiqué ci-dessus, nous créons un nouveau DataFrame SAP HANA qui affiche les 12 mois suivants.
123456months_to_forecast=12
hdf_future = binomial(conn, n=1, p=1, num_random=months_to_forecast)
hdf_future = hdf_future.select('*', (f'''ADD_MONTHS(TO_DATE ('{str_lastdate}', 'YYYY-MM-DD'), ID+1)''', 'MONTH') )
hdf_future = hdf_future.select('MONTH', ('0', 'TARGET'))
hdf_future.head(20).collect()| MOIS | CIBLE | |
|---|---|---|
| 0 | 2024-06-01 | 0 |
| 1 | 2024-07-01 | 0 |
| 2 | 2024-08-01 | 0 |
| 3 | 2024-09-01 | 0 |
| 4 | 2024-10-01 | 0 |
| 5 | 2024-11-01 | 0 |
| 6 | 2024-12-01 | 0 |
| 7 | 2025-01-01 | 0 |
| 8 | 2025-02-01 | 0 |
| 9 | 2025-03-01 | 0 |
| 10 | 2025-04-01 | 0 |
| 11 | 2025-05-01 | 0 |
Notez l'utilisation du binomial dans le code :
Binomial est une fonction conçue pour générer des nombres aléatoires suite à une distribution binomiale directement dans la base de données SAP HANA. Les deux colonnes générées sont ID et GENERATED_NUMBER.
Sur la base des paramètres donnés à la fonction, nous pouvons comprendre que le nombre généré est toujours 1,0, ce qui n'est pratiquement pas utilisé à nos fins dans cette cellule. La colonne utile est ID qui est un nombre consécutif de 0 à 11 (associé aux 12 nombres aléatoires générés).
L'ID de colonne est utile car ce nombre est additionné à la dernière date du jeu de données d'entraînement, afin de calculer les dates pour la prévision. On peut voir que la dernière date du jeu de données d'entraînement additionné par "'ID+1" devient la valeur dans la colonne MOIS, qui est ensuite utilisée pour les prévisions.
En résumé, l'utilisation du binomial est une étape intermédiaire (technique plutôt que scientifique) pour créer les horodatages pour la prévision.

Application du modèle entraîné
Ensuite, nous appliquons le modèle de série temporelle entraîné pour prévoir les nuitées pour les 12 mois suivants.
12hdf_predicted = amf.predict(data=hdf_future)
hdf_predicted.head(5).collect()| MOIS | YHAT | YHAT_LOWER | YHAT_UPPER | |
|---|---|---|---|---|
| 0 | 01/06/2024 | 3,892362e+06 | 3.818124e+06 | 3.963618e+06 |
| 1 | 01/07/2024 | 4.786169e+06 | 4.713556e+06 | 4.852429e+06 |
| 2 | 01/08/2024 | 4.817140e+06 | 4.743560e+06 | 4.891867e+06 |
| 3 | 01/09/2024 | 3,776572e+06 | 3.702854e+06 | 3.850597e+06 |
| 4 | 01/10/2024 | 3.535125e+06 | 3.459114e+06 | 3.610827e+06 |
Nous visualisons la prévision dans le rapport graphique comme indiqué ci-dessous.
Nous observons clairement un modèle répétitif identifié dans le jeu de données d'entraînement. La plupart des nuitées sont en été, mais la saison hivernale a aussi ses sommets.
1UnifiedReport(amf).build().display()100%|█████████| 6/6 [00:50<00:00, 8.44s/it]

Combinaison de la valeur historique et de la valeur prédite dans le DataFrame SAP HANA
Enfin, nous fusionnons le jeu de données historique et les valeurs prédites en un seul DataFrame SAP HANA, comme illustré ci-dessous.
Pour créer une vue complète et continue de la série chronologique, il est utile de combiner les données historiques avec les prévisions futures. Ce jeu de données fusionné peut être utilisé pour visualiser les tendances, les partager avec les parties prenantes ou rendre les données accessibles aux systèmes tels que SAP Analytics Cloud.
1234567891011hdf_predicted = hdf_predicted.select('MONTH',
('NULL', 'OVERNIGHTSTAYS_SUM'),
('YHAT', 'FORECAST'),
('YHAT_LOWER', 'FORECAST_LOWER'),
('YHAT_UPPER', 'FORECAST_UPPER'))
hdf_overnightstays_agg = hdf_overnightstays_agg.select('*',
('NULL', 'FORECAST'),
('NULL', 'FORECAST_LOWER'),
('NULL', 'FORECAST_UPPER'))
hdf_all = hdf_predicted.union(hdf_overnightstays_agg)
hdf_all.sort('MONTH').tail(5).collect()| MOIS | SOMMES_HTSTAYS_OVERNIGHTSTAYS | PRÉVISION | FORECAST_LOWER | FORECAST_UPPER | |
|---|---|---|---|---|---|
| 0 | 01/01/2025 | Aucune | 2.719344e+06 | 2.644614e+06 | 2.794261e+06 |
| 1 | 01/02/2025 | Aucune | 3.456029e+06 | 3.376482e+06 | 3.543326e+06 |
| 2 | 01/03/2025 | Aucune | 3.412205e+06 | 3.326795e+06 | 3.500738e+06 |
| 3 | 01/04/2025 | Aucune | 2.878771e+06 | 2.786906e+06 | 2.965247e+06 |
| 4 | 01/05/2025 | Aucune | 3.346712e+06 | 3.245006e+06 | 3.435816e+06 |
Le cas échéant, nous pouvons sauvegarder le jeu de données fusionné dans une table dans SAP HANA Cloud. Par exemple, SAP Analytics Cloud peut accéder à ces données.
1hdf_all.save('OVERNIGHTSTAYS_FORECAST_TOTAL', force=True)<hana_ml.dataframe.DataFrame à l'adresse 0x1d9c242e0c0>