Ü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:

  1. Kreditkarten-Transaktionen
  2. Sensordaten einer Maschine in einer Fabrik
  3. RFID-Signale
  4. Boersen- und andere Marktdaten
  5. Benachrichtigungen aus Testzentren und Krankenhaeusern

Anwendungen: Predictive Maintenance, COVID-19 Monitoring, Betrugserkennung, Logistik, Wertpapierhandel

Lösung anzeigen
EingabestromAnwendungAusgabe
Kreditkarten-TransaktionenBetrugserkennungBetrugswarnung (menschlicher Eingriff notwendig)
Sensordaten einer MaschinePredictive MaintenanceHinweis: Teil sollte bald ersetzt werden
RFID-SignaleLogistikPartner/Kunde informieren, Warnung z.B. bei unterbrochener Kuehlkette
Boersen-/MarktdatenWertpapierhandelKauf / Verkauf
Benachrichtigungen Testzentren/KrankenhaeuserCOVID-19 MonitoringMassnahmen

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
AspektDBMSCEP
Daten / EingabePersistent (gespeichert)Strom von Ereignissen: fliessend
Query bzw. RegelVolatil (einmalig ausgefuehrt)Regel: persistent (dauerhaft laufend)
VerarbeitungsmodellDaten kommen zur QueryQuery/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:

  1. Ein Strom von Eingabeereignissen (z.B. von Sensoren) fliesst in die CEP-Komponente.
  2. CEP wertet ihn durch Ausfuehrung von Regeln aus und erzeugt einen Strom von Ausgabeereignissen (z.B. zur Entscheidungsunterstuetzung, decision support).
  3. 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).

IndexWertFensterSumme
00(nur 1 Wert)NaN
11(nur 2 Werte)NaN
220, 1, 23.0
331, 2, 36.0
442, 3, 49.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 Eintrag NaN (Ergebnis NaN, 1.0, 3.0, 5.0, 7.0). Die Anzahl der fuehrenden NaN ist immer window - 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:

7inc=(i=17inci)100000population7\,inc = \left(\sum_{i=1}^{7} inc_i\right) \cdot \frac{100\,000}{population}

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:

i=17inci=100+150+200+120+180+90+160=1000\sum_{i=1}^{7} inc_i = 100+150+200+120+180+90+160 = 1000

Schritt 2 - Auf 100.000 Einwohner normieren:

7inc=10001000005686000=100000000568600017,597\,inc = 1000 \cdot \frac{100\,000}{5\,686\,000} = \frac{100\,000\,000}{5\,686\,000} \approx 17{,}59

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 / population skaliert.

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:

crit(7inc)={4wenn 7inc>4003sonst wenn 7inc>2002sonst wenn 7inc>1001sonst wenn 7inc>500sonstcrit(7\,inc) = \begin{cases} 4 & \text{wenn } 7\,inc > 400 \\ 3 & \text{sonst wenn } 7\,inc > 200 \\ 2 & \text{sonst wenn } 7\,inc > 100 \\ 1 & \text{sonst wenn } 7\,inc > 50 \\ 0 & \text{sonst} \end{cases}

Der 7-Tage-Kritikalitaets-Score verwendet das Minimum ueber die letzten 7 Tage:

7crit=mini=17(crit(7inci))7\,crit = \min_{i=1}^{7} \bigl( crit(7\,inc_i) \bigr)

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:

Tag7 incBedingungcrit
1220> 2003
2260> 2003
3210> 2003
4205> 2003
5240> 2003
690> 50 (aber nicht > 100)1
7230> 2003

Schritt 2 - Minimum bilden:

7crit=min(3,3,3,3,3,1,3)=17\,crit = \min(3,3,3,3,3,1,3) = 1

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