Blog
dranbleiben!
Clemens Peters

Effizientes Preprocessing von Zeitreihendaten in der Cloud: Ein Praxisbeispiel

Einleitung

Effizientes serverless preprocessing

In der Welt der Datenverarbeitung und des maschinellen Lernens ist das Preprocessing von Daten oft ein zeitaufwendiger und ressourcenintensiver Prozess. Dieser Artikel beleuchtet, wie die Cloud-Technologie genutzt werden kann, um diesen Prozess effizienter zu gestalten. Als Anwendungsbeispiel dient die Anomalieerkennung in Zeitreihendaten, genauer gesagt, die Analyse von New Yorker Taxidaten. Der Artikel basiert auf dem Inhalt des ersten Vortrags unseres Meetups vom 14.06.2023 (siehe YouTube Video und GitHub Repo).

Zeitreihendaten und ihre Bedeutung: Ein tieferer Einblick (v2)

Zeitreihendaten sind in nahezu jedem Bereich unseres Lebens präsent. Sie repräsentieren eine Abfolge von Datenpunkten, die in zeitlicher Reihenfolge erfasst wurden. Ob es sich um medizinische Daten, Aktienkurse, Wetterdaten oder Software-Metriken handelt - Zeitreihendaten sind allgegenwärtig. Die automatische Erkennung von Anomalien in diesen Daten kann in vielen Bereichen entscheidend sein, von der Gesundheitsversorgung über den Finanzsektor bis hin zur Softwareentwicklung.

Software Engineering Metriken

In der Welt der Softwareentwicklung sind Zeitreihendaten besonders wichtig. Sobald wir eine Anwendung in Produktion bringen und live laufen lassen, möchten wir natürlich unsere Dashboards haben und wichtige Metriken im Auge behalten. Dazu gehören technische Metriken wie “The Four Golden Signals”:

Anzahl der Anfragen: Wie viele Anfragen kommen in einem bestimmten Zeitraum rein? Ein plötzlicher Anstieg oder Abfall kann auf ein Problem hinweisen. Fehlerrate: Wie viele Anfragen führen zu Fehlern? Eine hohe Fehlerquote kann auf ein Problem mit der Anwendung hinweisen. Latenz: Wie lange dauert es, bis eine Anfrage bearbeitet wird? Eine hohe Latenz kann auf Performance-Probleme hinweisen. Saturation: CPU-Auslastung: Wie hoch ist die CPU-Auslastung der Server? Eine hohe Auslastung kann auf eine Überlastung der Server hinweisen. Speichernutzung: Wie viel Speicher wird von der Anwendung verwendet? Eine hohe Speichernutzung kann auf ein Speicherleck hinweisen.

Neben diesen technischen Metriken sind auch Business-KPIs (Key Performance Indicators) wichtig, wie zum Beispiel die Anzahl der Bestellungen oder der Umsatz. Diese Metriken geben Aufschluss über die Performance des Geschäfts und können ebenfalls Anomalien aufweisen.

Erkennung von Anomalien: Triviale und nicht-triviale Fälle

Die Erkennung von Anomalien in Zeitreihendaten ist nicht immer trivial. Ein einfacher Ansatz besteht darin, Schwellenwerte festzulegen und zu prüfen, ob die Metriken diese überschreiten oder unterschreiten. Dies funktioniert in vielen Fällen gut und kann beispielsweise dazu genutzt werden, um plötzliche Ausreißer nach oben oder unten zu erkennen. Die folgende Abbildung stellt eine solche triviale Anomalie dar:

Anomalien

Es gibt jedoch auch nicht-triviale Anomalien, die mit einfachen Schwellenwerten nicht erkannt werden können. Ein Beispiel dafür ist in der nächsten Abbildung dargestellt. Hier sehen wir eine Anomalie, die sich über einen längeren Zeitraum erstreckt und nicht durch einen plötzlichen Ausreißer gekennzeichnet ist. Solche Anomalien können nur durch ausgefeiltere Methoden des maschinellen Lernens erkannt und automatisch gemeldet werden.

Anomalien

Die Erkennung von Anomalien in Zeitreihendaten ist ein spannendes und herausforderndes Gebiet, das in vielen Bereichen Anwendung findet. Von der Gesundheitsüberwachung, über die Finanzmarktanalyse, bis hin zur Überwachung von Wetterdaten und Software-Metriken - die Fähigkeit, ungewöhnliche Muster in Zeitreihendaten zu erkennen, kann uns wertvolle Einblicke und Warnungen liefern.

