Suchen

Kommentar von Constantin Gonzalez, Amazon Web Services Aufbau automatisierter Prognose-Fähigkeiten mit AWS Lake Formation und Amazon Forecast, Teil 2

| Autor / Redakteur: Constantin Gonzalez / Nico Litzel

Amazon Forecast erzeugt mithilfe von Machine Learning (ML) hochgradig präzise Prognosen – ohne dass Anwender über ML-Erfahrung verfügen müssen. In unserem zweiteiligen Artikel zeigen wir, wie Sie automatisierte Prognosen entwickeln. Der erste Teil behandelt die Implementierung eines Date Lake unter Berücksichtigung notwendiger Sicherheitsrichtlinien mit dem Dienst AWS Lake Formation. Im zweiten Teil geht es um das automatisierte Importieren von Daten in Ihren Data Lake und deren Transformation mit einem AWS Glue-Workflow. Anschließend wird ein Amazon-Forecast-Prognosemodell trainiert und mit Amazon QuickSight visualisiert.

Firma zum Thema

Der Autor: Constantin Gonzalez ist Principal Solutions Architect bei Amazon Web Services
Der Autor: Constantin Gonzalez ist Principal Solutions Architect bei Amazon Web Services
(Bild: blende11_Fotografen)

Hier geht es zu Teil 1

Das zugrundeliegende Beispiel beleuchtet die Entwicklung von Lagerbeständen für ein Handelsunternehmen. Dabei geht es darum, zu planen, wie viel und welche Ware bestellt werden soll, um für den nächsten Verkaufszyklus einen ausreichenden Bestand zu haben.

Bildergalerie
Bildergalerie mit 5 Bildern

Daten einspielen

Für diesen Anwendungsfall wird eine MySQL-Tabelle mit dem Namen sales verwendet. Sie enthält die Verkaufshistorie eines Produktes für die letzten beiden Jahre. Das Schema der Tabelle ist:

Tabellenschema
Tabellenschema
(Bild: AWS)

  • 1. Um mit dem Einspielen der Daten zu beginnen, legen Sie die Quelldatenbank an. Das folgende CloudFormation-Template erzeugt eine kostenlose („Free Tier“) RDS-MySQL-Instanz mit dem Datenbanknamen sales_schema innerhalb eines neuen VPC mit den notwendigen Beispieldaten. Die Einrichtung erfolgt in der AWS-Region Frankfurt (eu-central-1).
  • 2.
    1. Verwenden Sie zur Anmeldung bei der AWS-Managementkonsole den IAM-Benutzer mit AdministratorAccess-Berechtigungen
    2. Cloud-Formation-Template-Konfiguration:
    1. Database instance name: Beliebig
    2. MasterPassword: Beliebig
    3. CIDR: Der IP-Adressbereich, von dem aus eine externe Verbindung zur Datenbank hergestellt werden kann. In diesem Beispiel verwenden wir den Bereich 10.1.2.0/24, da kein externer Zugriff benötigt wird
    4. Klick auf Next -> Next -> Create stack
  • 3. Nachdem der AWS Cloud Formation Stack erfolgreich erzeugt worden ist, legen Sie eine neue AWS Glue-Verbindung für die Quelldatenbank an:
    1. Öffnen Sie die AWS-Glue-Konsole unter https://console.aws.amazon.com/glue/
    2. Wählen Sie im linken Navigationsbereich unter Datenbanken die Option Verbindungen aus
    3. Wählen Sie Verbindung hinzufügen aus, schließen Sie den Assistenten ab und geben Sie die folgenden Verbindungseigenschaften ein:
    1. Verbindungsname: forecast-blog-db
    2. Verbindungstyp: Amazon RDS
    3. Datenbank-Engine: MySQL
    4. SSL-Verbindung erforderlich: Nicht ausgewählt
    5. Klick auf Weiter
    6. Instance: Wählen Sie die zuvor erzeugte Quelldatenbank aus
    7. Datenbankname: sales_schema
    8. Benutzername: admin
    9. Passwort: Geben Sie das bei der Cloud Formation Template Konfiguration verwendete Passwort ein
    10. Klick auf Weiter -> Fertig stellen
    4. Nachdem die Verbindung erstellt worden ist, wählen Sie die Checkbox der Verbindung aus → Verbindung testen
    1. Wählen Sie als IAM-Rolle GLUE_WORKFLOW_ROLE aus → Klick auf Verbindung testen
    2. Warten Sie, bis der Verbindungstest erfolgreich durchgeführt wurde, dies kann einen Augenblick dauern
    4. Wechseln Sie in die AWS Lake Formation-Konsole und wählen Sie im linken Navigationsbereich Blueprints aus
    1. Wählen Sie Use a blueprint
    2. Blueprint type
    Wählen Sie Incremental database aus, um regelmäßig Verkaufsdaten aus der verknüpften Quelldatenbank in den Data Lake einzuspielen
    3. Import source
    1. Database connection: forecast-blog-db
    2. Source data path: sales_schema/sales
    4. Incremental data
    1. Table name: sales
    2. Bookmark keys: InvoiceDate
    3. Bookmark order: Ascending
    5. Import target
    1. Target database: your-prefix-forecast-blog-landing-db
    2. Target storage location: s3://your-prefix-forecast-blog-landing
    3. Data format: Parquet
    6. Import options
    1. Workflow name: forecast-blog-wf
    2. IAM role: Wählen Sie GLUE_WORKFLOW_ROLE
    3. Table prefix: blog
    7. Klick auf Create

