Création d'un modèle de prévision univarié avec SAP HANA PAL

Objective

After completing this lesson, you will be able to appliquez SAP HANA PAL pour entraîner un modèle de série temporelle univariée sur le jeu de données de nuitées.

Entraînement d'un modèle de série temporelle univariée à l'aide de SAP HANA PAL

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].

Code Snippet
12
amf = 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 :

Code Snippet
1
UnifiedReport(amf).build().display()

100%|█████████| 6/6 [00:51<00:00, 8.57s/it]

Une représentation graphique des données d'entraînement dans le rapport de séries chronologiques

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.

Code Snippet
123
str_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.

Code Snippet
123456
months_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()
 MOISCIBLE
02024-06-010
12024-07-010
22024-08-010
32024-09-010
42024-10-010
52024-11-010
62024-12-010
72025-01-010
82025-02-010
92025-03-010
102025-04-010
112025-05-010

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.

Capture d'écran du code et des données générées : reportez-vous au texte d'accompagnement pour plus de détails.

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.

Code Snippet
12
hdf_predicted = amf.predict(data=hdf_future) hdf_predicted.head(5).collect()
 MOISYHATYHAT_LOWERYHAT_UPPER
001/06/20243,892362e+063.818124e+063.963618e+06
101/07/20244.786169e+064.713556e+064.852429e+06
201/08/20244.817140e+064.743560e+064.891867e+06
301/09/20243,776572e+063.702854e+063.850597e+06
401/10/20243.535125e+063.459114e+063.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.

Code Snippet
1
UnifiedReport(amf).build().display()

100%|█████████| 6/6 [00:50<00:00, 8.44s/it]

Affichage graphique des données d'entraînement et des résultats prévisionnels dans le rapport de séries chronologiques

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.

Code Snippet
1234567891011
hdf_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()
 MOISSOMMES_HTSTAYS_OVERNIGHTSTAYSPRÉVISIONFORECAST_LOWERFORECAST_UPPER
001/01/2025Aucune2.719344e+062.644614e+062.794261e+06
101/02/2025Aucune3.456029e+063.376482e+063.543326e+06
201/03/2025Aucune3.412205e+063.326795e+063.500738e+06
301/04/2025Aucune2.878771e+062.786906e+062.965247e+06
401/05/2025Aucune3.346712e+063.245006e+063.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.

Code Snippet
1
hdf_all.save('OVERNIGHTSTAYS_FORECAST_TOTAL', force=True)

<hana_ml.dataframe.DataFrame à l'adresse 0x1d9c242e0c0>

Références