Allgemeine Beschreibung


Die Identifikation von Anomalien in Datensätzen ist in zahlreichen Anwendungsszenarien von Interesse. Egal ob es um die Erkennung von Produktionsfehlern, Krankheitsbildern, ungewöhnlichem Traffic in Netzwerken oder, wie im hier beschriebenen Versuch, um Event-spezifische Veränderungen des Raumklimas geht, werden Techniken benötigt welche Anomalien in großen Datenmengen erkennen können. Dabei reicht es oftmals nicht aus isolierte Veränderungen einzelner Parameter zu betrachten, stattdessen muss das Zusammenspiel einer Vielzahl von Parametern ausgewertet werden.

Im hier beschriebenen Versuch werden exemplarisch anhand der Messwerte von Umweltdatensensoren Events in Form von geöffneten Fenstern und Türen in einem kleinen Raum detektiert. Die Messwerte werden in kurze Zeitintervalle unterteilt welche jeweils mittels maschinellem Lernen als Petri-Netz repräsentiert werden. Die beschreibenden Matrizen dieser Petri-Netze werden schließlich klassifiziert um entscheiden zu können ob in einem Zeitintervall ein Event aufgetreten ist oder nicht.

Versuchsaufbau

Dieser Versuch demonstriert anhand eines einfachen Beispiels wie stochastische Petri-Netze in Kombination mit einem einfachen k-nearest-neighbour-Klassifizierer genutzt werden können um Anomalien in Messwerten zu identifizieren. Dies beinhaltet den Aufbau und die Implementierung eines kleinen IoT-Demonstrators zur Datenerfassung sowie die Implementierung der Anomalie Detektion.

Im Tab Grundlagen werden die hierbei verwendeten theoretischen und algorithmischen Grundlagen kurz erklärt und Quellen zur weiteren Vertiefung angeboten.

Im Tab Versuchsaufbau werden die einzelnen Teilbereiche des Versuchs und die dafür benötigte Hardware und Software aufgeführt und erläutert.

Im Tab Anwendung wird schließlich Schritt für Schritt die Durchführung des Versuchs beschrieben und Beispielcode für die Reproduktion des Versuchs bereitgestellt.

Bei den in diesem Versuch erfassten und betrachteten Messwerten handelt es sich um die Raumtemperatur, die Luftfeuchtigkeit und die Luftqualität. Um die Zusammenhänge zwischen diesen Daten über den zeitlichen Verlauf zu modellieren werden jeweils fünfminütige Intervalle als ein Petri-Netz abgebildet.

 

Petri-Netze sind eine mathematische Modellierungssprache zur Abbildung diskreter verteilter Systeme. Anwendung finden sie in diversen Bereichen, beispielsweise zur Modellierung von biologischen Systemen, Geschäftsprozessen, in der Logistik, im Maschinenbau oder in der Telematik. Grundlegend handelt es sich bei Petri-Netzen um Graphen die aus Stellen und Transitionen bestehen die durch gerichtete Kanten verbunden sind. Stellen enthalten Markierungen. Abhängig von der Markierung der verbundenen Stellen kann eine Transition feuern und damit die Markierung der verbundenen Stellen ändern. Damit lassen sich Zustandsänderungen im modellierten System darstellen. Eine detailliertere Erklärung zu Petri-Netzen gibt es im Versuch zur Systemidentifikation.

Petri-Netz

Beispiel für ein Petri-Netz

 

Zum Lernen der Topologie der Petri-Netze wird ein Gradientenabstieg-Algorithmus eingesetzt. Gradientenverfahren sind Techniken zur Lösung von Optimierungsproblemen bei denen Parameter einer Funktion schrittweise angepasst werden um das Ergebnis der Funktion an einen Zielwert anzunähern. Dabei werden die Parameter anhand des Gradienten der Fehlerfunktion und einer Änderungsrate angepasst. Eine genauere Betrachtung von Gradientenabstiegsverfahren erfolgt in den Versuchen zur Objekterkennung und Sequenzerkennung.

 

Zur Vereinfachung der Matrizen welche die Topologien der gelernten Petri-Netze beschreiben wird Hauptkomponentenanalyse angewandt. Dabei werden die Werte der mxn-Matrizen durch möglichst aussagekräftige Linearkombinationen genähert um stattdessen 1xn-Vektoren zu erhalten. Weitere Informationen zur Hauptkomponentenanalyse gibt es im Versuch ?.

 