Als Import target muss das im ersten Teil angelegte your-prefix-forecast-blog-landing S3 Bucket angegeben werden und unter Table prefix muss blog stehen. Das sind die Rohdaten, die in den AWS Glue Jobs regelmäßig umgewandelt und verarbeitet werden. Informationen zur Verwendung eines Blueprints für eine inkrementelle Datenbank finden Sie unter Importing Data Using Workflows.

Starten Sie den Blueprint nach Anlage über Actions → Start

Orchestrieren von Datentransformationen und Generieren einer Prognose

Sobald die Sales-Daten im Raw-Format in das your-prefix-forecast-blog-landing S3 Bucket des Data Lakes eingespielt wurden, führen Sie einen individuellen AWS Glue Workflow aus. Damit orchestrieren Sie die Automatisierung der Datentransformation sowie von AWS Forecast Lade-/Trainings-/Prognose-Ausführungen. Die Prognosen können anschließend in Amazon QuickSight Dashboards eingebunden werden. Dazu müssen folgende Schritte durchgeführt werden:

1. Legen Sie einen AWS Glue Crawler zum Durchsuchen des in Artikel Teil 1 angelegten your-prefix-forecast-blog-published S3 Buckets an:

  • 2. Wählen Sie im linken Navigationsmenü Crawler → Crawler hinzufügen
  • 3. Crawler-Name: forecast-blog-crawler → Weiter
  • 4. Crawler source type: Data stores → Weiter
  • 5. Datenspeicher auswählen: S3
  • 6. Durchsuchen von Daten in: meinem Konto
  • 7. Include-Pfad: s3://your-prefix-forecast-blog-published
  • 8. Klick auf Weiter
  • 9. Hinzufügen eines weiteren Datenspeichers: Nein → Weiter
  • 10. Vorhandene IAM-Rolle auswählen: GLUE_WORKFLOW_ROLE → Weiter
  • 11. Häufigkeit: Ausführung auf Anforderung → Weiter
  • 12. Datenbank: your-prefix-forecast-blog-published-db
  • 13. Klick auf Weiter → Fertigstellen

