Übungen: Complex Event Processing
Übungen zu EKI05: CEP-Grundbegriffe, DBMS vs. CEP, iteratives CEP, Sliding/Rolling Windows sowie das COVID-19-Beispiel mit 7-Tage-Inzidenz und Kritikalitaet.
Beginner
Aufgabe 1 (Beginner) - Definition CEP (Multiple-Choice)
Welche Aussage gibt die Foliendefinition von Complex Event Processing (CEP) korrekt wieder?
a) Das einmalige Abfragen persistent gespeicherter Daten in einem DBMS. b) Das Verarbeiten eines Stroms von Ereignissen und das Ableiten von Schluessen daraus. c) Das Trainieren eines neuronalen Netzes auf historischen Zeitreihen. d) Das dauerhafte Speichern aller eingehenden Sensordaten fuer spaetere Auswertung.
Lösung anzeigen
Richtig ist b).
Die Folie 5.10 definiert CEP woertlich als: "Das Verarbeiten eines Stroms von Ereignissen und das Ableiten von Schluessen daraus."
- a) beschreibt ein DBMS (persistente Daten, volatile/einmalige Query) - das ist gerade der Gegensatz zu CEP.
- c) CEP gehoert zur Symbolic AI / Knowledge-based AI (Bereich Reasoning), nicht zum Trainieren von Netzen.
- d) CEP wertet den fliessenden Strom laufend aus, statt Daten nur zu speichern.
Tipp: Merke die zwei Kernwoerter der Definition: "Strom von Ereignissen" und "Schluesse ableiten". Beides muss vorkommen.
Kapitel: EKI05
Aufgabe 2 (Beginner) - Ereignis, Ereignisobjekt, Ereignistyp
Erklaeren Sie kurz den Unterschied zwischen Ereignis, Ereignisobjekt und Ereignistyp und ordnen Sie sie den Begriffen der objektorientierten Programmierung zu.
Lösung anzeigen
- Ereignis (event): Etwas Besonderes, das passiert ist (z.B. eine Finanztransaktion, ein landendes Flugzeug, ein Tastendruck). Umgangssprachlicher Oberbegriff.
- Ereignisobjekt (event object): Ein Datensatz, der ein Ereignis repraesentiert (z.B. eine Kaufbestaetigung, eine Nachricht mit Kurswechsel, ein RFID-Datensatz).
- Ereignistyp (event type, event class): Spezifiziert die Struktur von Ereignisobjekten, also ihre Attribute und Datentypen (z.B. Klasse Kaufereignis mit Zeitstempel, Kaeufer, Produkt, Preis).
Zuordnung zur OOP:
- Ereignistyp = Klasse (Schema)
- Ereignisobjekt = Instanz der Klasse
- Ereignis = umgangssprachlicher Oberbegriff
Falle: Die Folie weist darauf hin, dass der Begriff "Ereignis" oft stellvertretend fuer das "Ereignisobjekt" benutzt wird. In einer praezisen Antwort trotzdem sauber trennen.
Kapitel: EKI05
Aufgabe 3 (Beginner) - CEP-Anwendungen zuordnen
Ordnen Sie jedem Eingabestrom die passende CEP-Anwendung zu:
- Kreditkarten-Transaktionen
- Sensordaten einer Maschine in einer Fabrik
- RFID-Signale
- Boersen- und andere Marktdaten
- Benachrichtigungen aus Testzentren und Krankenhaeusern
Anwendungen: Predictive Maintenance, COVID-19 Monitoring, Betrugserkennung, Logistik, Wertpapierhandel
Lösung anzeigen
| Eingabestrom | Anwendung | Ausgabe |
|---|---|---|
| Kreditkarten-Transaktionen | Betrugserkennung | Betrugswarnung (menschlicher Eingriff notwendig) |
| Sensordaten einer Maschine | Predictive Maintenance | Hinweis: Teil sollte bald ersetzt werden |
| RFID-Signale | Logistik | Partner/Kunde informieren, Warnung z.B. bei unterbrochener Kuehlkette |
| Boersen-/Marktdaten | Wertpapierhandel | Kauf / Verkauf |
| Benachrichtigungen Testzentren/Krankenhaeuser | COVID-19 Monitoring | Massnahmen |
Tipp: Alle Anwendungen folgen demselben Grundmuster: Ereignisstrom -> CEP (Regel-Auswertung) -> Ausgabe (Warnung / Hinweis / Entscheidung).
Kapitel: EKI05
Fortgeschritten
Aufgabe 4 (Fortgeschritten) - DBMS vs. CEP
Vergleichen Sie DBMS und CEP hinsichtlich (a) der Daten/Eingabe und (b) der Query bzw. Regel. Worin besteht der "Umkehr-Gegensatz"?
Lösung anzeigen
| Aspekt | DBMS | CEP |
|---|---|---|
| Daten / Eingabe | Persistent (gespeichert) | Strom von Ereignissen: fliessend |
| Query bzw. Regel | Volatil (einmalig ausgefuehrt) | Regel: persistent (dauerhaft laufend) |
| Verarbeitungsmodell | Daten kommen zur Query | Query/Regel liegt am Datenstrom |
Umkehr-Gegensatz: Beim DBMS sind die Daten persistent und die Query volatil. Bei CEP ist es genau umgekehrt: die Regel ist persistent (laeuft dauerhaft mit), waehrend die Daten als fliessender Ereignisstrom vorbeilaufen.
Falle: Nicht "persistent vs. volatil" allein nennen - man muss sagen, was jeweils persistent bzw. volatil ist. Genau die Vertauschung ist der Pruefungspunkt.
Kapitel: EKI05
Aufgabe 5 (Fortgeschritten) - Sliding/Rolling Window mit Parametern n und m
Was ist ein Sliding ("rolling") Window? Erklaeren Sie die beiden Parameter n und m und beschreiben Sie, wie sich das Fenster ueber die Zeitachse bewegt.
Lösung anzeigen
Ein Sliding Window (Gleitfenster) betrachtet immer nur einen Ausschnitt des Ereignisstroms in der juengsten Vergangenheit. Das Fenster wandert mit fortschreitender Zeit weiter (von "jetzt" zurueck ueber "frueher" bis "noch frueher").
Zwei Parameter:
- n: Dauer (duration) - die Laenge/Breite des Fensters (wie viele Zeiteinheiten/Ereignisse betrachtet werden).
- m: Haeufigkeit (windowing frequency) - wie oft bzw. um welchen Schritt (Versatz) das Fenster weiterrueckt.
Das aktuelle Fenster enthaelt die juengsten Ereignisse (z.B. t0, t1, t2, ...); davor liegen die vorherigen Fenster. n spannt die Fensterbreite auf, m ist der Versatz zwischen aufeinanderfolgenden Fensterpositionen.
flowchart LR
A["... noch frueher ..."] --> B["Vorherige Fenster"]
B --> C["Aktuelles Fenster (n = Dauer)"]
C --> D["jetzt (t0)"]
Tipp: Eselsbruecke: n = wie breit, m = wie weit (der Schritt beim Weiterrucken).
Kapitel: EKI05
Aufgabe 6 (Fortgeschritten) - Iteratives CEP interpretieren
Interpretieren Sie das folgende Diagramm. Was bedeutet die gestrichelte Rueckkopplung und was sind low-level bzw. high-level Ereignisse?
flowchart LR
IN["Strom von Eingabe-Ereignissen (z.B. Sensoren)"] --> CEP["CEP: Ausfuehrung von Regeln"]
CEP --> OUT["Strom von Ausgabe-Ereignissen (decision support)"]
OUT -. "iterativ: low-level zu high-level" .-> CEP
Lösung anzeigen
Das Diagramm zeigt das iterative Grundprinzip von CEP:
- Ein Strom von Eingabeereignissen (z.B. von Sensoren) fliesst in die CEP-Komponente.
- CEP wertet ihn durch Ausfuehrung von Regeln aus und erzeugt einen Strom von Ausgabeereignissen (z.B. zur Entscheidungsunterstuetzung, decision support).
- Die gestrichelte Rueckkopplung bedeutet: Ausgabeereignisse koennen erneut als Eingabe dienen.
Dadurch werden aus low-level Ereignissen (einfache, rohe Ereignisse wie Einzelmesswerte) schrittweise high-level Ereignisse (aggregierte, hoehere Schluesse) abgeleitet.
Beispiel aus dem COVID-Kapitel: low-level = tägliche Inzidenz -> high-level = Kritikalitaet. Die Kritikalitaet wird aus der (bereits abgeleiteten) 7-Tage-Inzidenz berechnet.
Tipp: "Iterativ" heisst hier: Die Ausgabe einer Regel wird zur Eingabe der naechsten Regel-Stufe (Kaskade low-level -> high-level).
Kapitel: EKI05
Anspruchsvoll
Aufgabe 7 (Anspruchsvoll) - pandas rolling window nachrechnen
Gegeben ist s = pd.Series(range(5)), also die Werte 0, 1, 2, 3, 4. Berechnen Sie von Hand das Ergebnis von s.rolling(window=3).sum(). Begruenden Sie, warum die ersten Eintraege NaN sind.
Lösung anzeigen
Ein rolling window der Laenge 3 blickt von der aktuellen Beobachtung um die Fensterlaenge zurueck. Ein Fenster liefert erst dann ein Ergebnis, wenn genug Werte vorhanden sind (hier 3).
| Index | Wert | Fenster | Summe |
|---|---|---|---|
| 0 | 0 | (nur 1 Wert) | NaN |
| 1 | 1 | (nur 2 Werte) | NaN |
| 2 | 2 | 0, 1, 2 | 3.0 |
| 3 | 3 | 1, 2, 3 | 6.0 |
| 4 | 4 | 2, 3, 4 | 9.0 |
Ergebnis:
0 NaN
1 NaN
2 3.0
3 6.0
4 9.0
dtype: float64
Warum NaN? An den Indizes 0 und 1 gibt es weniger als window=3 Werte, das Fenster ist also unvollstaendig, daher NaN.
Falle: Zum Vergleich das Folienbeispiel mit
window=2: dort ist nur der erste EintragNaN(Ergebnis NaN, 1.0, 3.0, 5.0, 7.0). Die Anzahl der fuehrendenNaNist immerwindow - 1.
Kapitel: EKI05
Aufgabe 8 (Anspruchsvoll) - 7-Tage-Inzidenz berechnen
Die 7-Tage-Inzidenz ist die Summe der taeglichen Inzidenzen der letzten 7 Tage, normiert auf 100.000 Einwohner:
Die letzten 7 Tage lieferten die taeglichen Fallzahlen 100, 150, 200, 120, 180, 90, 160. Die Population Singapurs betraegt 5,686 Millionen (also 5 686 000 Einwohner). Berechnen Sie die 7-Tage-Inzidenz Schritt fuer Schritt.
Lösung anzeigen
Schritt 1 - Summe der 7 Tage:
Schritt 2 - Auf 100.000 Einwohner normieren:
Die 7-Tage-Inzidenz betraegt also rund 17,59 pro 100.000 Einwohner.
Falle: Die Bevoelkerung "5,686 Millionen" ist deutsche Schreibweise. Das Komma ist das Dezimaltrennzeichen, gemeint sind ca. 5,686 Mio. Einwohner (= 5 686 000), nicht 5686 Millionen. Wer 5686 Millionen einsetzt, erhaelt ein um den Faktor 1000 zu kleines Ergebnis.
Tipp: In pandas entsteht die Tagessumme ueber
df['Daily Confirmed'].rolling(window=7).sum(), danach wird mit* 100000 / populationskaliert.
Kapitel: EKI05
Aufgabe 9 (Anspruchsvoll) - Sliding-Window-Berechnung als Pseudocode
Skizzieren Sie in Pseudocode/pandas, wie aus einer Spalte Daily Confirmed die 7-Tage-Inzidenz je 100.000 Einwohner entsteht. Erklaeren Sie, warum das ein Sliding Window ist.
Lösung anzeigen
import pandas as pd
from datetime import datetime
df = pd.read_csv('Covid-19_SG.csv')
# Datum-Strings zu datetime, als Index verwenden
df.index = df['Date'].apply(lambda s: datetime.strptime(s, '%Y-%m-%d'))
population = 5_686_000 # 5,686 Millionen
# 7-Tage Sliding Window: Summe der letzten 7 Tage
sieben_tage_summe = df['Daily Confirmed'].rolling(window=7).sum()
# Normierung auf 100.000 Einwohner
df['7inc'] = sieben_tage_summe * 100_000 / population
Warum Sliding Window? rolling(window=7) bildet fuer jeden Tag ein Fenster, das die 7 juengsten Beobachtungen umfasst. Mit jedem neuen Tag wandert das Fenster um einen Schritt weiter (Parameter m = 1 Tag), die Breite bleibt n = 7 Tage. Es wird also immer nur der juengste 7-Tage-Ausschnitt des Ereignisstroms betrachtet.
Tipp: Die ersten 6 Werte sind
NaN, weil das 7-Tage-Fenster erst ab dem 7. Tag vollstaendig gefuellt ist (fuehrende NaN = window - 1 = 6).
Kapitel: EKI05
Klausur-Niveau
Aufgabe 10 (Klausur-Niveau) - Kritikalitaet berechnen (iteratives CEP)
Die Kritikalitaet ist definiert als:
Der 7-Tage-Kritikalitaets-Score verwendet das Minimum ueber die letzten 7 Tage:
An 7 aufeinanderfolgenden Tagen betrug die 7-Tage-Inzidenz: 220, 260, 210, 205, 240, 90, 230. Berechnen Sie zuerst crit je Tag und dann 7 crit. Interpretieren Sie das Ergebnis.
Lösung anzeigen
Schritt 1 - crit je Tag:
| Tag | 7 inc | Bedingung | crit |
|---|---|---|---|
| 1 | 220 | > 200 | 3 |
| 2 | 260 | > 200 | 3 |
| 3 | 210 | > 200 | 3 |
| 4 | 205 | > 200 | 3 |
| 5 | 240 | > 200 | 3 |
| 6 | 90 | > 50 (aber nicht > 100) | 1 |
| 7 | 230 | > 200 | 3 |
Schritt 2 - Minimum bilden:
Interpretation: Obwohl an 6 von 7 Tagen crit = 3 war, druckt der eine "schwache" Tag (90 -> crit 1) den Score auf 1. Der Minimum-Operator vergibt eine Stufe nur, wenn die Inzidenz an allen 7 Tagen mindestens diese Stufe hielt. Das ist eine glaettende, "vorsichtige" Bewertung.
Falle: Fuer eine Warn-Metrik waere ein Maximum intuitiver, doch der Foliensatz definiert bewusst das Minimum. Das ist eine Beispiel-Definition, keine allgemeingueltige Vorschrift. In der Klausur die Definition genau so anwenden, wie sie gegeben ist.
Tipp: Iteratives CEP erkennbar: low-level (7-Tage-Inzidenz) -> high-level (Kritikalitaet als Grundlage fuer Regierungsmassnahmen).
Kapitel: EKI05
Aufgabe 11 (Klausur-Niveau) - Betrugserkennung als CEP entwerfen
Entwerfen Sie fuer eine Bank ein CEP-Szenario zur Betrugserkennung. Beschreiben Sie Eingabestrom, Regel (inkl. eines sinnvollen Sliding Windows mit Parametern n und m) und Ausgabe. Begruenden Sie, warum ein DBMS-Ansatz hier ungeeignet waere.
Lösung anzeigen
Eingabestrom: Kreditkarten-Transaktionen (jede Transaktion ist ein Ereignisobjekt vom Ereignistyp "Transaktion" mit Attributen wie Zeitstempel, Kartennummer, Betrag, Ort).
Regel (mit Sliding Window): Die persistente Regel prueft laufend auf "ungewoehnlich hohe Transaktionen in kurzer Zeit". Ein Sliding Window mit z.B.:
- n (Dauer) = 10 Minuten - betrachtetes Zeitfenster
- m (Haeufigkeit) = 1 Minute - Schritt, um den das Fenster weiterrueckt
Innerhalb des aktuellen Fensters wird z.B. die Summe/Anzahl der Transaktionen pro Karte gebildet. Ueberschreitet sie eine Schwelle, feuert die Regel.
Ausgabe: Betrugswarnung mit dem Hinweis, dass ein menschlicher Eingriff notwendig ist.
Warum kein DBMS? Ein DBMS speichert die Daten persistent und fuehrt Queries volatil/einmalig aus - man muesste also wiederholt pollen. CEP dreht das um: Die Regel ist persistent und laeuft dauerhaft am fliessenden Ereignisstrom mit. So wird in Echtzeit erkannt statt nachtraeglich abgefragt - genau das braucht Betrugserkennung.
Tipp: Praktisch wuerde man dafuer eine CEP-/Stream-Processing-Technologie wie Apache Kafka, Apache Flink oder Apache Spark einsetzen.
Kapitel: EKI05
Aufgabe 12 (Klausur-Niveau) - CEP-Technologien und Grundmuster (Multiple-Choice + Kurzantwort)
Teil A (Multiple-Choice): Welche der folgenden ist keine im Foliensatz genannte CEP-/Stream-Processing-Technologie?
a) Apache Flink b) Drools Fusion c) TensorFlow d) TIBCO
Teil B (Kurzantwort): Nennen Sie das gemeinsame Grundmuster aller CEP-Anwendungen und begruenden Sie, warum der Kurs stattdessen mit Python/pandas arbeitet.
Lösung anzeigen
Teil A - Richtig ist c).
TensorFlow ist eine Machine-Learning-Bibliothek (siehe EKI06), keine CEP-Technologie. Im Foliensatz genannt werden u.a.: Apache Kafka, Apache Flink, Apache Spark, Drools Fusion, MS Azure Stream Analytics, Oracle Stream Analytics, SAG Apama, SAP ESP, SAS ESP, TIBCO, IBM WebSphere Business Events.
Teil B - Grundmuster:
Ein Ereignisstrom fliesst in eine CEP-Komponente, diese prueft auf Bedingungen/Muster (Regel-Auswertung) und erzeugt daraus Ausgaben (Warnungen, Hinweise, Entscheidungen).
Warum Python/pandas statt echter CEP-Technologie? CEP-Technologien sind komplex - komplex durch die inhaerente Verteilung, schwer zu installieren und handzuhaben. Daher wird im Kurs nur das Konzept der Sliding Windows mit Python/pandas (rolling) ausprobiert, ohne eine vollstaendige CEP-Plattform zu betreiben.
Falle: Der Foliensatz zeigt bewusst keine dedizierte Event-Processing-/Regelsprache (z.B. EPL). Die einzigen konkreten Code-Beispiele sind Python/pandas und mathematische Definitionen.
Kapitel: EKI05