Das Thema der Anomalieerkennung ist nur ein Randthema dieses Artikels. Hier ein paar GitHub Links für alle die technisch tiefer einsteigen möchten:

  1. Time Series Anomaly Detection: Eine Sammlung von Ressourcen und Tools für die Anomalieerkennung in Zeitreihendaten.
  2. Twitter Anomaly Detection: Ein R-Paket, das von Twitter entwickelt wurde, um Anomalien in Zeitreihendaten zu erkennen.
  3. Numenta Anomaly Benchmark (NAB): Ein Benchmark für Algorithmen zur Anomalieerkennung in Streaming-Daten.
  4. Python Outlier Detection (PyOD): Ein umfassendes Python-Toolkit für das Erkennen von Ausreißern in multivariaten Daten.
  5. Anomaly Detection Learning Resources: Eine Liste von Lernressourcen für die Anomalieerkennung, zusammengestellt von dem Autor von PyOD.

Diese Ressourcen können helfen, einen tieferen Einblick in die Methoden und Techniken zur Anomalieerkennung in Zeitreihendaten zu bekommen und wie sie in der Praxis angewendet werden können.

Der Datensatz: New Yorker Taxidaten

Anomalien

Ein interessanter öffentlicher Datensatz für die Anomalieerkennung in Zeitreihendaten stammt von den New Yorker Taxiunternehmen. Seit 2009 zeichnen sie ihre Passagierdaten auf und stellen sie der Öffentlichkeit zur Verfügung. Mit über 30 Gigabyte an Daten bietet dieser Datensatz (TLC Trip Record Data) eine Fülle von Informationen über den Beginn von Taxifahrten in New York.

Preprocessing: Aggregation der Daten

Der erste Schritt in der Anomalieerkennung besteht darin, die Daten auf 30-minütige Zeitfenster zu aggregieren. Diese Art der Darstellung ist uns allen bekannt, beispielsweise wenn wir bei Google Maps die aktuellen Besucherzahlen eines Geschäfts oder Parks betrachten.

Anomalien

Lokale vs. Cloud-basierte Verarbeitung

Die lokale Verarbeitung des gesamten Datensatzes kann trotz einer schnellen Internetverbindung bis zu 34 Minuten dauern. Dies mag auf den ersten Blick nicht viel erscheinen, aber wenn man verschiedene Datensätze oder Zeitfenster ausprobieren möchte, summiert sich die Zeit schnell.

Die Verwendung von Cloud-Technologien, insbesondere AWS Lambda, kann diesen Prozess erheblich beschleunigen. Durch hohe Parallelisierung lässt sich die Verarbeitungszeit auf weniger als zwei Minuten reduzieren. Das ist mehr als 20 Mal schneller als die lokale Verarbeitung!

Anomalien


Das Cloud-Setup

Anomalien

  1. Lambda-Funktionen: Zwei Lambda-Funktionen wurden erstellt. Die erste Lambda-Funktion, genannt "Publisher", ist dafür verantwortlich, die Links zu den 168 Dateien, die verarbeitet werden sollen, in ein SNS-Topic zu veröffentlichen. Die zweite Lambda-Funktion wird durch das SNS-Topic ausgelöst und führt die eigentliche Datenverarbeitung durch.
  2. Simple Notification Service (SNS): Ein SNS-Topic dient als Mittler zwischen den beiden Lambda-Funktionen. Die Publisher-Funktion veröffentlicht Nachrichten (Links zu den Dateien) in dieses Topic, das als Auslöser für die zweite Lambda-Funktion dient.
  3. S3 Buckets: Die verarbeiteten Daten werden in einem S3 Bucket gespeichert. Dies ermöglicht eine einfache und sichere Speicherung der Ergebnisse.
  4. ParallelisierungAnstatt eine Lambda-Funktion für eine lange Zeit laufen zu lassen, werden mehrere Lambda-Funktionen parallel ausgeführt, um die Dateien gleichzeitig zu verarbeiten. Dies wird durch das Veröffentlichen aller Dateilinks in das SNS-Topic erreicht, das dann mehrere Instanzen der zweiten Lambda-Funktion auslöst.
  5. Infrastruktur als Code mit Terraform: Um die Infrastruktur schnell und effizient bereitzustellen, wurde Terraform verwendet. Mit Terraform-Scripts kann die gesamte Infrastruktur in Code definiert und mit einem einzigen Befehl bereitgestellt werden.

In Aktion

Das komplette Experiment kann auch lokal im eigenen AWS Account ausgeführt werden. Den Code ist auf GitHub verfügbar: https://github.com/conventic/serverless-preprocessing.

Nachdem die Infrastruktur mit Terraform bereitgestellt wurde, wird die Publisher-Lambda-Funktion ausgelöst. Diese Funktion veröffentlicht die Links zu den 168 Dateien im SNS-Topic. Das SNS-Topic löst dann die zweite Lambda-Funktion aus, die für die Verarbeitung der Daten verantwortlich ist. Dank der Parallelisierung werden mehrere Lambda-Funktionen gleichzeitig ausgeführt, wodurch die Verarbeitungszeit erheblich reduziert wird. Die Ergebnisse werden in einem S3 Bucket gespeichert.