2. Legen Sie die neun AWS Glue-Aufträge (Jobs) zur Verwendung in der Prognose-Automatisierung an:

  • 2. Wählen Sie im linken Navigationsmenü Aufträge → Auftrag hinzufügen
  • 3. Verwenden sie als Name z.B. den Dateinamen der unten aufgeführten GitHub Skripte wie beispielsweise spark-transform-rawdata
  • 4. Als IAM Rolle verwenden Sie GLUE_WORKFLOW_ROLE
  • 5. Legen Sie den Datentransformations-Job als Spark Job (Spark 2.4, Python 3, Glue Version 2.0) an, die übrigen Jobs als Python shell (Python 3) Jobs
  • 6. Wählen Sie Dieser Auftrag wird ausgeführt -> Ein neues Skript, das Sie schreiben wollen -> Weiter
  • 7. Auf der Seite Verbindungen wählen Sie Auftrag speichern und Skript bearbeiten, ohne eine Verbindung auszuwählen

Der zu kopierenden Quellcode für die einzelnen Jobs ist auf GitHub erhältlich.

8. Speichern und schließen Sie den Skrip-Editor ohne den Auftrag (Job) auszuführen

Wiederholen Sie die Schritte 2.2 – 2.8 für alle der oben aufgelisteten GitHub-Skripte.

AWS Glue
AWS Glue
(Bild: AWS)

3. Als nächstes legen Sie einen neuen AWS Glue Workflow an, um die gesamte Automatisierung zu orchestrieren. Dieser Workflow erlaubt Ihnen den Aufbau und die Orchestrierung einer Serie von AWS-Glue-Aufträgen (Jobs), Crawler und Auslöser (Trigger), um einen komplexen Prozess abzuschließen.

1. Öffnen Sie die AWS Glue-Konsole unter https://console.aws.amazon.com/glue/

2. Wählen Sie im linken Navigationsmenü Workflows → Workflow hinzufügen

3. Als Workflow-Name geben Sie AmazonForecastWorkflow ein

4. Als Standardausführungseigenschaften geben Sie die Schlüssel mit den Werten aus der folgenden Tabelle ein:

(Bild: AWS)

ETL-Workflow
ETL-Workflow
(Bild: AWS)

5. Wählen Sie Workflow hinzufügen

4. Nach dem Anlegen des AWS Glue Workflow fügen Sie die AWS Glue-Auslöser (Trigger), -Aufträge (Jobs) und einen Crawler in Ihren Workflow ein.

  • 1. Wählen Sie den vorher angelegten Workflow aus
  • 2. Wählen Sie Aktion → Trigger hinzufügen
  • 3. Wechsel in den Reiter Neue hinzufügen
  • 4. Als Name geben Sie StartWorkflow ein
  • 5. Als Triggertyp wählen Sie On-Demand
  • 6. Klicken Sie Hinzufügen

Trigger hinzufügen
Trigger hinzufügen
(Bild: AWS)

5. Wählen Sie den soeben angelegten Workflow aus und klicken Sie im Reiter Graph auf das gestrichelte Rechteck

6. Wählen Sie den zuvor angelegten Datentransformations-Job (Spark) aus → Hinzufügen

Start Workflow
Start Workflow
(Bild: AWS)

Spark
Spark
(Bild: AWS)

7. Erzeugen Sie einen neuen Trigger, um das Ende des Transformationsjob zu beobachten und um anschließend einen Datenimportjob zu starten:

  • 1. Wählen Sie den vorher angelegten Workflow aus
  • 2. Wählen Sie Aktion → Trigger hinzufügen
  • 3. Wechsel in den Reiter Neue hinzufügen
  • 4. Als Name geben Sie StartDataImport ein
  • 5. Als Triggertyp wählen Sie Event
  • 6. Als Triggerlogik behalten Sie die Einstellung Nach BELIEBIGEM beobachteten Event starten bei
  • 7. Klicken Sie Hinzufügen

Trigger hinzufügen
Trigger hinzufügen
(Bild: AWS)

8. Klicken Sie auf das gestrichelte Rechteck links vom Trigger (Trigger Eingang) und wählen Sie den vorher angelegten Datentransformations-Job (Spark) aus

9. Klicken Sie anschließend auf das gestrichelte Rechteck rechts vom Trigger (Trigger Ausgang) und wählen Sie den vorher angelegten Import von Daten in Amazon Forecast (Python shell: Python 3) aus

