In diesem Beitrag geht es um die automatische Anomalieerkennung in Zeitreihen. Ziel ist es, fortlaufende Mess- und Prozessdaten darauf zu prüfen, ob das Systemverhalten vom erwarteten Normalbetrieb abweicht. Das Ergebnis ist ein kontinuierlicher Anomaliescore, der sich direkt für Warn- und Alarmstufen nutzen lässt. Inhaltlich knüpft der Beitrag an Anomalieerkennung in Zeitreihen (Teil 1) an. Dort wurde zur Erkennung auffälligen Verhaltens ein Ansatz mit robusten Features und einem Residualscore vorgestellt. Der zweite Teil ersetzt diese Featureebene durch ein neuronales Modell, während die Bewertung weiterhin über einen Residualscore erfolgt.
Der Ansatz ist score-basiert und liefert keine harte Ja oder Nein Entscheidung, sondern einen kontinuierlichen Anomaliescore, der sich gut für Warn und Alarmstufen eignet. Ein CNN-Encoder verdichtet jedes hochfrequente Rohsignalfenster zu einem kompakten Vektor im Merkmalsraum (latent space). Darauf arbeitet ein Sequenzmodell (TCN oder GRU), das aus den bisherigen Vektoren den folgenden Vektor prognostiziert. Die Abweichung zwischen Vorhersage und Beobachtung, der Residualscore, ist das zentrale Anomaliesignal. Im Normalbetrieb bleibt er klein, bei Drift oder entstehendem Defekt steigt er an. Damit der Score robust gegenüber Ausreißern und Skalierungsunterschieden bleibt, erfolgt eine Normalisierung mit Median und MAD aus der Referenzphase. Schwellenwerte, zum Beispiel über Quantile, definieren anschließend Warn und Alarmstufen.

Als Datengrundlage dienen 2156 Dateien (Snapshots) aus dem IMS Bearings Dataset (NASA), Set 1. Jeder Snapshot umfasst einen 1 s Ausschnitt mit 20480 Messwerten pro Kanal und insgesamt liegen 8 Kanäle vor. Die Aufnahmen wurden im Abstand von 5 beziehungsweise 10 Minuten erstellt. Insgesamt ergeben sich 353.239.040 Amplitudenwerte (2156 × 20480 × 8). Pro Kanal entspricht das 44.154.880 Samples und im gezeigten Beispiel werden zwei Kanäle ausgewertet.
Warum Deep Learning in der Anomalieerkennung?
Deep Learning Modelle sind nicht automatisch besser. Sie werden dann interessant, wenn Muster komplexer sind als das, was ein lineares Modell stabil abbildet. Typische Fälle sind nichtlineare Dynamik, kombinierte Effekte, mehrere Kanäle oder sehr hochfrequente Rohsignale.
- Vorteil: Die Merkmalsrepräsentation wird gelernt und benötigt oft weniger Feature Engineering.
- Vorteil: Nichtlineare Abweichungen werden tendenziell besser erfasst.
- Nachteil: Der Rechenaufwand ist höher und es gibt mehr Hyperparameter.
- Nachteil: Erklärbarkeit muss aktiv gestaltet werden, zum Beispiel über Score, Kalibrierung und Baselines.
Wichtig ist der Output. Statt einer binären Entscheidung liefert das Modell einen kontinuierlichen Anomaliescore. Das passt zu realen Betriebsentscheidungen wie Trendbewertung, Priorisierung und Alarmstufen.
Modellidee: CNN-Encoder und Forecast im Merkmalsraum
Die Pipeline ist modular aufgebaut. Der zentrale Schritt ist der Übergang in einen kompakten Merkmalsraum. Ein CNN-Encoder fasst jedes Rohsignalfenster, zum Beispiel 1 s bei 20 kHz, zu einem Vektor mit \(d\) Dimensionen zusammen. Dieser Vektor ist deutlich kleiner als das Originalsignal und enthält dennoch die für den Zustand relevanten Muster.
In Teil 1 wurden einfache, robuste Features verwendet, zum Beispiel Peak to Peak, RMS, Crest Factor, Kurtosis und Bandpower. Diese Größen sind gut interpretierbar und liefern oft schon eine brauchbare Baseline, d. h. einen einfachen Referenzansatz, der als Ausgangspunkt dient und spätere Modelle vergleichbar macht. Im Deep Learning Ansatz werden diese Features nicht manuell festgelegt; sie werden vom CNN-Encoder direkt aus den Rohdaten gelernt. Dadurch kann das Modell auch Kombinationen und Signalanteile nutzen, die in festen Features möglicherweise nicht explizit enthalten sind.
Der CNN-Encoder ist dabei mehr als eine reine Kompression. Er kann hochfrequente Strukturen wie Impulsfolgen oder lokale Muster extrahieren, die ein lineares Modell oder ein festes Feature Set nicht immer sauber abbildet. Damit wird die Prognose auf eine Repräsentation angewandt, die für die Zustandsänderungen des Systems empfindlich ist, aber gegenüber irrelevanten Signalanteilen robuster bleibt.
Forecast und Residualscore
Ein Forecast Modell arbeitet in diesem Merkmalsraum typischerweise stabiler als direkt auf den Rohpunkten. Statt 20480 Messwerten pro Snapshot wird zum Beispiel ein Vektor mit 64 Freiheitsgraden verarbeitet. Das reduziert den Einfluss von Rauschen, vereinheitlicht die Darstellung und erleichtert die Kalibrierung eines Residualscores.
Die Verarbeitung erfolgt dann in drei Schritten:
- Aus jedem Rohsnapshot erzeugt der CNN-Encoder einen Merkmalvektor.
- Ein Sequenzmodell, zum Beispiel TCN oder GRU, nutzt eine Folge solcher Vektoren und prognostiziert den nächsten Merkmalsvektor.
- Der Residualscore ist der Abstand zwischen Prognose und Beobachtung im Merkmalsraum und dient als Anomaliescore.
Im Normalbetrieb kann das Sequenzmodell den nächsten Zustand im Merkmalsraum gut vorhersagen, der Residualscore bleibt klein. Wenn sich das Systemverhalten verändert, zum Beispiel durch Drift oder einen entstehenden Defekt, passt die Vorhersage nicht mehr. Der Abstand zwischen vorhergesagtem und tatsächlichem Merkmalsvektor wächst und der Score steigt.
Trainingsziel und Leakageregel
Das Training erfolgt ausschließlich auf einer Referenzphase im Normalbetrieb. Schwellenwerte und Normalisierung werden ebenfalls nur aus dieser Referenzphase abgeleitet. Der restliche Verlauf wird erst danach gescored. Damit wird Data Leakage vermieden, denn Testdaten dürfen weder im Training noch in der Kalibrierung enthalten sein. Zur Illustration ein vereinfachter Codeausschnitt:
# --- Training ---
model = RawForecastResidualModel(in_ch=X_raw.shape[1], cfg=cfg).to(device)
opt = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=1e-4)
epoch_max = int(cfg["training"].get("epoch_max", 10))
loss_eps = float(cfg["training"].get("loss_eps", 1e-4))
for epoch in range(1, epoch_max + 1):
loss = train_one_epoch(model, train_loader, opt, device=device)
print(f"epoch {epoch:02d} loss={loss:.6f}")
if loss < loss_eps:
print("early stop")
break
Scoredefinition, Normalisierung und Schwellenwertsetzung sind klar getrennte Schritte.
# --- Evaluation ---
scores = compute_latent_residual_scores(model, dataset, device=device)
# robuste Normalisierung über Referenzphase:
scores_ref = scores[:n_train]
med = np.median(scores_ref)
mad = np.median(np.abs(scores_ref - med)) + 1e-12
score_robust = np.abs(scores - med) / mad
# Schwelle als Quantil der Referenzphase:
q = 0.995
thr = np.quantile(score_robust[:n_train], q)
is_anom = score_robust > thr
Beispiel: IMS Bearing Dataset (Deep-Learning-Variante)
Der Datensatz ist identisch zu Teil 1 (NASA/IMS, Set 1, Bearing 3). Trainiert wird auf einer Referenzphase (z. B. 30–40 % der Zeitreihe), der Rest dient der Bewertung.

