predictive-maintenance

German Version

Beschreibung der Funtkionsweise der Anomalie-Erkennung mit Grenzwerten V5

Beschreibung der Funktion: detect_anomalies_thresholds

Zweck

Die Funktion dient der Erkennung von Anomalien in Sensordaten basierend auf definierten oberen und unteren Grenzwerten. Diese Grenzwerte werden aus einer MongoDB-Collection abgerufen und gruppieren die Sensoren nach einer Sensorgruppe (sensorGroup), die in der Fahrzeugdatenbank (vehicles) hinterlegt ist. Anomalien werden für jeden Sensortyp identifiziert und sowohl im DataFrame markiert als auch separat ausgegeben.


Eingabeparameter

  1. sensor_df (Pandas DataFrame):
    • Enthält die Sensordaten mit den Spalten:
      • sensorType: Typ des Sensors (z. B. Temperatur, Druck).
      • value: Gemessener Wert des Sensors.
  2. db (MongoDB-Datenbankverbindung):
    • Die MongoDB-Verbindung, um Grenzwerte (sensorThresholds) und Fahrzeugdaten (vehicles) abzurufen.
  3. vehicle_id (string):
    • Die Fahrzeug-ID, die zur Identifikation der zugehörigen Sensordaten verwendet wird.

Rückgabewerte

  1. sensor_df (Pandas DataFrame):
    • Das ursprüngliche DataFrame mit einer zusätzlichen Spalte anomaly, die Anomalien markiert:
      • 1 für Anomalien.
      • 0 für normale Werte.
  2. anomalies_dict (list of dict):
    • Eine Liste von Dictionaries, die die erkannten Anomalien enthält:
      • timestamp: Zeitpunkt der Messung.
      • sensorType: Typ des Sensors.
      • value: Wert des Sensors.
      • anomaly: Markierung als Anomalie (1).

Ablauf und Funktionsweise

  1. Abrufen der Fahrzeugdaten:
    • Die Funktion ruft die Fahrzeugdaten aus der MongoDB-Collection vehicles ab.
    • Wenn das Feld sensorGroup nicht existiert, wird ein Fehler ausgelöst:
      vehicle_data = db["vehicles"].find_one({"vehicleId": vehicle_id}, {"_id": 0, "sensorGroup": 1})
      if not vehicle_data or "sensorGroup" not in vehicle_data:
          raise ValueError(f"Das Fahrzeug mit ID {vehicle_id} enthält kein Feld 'sensorGroup'.")
      
    • Die sensorGroup wird extrahiert.
  2. Abrufen der Grenzwerte:
    • Basierend auf der sensorGroup werden die Grenzwerte (sensorThresholds) aus der MongoDB-Collection sensorThresholds abgerufen.
    • Wenn keine Grenzwerte vorhanden sind, wird ein Fehler ausgelöst:
      threshold_data = db["sensorThresholds"].find_one({"sensorGroup": sensor_group}, {"_id": 0, "thresholds": 1})
      if not threshold_data or "thresholds" not in threshold_data:
          raise ValueError(f"Keine Grenzwerte für sensorGroup {sensor_group} gefunden.")
      
  3. Markierung von Anomalien:
    • Für jeden sensorType im DataFrame werden die oberen und unteren Grenzwerte geprüft:
      • Werte unterhalb des minimalen Grenzwerts oder oberhalb des maximalen Grenzwerts werden als Anomalien markiert.
        is_anomaly = (sensor_df["sensorType"] == sensor_type) & (
          (sensor_df["value"] < min_value) | (sensor_df["value"] > max_value)
        )
        sensor_df.loc[is_anomaly, "anomaly"] = 1
        
    • Das Feld anomaly wird mit 1 für Anomalien und 0 für normale Werte gesetzt.
  4. Extraktion der Anomalien:
    • Alle Zeilen, bei denen anomaly == 1, werden in ein separates Dictionary konvertiert:
      anomalies = sensor_df[sensor_df["anomaly"] == 1]
      anomalies_dict = anomalies.to_dict(orient="records")
      

Beispielablauf

1. Input-Daten

Sensordaten (sensor_df): | timestamp | sensorType | value | |———————|————–|——-| | 2024-01-01 12:00:00 | temperature | 150 | | 2024-01-01 12:01:00 | pressure | 350 | | 2024-01-01 12:02:00 | vibration | 10 |

Grenzwerte (sensorThresholds):

{
    "sensorGroup": "groupA",
    "thresholds": {
        "temperature": {"min": -20, "max": 120},
        "pressure": {"min": 0, "max": 300},
        "vibration": {"min": 0, "max": 50}
    }
}

2. Ergebnis

Aktualisiertes sensor_df: | timestamp | sensorType | value | anomaly | |———————|————–|——-|———| | 2024-01-01 12:00:00 | temperature | 150 | 1 | | 2024-01-01 12:01:00 | pressure | 350 | 1 | | 2024-01-01 12:02:00 | vibration | 10 | 0 |

anomalies_dict:

[
    { "timestamp": "2024-01-01 12:00:00", "sensorType": "temperature", "value": 150, "anomaly": 1 },
    { "timestamp": "2024-01-01 12:01:00", "sensorType": "pressure", "value": 350, "anomaly": 1 }
]

Anwendungsbeispiele


Zusammenfassung

Die Funktion detect_anomalies_thresholds ist ein robuster Mechanismus zur Anomalieerkennung, der flexibel Grenzwerte aus einer Datenbank abruft und diese gruppenbasiert anwendet. Sie integriert nahtlos Sensordaten, Fahrzeuginformationen und Grenzwerte, um aussagekräftige Ergebnisse zu liefern, die direkt für die Überwachung und Analyse genutzt werden können.

Erweiterungen

Die Grenzwert-basierte Methode kann durch folgende Techniken ergänzt werden:

  1. Dynamische Grenzwerte: Verwende statistische Verfahren wie z. B. Mittelwert ± 2 Standardabweichungen, um adaptive Grenzwerte zu definieren.
  2. Kontextbezogene Anomalien: Berücksichtige andere Variablen (z. B. Temperatur in Kombination mit Luftfeuchtigkeit).
  3. Zeitraum-basierte Analyse: Identifiziere, ob Anomalien in bestimmten Zeiträumen oder unter besonderen Bedingungen gehäuft auftreten.

Zusammenfassung

Die Anomalieerkennung anhand von oberen und unteren Grenzwerten ist eine effektive Methode zur Identifikation von ungewöhnlichen Werten in Sensordaten. Sie ist besonders geeignet, wenn klare Schwellenwerte bekannt sind. Für dynamische und komplexere Szenarien kann die Methode erweitert oder durch maschinelles Lernen ergänzt werden.


Lizenz

Autor: Jörg Harzmann

Dieser Inhalt ist unter einer CC BY-NC Lizenz veröffentlicht. Jeglicher Quellcode ist urheberrechtlich geschützt!