Wie erkennt man Kraftstoffdiebstahl und -befüllung mithilfe der ML.NET-Spike-Erkennung mit verrauschten Sensordaten?
Posted: 08 Jan 2025, 07:33
Ich arbeite an einem Projekt zur Erkennung von Kraftstoffdiebstahl und Tankvorgängen anhand verrauschter Sensordaten mithilfe von ML.NET. Die Sensordaten umfassen zeitgestempelte Kraftstoffstand- und Geschwindigkeitswerte, enthalten jedoch häufig Rauschen, was den Erkennungsprozess zu einer Herausforderung macht.
Ich implementieren einen Spitzenerkennungsalgorithmus mithilfe der von ML.NET bereitgestellten DetectSpikeBySsa-Methode . Unten ist eine vereinfachte Version meines Codes:
Das Ziel besteht darin:
Für Vorschläge, Erkenntnisse oder Beispiele wären wir sehr dankbar!
Ich implementieren einen Spitzenerkennungsalgorithmus mithilfe der von ML.NET bereitgestellten DetectSpikeBySsa-Methode . Unten ist eine vereinfachte Version meines Codes:
Code: Select all
public static void DetectSpikeBySsa(IReadOnlyList data
, double confidence
, int pvalueHistoryLength
, int trainingWindowSize
, int seasonalityWindowSize)
{
var context = new MLContext();
var dataView = context.Data.LoadFromEnumerable(data);
var pipeline = context.Transforms.DetectSpikeBySsa(
outputColumnName: nameof(AnomalyPrediction.Prediction)
, inputColumnName: nameof(SensorData.Value)
, confidence: confidence // 99.0
, pvalueHistoryLength: pvalueHistoryLength // data.Count / 2
, trainingWindowSize: trainingWindowSize // data.Count
, seasonalityWindowSize: seasonalityWindowSize // data.Count / 4);
var model = pipeline.Fit(dataView);
var transformedData = model.Transform(dataView);
List results = [];
var predictions = context.Data.CreateEnumerable(transformedData, reuseRowObject: false).ToList();
for (int i = 0; i < predictions.Count; i++)
{
var sensorData = data[i];
var prediction = predictions[i];
var isAnomaly = prediction.Prediction[0] is 1;
Console.WriteLine($"{prediction.Prediction[0]}\t {prediction.Prediction[1]:f2} \t {prediction.Prediction[2]:f2}");
results.Add(new AnomalyDetectionResult
{
IsAnomaly = isAnomaly,
Value = sensorData.Value,
Speed = sensorData.Speed,
Timestamp = sensorData.Timestamp
});
if (!isAnomaly)
{
// Todo
}
}
}
- Kraftstoffdiebstahl als plötzlichen Abfall des Kraftstoffstands zu erkennen .
- Erkennen Sie die Kraftstofffüllung als plötzlichen Anstieg des Kraftstoffstands.
- Behandeln Sie Rauschen in Sensordaten effektiv, um Fehlalarme zu reduzieren.
- Feinabstimmung der Parameter „Konfidenz“, „pvalueHistoryLength“, „trainingWindowSize“ und „SeasonalityWindowSize“ für verrauschte Daten (möglicherweise hohe oder niedrige Werte).
- Rauschen herausfiltern Dabei wird sichergestellt, dass echte Spitzen (Diebstahl/Betankungsereignisse) erkannt werden.
- Unterscheidung zwischen gültigen Anomalien (Kraftstoffdiebstahl oder Betankung) und lärmbedingten Spitzen.
- Wie kann ich die Parameter von DetectSpikeBySsa optimieren, damit sie funktionieren? effektiv mit verrauschten Sensordaten?
- Gibt es Vorverarbeitungsschritte oder alternative Ansätze, um Rauschen besser zu verarbeiten, bevor die Spitzenerkennung angewendet wird?
- Gibt es einen geeigneteren Ansatz des maschinellen Lernens zur Erkennung dieser spezifischen Arten von Anomalien im Kraftstoffstand Daten?
Für Vorschläge, Erkenntnisse oder Beispiele wären wir sehr dankbar!