Erstellen eines univariaten Prognosemodells mit SAP HANA PAL

Objective

After completing this lesson, you will be able to wenden Sie SAP HANA PAL an, um ein univariates Zeitreihenmodell für das Übernachtungsdatenset zu trainieren.

Univariates Zeitreihenmodell mit SAP HANA PAL trainieren

In dieser Lektion trainieren Sie ein univariates Zeitreihen-Prognosemodell mit dem Algorithmus AdditiveModelForecast aus der Predictive Analysis Library (PAL) von SAP HANA. Sie verwenden monatlich aggregierte Übernachtungen als Eingabedaten und prognostizieren zukünftige Werte mithilfe eines trainierten SAP-HANA-PAL-Modells. Dies ist ein Grundschritt bei der Verwendung von SAP HANA für operative Zeitreihenvorhersagen.

Der Python-Machine-Learning-Client für SAP HANA (hana-ml) stellt alle Funktionen der SAP HANA Predictive Analysis Library (PAL) sowie die Automated-Predictive-Library-Funktionen (APL-Funktionen) in Python für die Verwendung basierend auf den Eingabedaten von SAP HANA DataFrames bereit.

Als Nächstes trainieren wir ein Zeitreihenmodell für die monatlichen Aggregate mit dem Algorithmus AdditiveModelForecast [1].

Code Snippet
12
amf = AdditiveModelForecast() amf.fit(data=hdf_overnightstays_agg)

<hana_ml.algorithms.pal.tsa.additive_model_prognoast.AdditiveModelForecast unter 0x1d9bdeefb00>

Die Zeitreihenanalyse des additiven Modells verwendet ein additives Modell, um Zeitreihendaten zu prognostizieren. Sie verarbeitet Daten mit starken saisonalen Effekten und ist robust, um den historischen Trend zu verschieben.

Die additive Modellzeitreihenanalyse – auch „Prophet" genannt – verwendet ein zerlegbares Zeitreihenmodell mit drei Hauptkomponenten: Trend, Saisonalität und Feiertage oder Ereignisse.

Wir können das trainierte Modell untersuchen, indem wir einen grafischen Bericht wie folgt anzeigen:

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

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

eine grafische Darstellung der Trainingsdaten im Zeitreihenbericht

SAP-HANA-DataFrame für Prognosen anlegen

Bisher haben wir keine Vorhersage erstellt. Um eine Prognose anzulegen, müssen Sie zunächst einen SAP-HANA-DataFrame anlegen, der die Termine/Monate enthält, für die Sie Prognosen wünschen.

Daher müssen wir das neueste Datum des Trainingsdatensets ermitteln, das unten angezeigt wird.

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

Als Nächstes legen wir basierend auf dem letzten bekannten Datum/Monat oben einen neuen SAP-HANA-DataFrame an, der die folgenden 12 Monate anzeigt.

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()
 MONTHZIEL
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

Beachten Sie die Verwendung von Binomial im Quelltext:

Binomial ist eine Funktion zur Generierung von Zufallszahlen nach einer Binomialverteilung direkt in der SAP-HANA-Datenbank. Die beiden generierten Spalten sind ID und GENERATED_NUMBER.

Anhand der Parameter der Funktion können wir erkennen, dass die generierte Zahl immer 1,0 ist, was in dieser Zelle praktisch nicht für unsere Zwecke verwendet wird. Die nützliche Spalte ist ID, bei der es sich um eine fortlaufende Zahl von 0 bis 11 handelt (die den 12 generierten Zufallszahlen zugeordnet ist).

Die Spalten-ID ist nützlich, da diese Zahl zum letzten Datum des Trainingsdatensets addiert wird, um die Daten für die Prognose zu berechnen. Sie sehen, dass das letzte Datum des Trainingsdatensets, summiert mit „ID+1", zum Wert in der Spalte MONTH wird, der dann für die Prognose verwendet wird.

Zusammenfassend lässt sich sagen, dass die Verwendung von Binomial ein Zwischenschritt (technisch statt wissenschaftlich) ist, um die Zeitstempel für die Prognose anzulegen.

Screenshot des Codes und der generierten Daten: Weitere Informationen finden Sie im Begleittext.

Anwenden des trainierten Modells

Anschließend wenden wir das trainierte Zeitreihenmodell an, um die Übernachtungen für die folgenden 12 Monate vorherzusagen.

Code Snippet
12
hdf_predicted = amf.predict(data=hdf_future) hdf_predicted.head(5).collect()
 MONTHYHATYHAT_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

Die Prognose wird im grafischen Bericht wie unten dargestellt visualisiert.

Wir beobachten eindeutig ein sich wiederholendes Muster, das im Trainingsdatenset identifiziert wird. Die meisten Übernachtungen sind im Sommer, aber auch die Wintersaison hat ihre Gipfel.

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

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

Eine grafische Darstellung der Trainingsdaten und des Prognoseergebnisses im Zeitreihenbericht

Historischen und prognostizierten Wert im SAP-HANA-DataFrame kombinieren

Abschließend führen wir das historische Datenset und die prognostizierten Werte wie unten gezeigt in einem einzigen SAP-HANA-DataFrame zusammen.

Um eine vollständige und kontinuierliche Sicht auf die Zeitreihen zu erstellen, ist es hilfreich, historische Daten mit zukünftigen Prognosen zu kombinieren. Dieses zusammengeführte Datenset kann verwendet werden, um Trends zu visualisieren, mit geschäftlichen Stakeholdern zu teilen oder die Daten für Systeme wie SAP Analytics Cloud zugänglich zu machen.

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()
 MONTHOVERNIGHTSTAYS_SUMPROGNOSEFORECAST_LOWERFORECAST_UPPER
001.01.2025Keine2.719344e+062.644614e+062.794261e+06
101.02.2025Keine3.456029e+063.376482e+063.543326e+06
201.03.2025Keine3.412205e+063.326795e+063.500738e+06
301.04.2025Keine2.878771e+062.786906e+062.965247e+06
401.05.2025Keine3.346712e+063.245006e+063.435816e+06

Optional können wir das zusammengeführte Datenset in einer Tabelle in SAP HANA Cloud sichern. Beispielsweise könnte SAP Analytics Cloud auf solche Daten zugreifen.

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

<hana_ml.dataframe.DataFrame unter 0x1d9c242e0c0>

Referenzen