Während des Prozesses wird die Zeit protokolliert, um die Effizienz zu messen. In unserem Beispiel dauerte es weniger als anderthalb Minuten, um alle 168 Dateien in der Cloud zu verarbeiten und die Ergebnisse in S3 zu speichern. Im Gegensatz dazu war die lokale Verarbeitung immer noch mit dem Herunterladen der Dateien beschäftigt und hatte noch nicht einmal mit der eigentlichen Verarbeitung begonnen.

Code-Snippets

Hier sind einige Code-Snippets, die zeigen, wie die Lambda-Funktionen und das SNS-Topic verwendet werden:

Publisher Lambda-Funktion:

def publish_to_sns(topic_arn, file_links):
    sns = boto3.client('sns')
    for link in file_links:
        sns.publish(TopicArn=topic_arn, Message=link)

# Beispiel für das Veröffentlichen von Dateilinks in SNS
publish_to_sns(topic_arn, file_links)

Den kompletten Publisher Code findet ihr unter: https://github.com/conventic/serverless-preprocessing/blob/main/lambda_functions/publishLinkToSNS/lambda_function.py

Verarbeitungs-Lambda-Funktion:

def process_file(event, context):
    url = event['Records'][0]['Sns']['Message']
    
    # Datei herunterladen und verarbeiten
    # ...
    
    # Ergebnisse in S3 speichern
    s3 = boto3.client('s3')
    s3.put_object(Bucket='my-results-bucket', Key='result_key', Body=processed_data)

# Lambda-Handler-Funktion
def lambda_handler(event, context):
    process_file(event, context)

Kompletter Preprocessor Code: https://github.com/conventic/serverless-preprocessing/blob/main/lambda_functions/preprocessor/lambda_function.py

Fazit

Durch die Skalierbarkeit und Parallelisierung, die AWS Lambda bietet, können wir eine erhebliche Verbesserung der Verarbeitungszeiten erzielen. Dieses Cloud-Setup ist besonders nützlich für Workloads, die keine kontinuierliche Ausführung erfordern, sondern in kurzen, intensiven Bursts arbeiten. Es ist auch kosteneffizient, da Lambda-Funktionen nur für die tatsächliche Ausführungszeit berechnet werden. Dies macht es zu einer hervorragenden Lösung für die Verarbeitung großer Datenmengen in kurzer Zeit.

Infrastruktur als Code mit Terraform

Anomalien

Terraform, ein Tool für "Infrastructure as Code", ermöglicht es uns, unsere gesamte Cloud-Infrastruktur in Code zu definieren und dann mit einem einzigen Befehl zu erstellen. Dies ist nicht nur schneller und effizienter als das manuelle Erstellen der Infrastruktur, sondern ermöglicht auch eine Versionskontrolle und Nachverfolgung von Änderungen.

Kostenkontrolle in der Cloud

Anomalien

Ein weiterer Vorteil der Cloud ist die Möglichkeit, die Kosten genau im Blick zu behalten. AWS bietet detaillierte Kostenberichte, und mit Hilfe von Tags können die Kosten nach verschiedenen Kriterien aufgeschlüsselt werden. So kann man sicherstellen, dass das Budget nicht überschritten wird und nur für die Ressourcen bezahlt wird, die tatsächlich genutzt werden.

Fazit

Die Cloud bietet eine Reihe von Vorteilen gegenüber der lokalen Datenverarbeitung. Sie ist nicht nur schneller und effizienter, sondern ermöglicht auch eine bessere Kostenkontrolle und die Verwaltung der Infrastruktur als Code. Dieser Artikel hat gezeigt, wie AWS Lambda und Terraform genutzt werden können, um das Preprocessing von Zeitreihendaten zu beschleunigen und effizienter zu gestalten.

Die Möglichkeiten der Cloud sind vielfältig und ihre Nutzung kann in vielen Bereichen zu erheblichen Verbesserungen führen. Es lohnt sich daher, die Möglichkeiten der Cloud-Technologie zu erkunden und sie in die eigenen Arbeitsprozesse zu integrieren.

Wir hoffen, dieser Artikel hat einen Einblick in die Möglichkeiten des effizienten Preprocessings in der Cloud gegeben. Bei Fragen oder wenn Sie weitere Informationen benötigen, zögern Sie nicht, uns zu kontaktieren.

none
Conventic Icon
Standort Bonn
Burgstraße 69
53177 Bonn
Deutschland
+49 228 76 37 69 70
Standort Braunschweig
Westbahnhof 11
38118 Braunschweig
Deutschland
+49 228 76 37 69 70
Wir sind Mitglied bei
Grouplink Icon
Newsletter abonnieren
Impressum, Haftungsausschluss, Datenschutzerklärung und
© 2024 conventic GmbH · Alle Rechte vorbehalten.