10. Wiederholen Sie die Schritte 7 - 9 um folgende Trigger anzulegen:

Trigger
Trigger
(Bild: AWS)

11. Im Workflow-Menü wählen Sie Aktionen → Ausführen, dadurch wird der end-to-end Prognoseprozess gestartet

Trigger-Name
Trigger-Name
(Bild: AWS)

Workflows
Workflows
(Bild: AWS)

Visualisierung Ihrer Prognosen

Um die sich regelmäßig aktualisierenden Prognosen auf Dashboards bereitzustellen, setzen Sie einen Amazon QuickSight Report, ein Dashboard sowie eine Verbindung zum Data Lake über den Dienst AWS Athena auf. Dabei können Sie Amazon QuickSight und die Athena-Datenquelle für den Zugriff auf die Prognosedaten und für die Visualisierung nutzen.

Als erstes müssen Sie QuickSight den Zugriff auf die Prognosedaten geben. Identifizieren Sie dazu die Amazon QuickSight Service-Rolle Ihres Kontos.

Amazon QuickSight verwendet als Standardeinstellung die Service-Rolle (aws-quicksight-service-role-v0) für die Interaktion mit anderen AWS-Diensten. Diese Service-Role wird automatisch angelegt, wenn Sie mit der Nutzung von Amazon QuickSight beginnen.

Sollten Sie Amazon QuickSight in der AWS-Region Frankfurt bisher noch nicht verwendet haben, führen Sie bitte folgende Schritte aus um Amazon QuickSight zu konfigurieren:

  • Wählen Sie Services in der Kopfleiste → Geben Sie QuickSight in die Suchmaske ein und wählen Sie den Service aus
  • Klicken Sie auf Sign up for QuickSight
  • Für diesen Artikel verwenden wir QuickSight Standard → Continue

QuickSight-Konto erstellen
QuickSight-Konto erstellen
(Bild: AWS)

  • Region: EU (Frankfurt)
  • QuickSight-Kontoname: your-prefix-forecast-blog-quicksight
  • E-Mail Adresse für Benachrichtigungen: Ihre gewünschte E-Mail
  • Klick auf Abschließen → Gehen Sie zu Amazon QuickSight
  • QuickSight sollte nun erfolgreich in der AWS-Region Frankfurt für die nächsten Schritte eingerichtet sein

So ermöglichen Sie Amazon QuickSight, auf die Prognosedaten zuzugreifen:

1. Melden Sie sich an der AWS-Managementkonsole ab und als IAM-Benutzer data_lake_administrator wieder an und wechseln Sie in die Amazon Lake Formation-Konsole

2. Suchen Sie nun die durch den AWS Glue Workflow angelegte Tabelle your-prefix-forecast-blog-published-db. Darin befinden sich die exportierten und zu visualisierenden Prognosedaten.

Berechtigungen erteilen
Berechtigungen erteilen
(Bild: AWS)

3. Gewähren Sie der Amazon QuickSight Service-Rolle Select Zugriff auf diese Tabelle. Dafür nutzen Sie unter Lake Formation die Aktion Grant (Details: hier).

  • 1. Auswahl der Tabelle your-prefix-forecast-blog-published-db
  • 2. Klick auf Actions → Grant
  • 3. Wählen Sie unter IAM users and roles die QuickSight Service-Rolle (aws-quicksight-service-role-v0) aus
  • 4. Wählen Sie unter Table permissions Select aus
  • 5. Klick auf Grant

Nun erzeugen Sie ein Dashboard für die Visualisierung der Prognosedaten in Amazon QuickSight:

1. Melden Sie sich von der AWS Managementkonsole als data_lake_administrator ab und melden Sie sich wieder als IAM-Benutzer der über die Berechtigung AdministratorAccess verfügt an

2. Wechseln Sie in die Amazon QuickSight Konsole

3. Klicken Sie auf Datensätze im linken Navigationsmenü

4. Klicken Sie auf Neues Dataset → Athena um eine Datenquelle für Athena anzulegen

5. Als Name der Datenquelle geben Sie your-prefix-forecast-blog-published-db ein