Um die Datensamples in solche die Anomalien enthalten und solche die keine Anomalien enthalten unterscheiden zu können wird ein K-nächste-Nachbarn(KNN)-Klassifizierer verwendet. Dies erfolgt durch überwachtes Lernen in dem mit Samples mit Anomalien und ohne Anomalien ein Modell erstellt welches für unbekannte Samples entscheiden kann ob sie Anomalien enthalten oder nicht. Die Funktionsweise des KNN-Algorithmus wird im Versuch zur Schallbasierten Ortung erklärt.

Zur Erfassung der zur Anomalie-Detektion verwendeten Messwerte wurden mehrere IoT-Kits mit dem BOSCH BME680 Umweltdatensensor benutzt welche die Temperatur, die Luftfeuchtigkeit und die Luftqualität erfassen. Dazu wurde ein Raspberry Pi verwendet der gleichzeitig als AccessPoint und Datensenke für die IoT-Kits fungierte. Die Kommunikation zwischen den einzelnen Geräten erfolgte dabei über MQTT.

 

Anomalie Detektion Aufbau

Anomalie Detektion Versuchsaufbau

 

Der Raspberry Pi öffnet ein Wifi-Netz mit dem sich alle IoT-Kits verbinden. Außerdem startet der Raspberry Pi den MQTT Broker über den die Daten der Kits empfangen werden. Alle 10 Sekunden publisht der Pi über MQTT eine Anforderung zum Messen auf die die Kits hören und daraufhin ebenfalls per MQTT-publish mit ihren Messwerten antworten. Auf dem Pi werden die empfangenen Werte dann in eine Datenbank geschrieben.

 

Die Datenerfassung erfolgte in einem circa neun Quadratmeter großen Raum mit einer Tür und einem gegenüberliegenden Fenster. Einmal pro Stunde wurden für fünf Minuten die Tür und das Fenster geöffnet um somit eine Anomalie in den Messwerten zu erzeugen. Dieses Vorgehen ermöglicht dann überwachtes Lernen da die Zeitpunkte der Anomalien bekannt sind und exakt gelabelt werden können.

 

Die Auswertung der Daten erfolgt anschließend in Matlab und wird unter Anwendung beschrieben.

Im ersten Schritt müssen die Messdaten in Zeitabschnitte unterteilt werden, die dann durch Lernen mit Gradientabstiegsverfahren als Petri-Netze abgebildet werden können. Als Intervallgröße wurde hier 5 Minuten gewählt. Anschließend wurden 200 zufällige, nicht disjunkte Samples dieser Intervallgröße aus den Messwerten erzeugt.

 

Damit überwachtes Lernen möglich ist, werden die Samples dann gelabelt, indem jedes 5 Minutenintervall, das mindestens einen Messwert enthält der Teil eines Anomaliezeitraums war, mit 1 und alle anderen mit 0 gelabelt werden. Dann wird für jedes Intervall ein Petri-Netz erzeugt welches dieses repräsentiert. Dazu wird eine abgewandelte und vereinfachte Variante von des im IEEE Paper „Likelihood-Based Adaptive Learning in Stochastic State-Based Models“ beschriebenen DAAGD-Algorithmus verwendet. Der Algorithmus verwendet ein Gradientenabstiegsverfahren um für jeden zeitlichen Schritt zwischen zwei Messpunkten die, durch die Matrix A beschriebene, Topologie des Petri-Netzes anzunähern. Somit erhält man eine Repräsentation der zeitlichen Veränderungen der Messdaten als Petri-Netz. Um nun Anomalien zu finden können diese Petri-Netze  zum Beispiel mit dem k-nächste-Nachbarn-Algorithmus klassifiziert werden.

 

Da die Daten vorab gelabelt werden ist auch bekannt welches Petri-Netz Messungen mit Anomalien und ohne repräsentiert. Mit diesem Wissen kann mit einem separaten Trainingsset ein KNN-Modell für diese beiden Klassen erstellt und anschließend mit einem vom Trainingsset disjunkten Testset für die Klassifizierung von unbekannten Samples genutzt werden.