Alarmstufen: Warn und Alarm
Auch hier erfolgt die Kalibrierung der Schwellenwerte über die Referenzphase, zum Beispiel über Quantile. Zusätzlich lässt sich eine Warnstufe definieren, etwa bei 98,5 Prozent, während die Alarmstufe bei 99,5 Prozent liegt. In der Grafik werden Überschreitungen innerhalb der Trainingsphase für die Darstellung maskiert. Dadurch wird klar erkennbar, ab welchem Zeitpunkt der Score erstmals außerhalb des Normalbetriebs liegt.

TCN oder GRU: was ist sinnvoller?
Beide Sequenzmodelle sind praxistauglich und eignen sich für Forecastaufgaben im Merkmalsraum.
- TCN (Temporal Convolutional Network) ist effizient, gut skalierbar und in vielen Settings sehr stabil.
- GRU (Gated Recurrent Unit) ist flexibel, kann längere Abhängigkeiten modellieren und reagiert oft empfindlicher auf Hyperparameter.
In der IMS Auswertung zeigt sich in diesem Beispiel eine klare Trennung zwischen Normalphase und Ausfall. Hier war die GRU Variante im Training deutlich schneller und erreichte einen niedrigeren Loss. Das Ergebnis hängt vom Datensatz und der Parametrisierung ab, daher ist ein direkter Vergleich unter identischen Bedingungen sinnvoll.
Die folgenden Zeiten stammen aus zwei Runs auf der GPU mit CUDA auf einer NVIDIA GeForce RTX 3080. Sie dienen als Orientierung und sind keine absoluten Benchmarks.
| Modell | X_raw build | Training | Scoring | Finaler Loss |
|---|---|---|---|---|
| TCN | 14.44 s | 114.25 s | 4.40 s | 0.000061 (epoch 25) |
| GRU | 14.42 s | 23.26 s | 4.29 s | 0.000001 (epoch 5, early stop) |

Fazit
Die Deep Learning Variante übernimmt den Residualscore-Gedanken aus Teil 1, ersetzt aber die handgebauten Features durch einen CNN-Encoder. Dadurch lassen sich komplexe Muster in Rohsignalen erfassen; der Preis ist höherer Rechenaufwand, der sich mit GPU gut beherrschen lässt.
Für einfache Fälle reicht der Feature-Ansatz aus. Deep Learning lohnt sich vor allem bei komplexen Signalstrukturen oder mehreren Kanälen. Entscheidend bleiben eine saubere Referenzphase, eine nachvollziehbare Scoredefinition und eine klare Kalibrierung der Schwellen.
Referenzen und Links
- IMS Bearings Dataset (NASA)
- TCN: Bai, Kolter, Koltun (2018), An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling (arXiv)
- TCN Referenzcode: locuslab/TCN (GitHub)
- GRU: Cho et al. (2014), Learning Phrase Representations using RNN Encoder Decoder for Statistical Machine Translation (arXiv)
- GRU Implementierung: torch.nn.GRU (PyTorch Dokumentation)
Hinweis: Der Beitrag wurde mit Unterstützung von ChatGPT erstellt. Inhaltliche Prüfung, Auswahl und Redaktion liegen beim Autor.