6. Wählen Sie Datenquelle erstellen

7. Als Datenbank wählen Sie your-prefix-forecast-blog-published-db

Athena-Datenquelle
Athena-Datenquelle
(Bild: AWS)

8. Wählen Sie die von Ihrem Crawler angelegte Tabelle für die exportierte Prognose aus your-prefix-forecast-blog-published

9. Wählen Sie Bearbeiten/Vorschau von Daten

10. Wechseln Sie den Query mode auf SPICE

11. Stellen Sie sicher, dass die Tabellenspalten folgende Datentypen besitzen:

  • 1. date: Date
  • 2. p10: Decimal
  • 3. p50: Decimal
  • 4. p90: Decimal

12. Sollten die Datentypen nicht denen in Punkt 11 entsprechen, klicken Sie bitte auf den aktuellen Datentyp und ändern diesen entsprechend.

1. Datumsformat ändern: yyyy-MM-dd'T'HH:mm:SSZ

13. Klicken Sie Speichern und visualisieren

14. Aktualisieren Sie die Seite mehrmals und warten Sie bis der Datensatz in die QuickSight Query Engine SPICE importiert wurde

15. Klicken Sie auf den Visualisierungstypen Liniendiagramm

16. Legen Sie zwei Filter für die Felder date und location an und setzen Sie die Filterwerte auf:

Filter Date und location
Filter Date und location
(Bild: AWS)

date: 01.02.2019 – 10.02.2019

location: hornsby

17. Ziehen Sie die dargestellten Felder aus der Feldliste in die entsprechenden Feldbereiche und ändern Sie den Namen des Diagramms auf 10 Tagesprognose Lagerbestände

18. Klicken Sie in der Kopfleiste auf Freigeben → Dashboard veröffentlichen

19. Vergeben Sie als Name forecast-blog-dashboard

20. Klick auf Dashboard veröffentlichen

21. Wählen Sie die Checkbox Mit allen Benutzern in diesem Konto teilen -> Bestätigen

22. Schließen Sie das Fenster

23. Der folgende Screenshot zeigt das veröffentlichte QuickSight Dashboard mit der exportierten Prognose für die Steuerung der Lagerbestände eines Produkts Ihres Unternehmens. Das Dashboard zeigt p10-, p50- und p90-Werte auf der y-Achse für die verschiedenen Tage auf der x-Achse

Forecast erzeugt wahrscheinlichkeitstheoretische Prognosen. Sie können Prognosen für unterschiedliche Perzentile je nach Anwendungsfall anlegen – etwa wenn zu geringe oder zu hohe Lagerbestände für Ihr Unternehmen problematisch sind. Der Graph bildet die oberen und unteren Grenzwerte der prognostizierten Inventarbestände Ihres Produktes aus Ihrer Datensammlung ab. Als Filter wurden hier die Warenbestände einer Niederlassung für zehn Tage ausgewählt. So können Sie entscheiden, wie viele Produkte Sie in der Woche vorrätig halten oder nachbestellen wollen.

Die p10-Linie ist die Untergrenze: Die Wahrscheinlichkeit, dass der tatsächliche Lagerbestand unter dieser Linie ist, liegt bei nur 10 Prozent. Die p90-Linie stellt die Obergrenze dar – mit einer Wahrscheinlichkeit von 90 Prozent liegt der tatsächliche Wert darunter. Je umfassender die Trainingsdaten sind, um so näher werden sich die beiden Linien nähern. Ebenso lassen sich auch Prognosen über eine benutzerspezifische Quantile Ihrer Wahl anlegen. Für eine konservative Planung würde ein Unternehmen einen Wert näher an der p90-Linie wählen: Damit kauft es größere Lagerbestände ein als es wahrscheinlich verkaufen wird. Für eine aggressivere Planung wählen Sie einen Wert in der Nähe der p10-Linie. Damit akzeptieren Sie das Risiko, keine Ware mehr vorrätig zu haben.

Artikelfiles und Artikellinks

(ID:46871087)