Aeon provides anomaly detection methods for identifying unusual patterns in time series at both series and collection levels.
Detect anomalous time series within a collection:
ClassificationAdapter - Adapts classifiers for anomaly detectionUse when: Have labeled normal data, want classification-based approach
OutlierDetectionAdapter - Wraps sklearn outlier detectors
Detect anomalous points or subsequences within a single time series.
Use similarity metrics to identify anomalies:
CBLOF - Cluster-Based Local Outlier FactorUse when: Anomalies form sparse clusters
KMeansAD - K-means based anomaly detection
Use when: Normal patterns cluster well
LeftSTAMPi - Left STAMP incremental
Use when: Streaming data, need online detection
STOMP - Scalable Time series Ordered-search Matrix Profile
Use when: Discord discovery, motif detection
MERLIN - Matrix profile-based method
Use when: Large time series, need scalability
LOF - Local Outlier Factor adapted for time series
Use when: Anomalies in low-density regions
ROCKAD - ROCKET-based semi-supervised detection
Analyze statistical distributions:
COPOD - Copula-Based Outlier DetectionUse when: Multi-dimensional time series, complex dependencies
DWT_MLEAD - Discrete Wavelet Transform Multi-Level Anomaly Detection
Use isolation principles:
IsolationForest - Random forest-based isolationUse when: High-dimensional data, no assumptions about distribution
OneClassSVM - Support vector machine for novelty detection
Use when: Well-defined normal region, need robust boundary
STRAY - Streaming Robust Anomaly Detection
PyODAdapter - Bridges PyOD library to aeonfrom aeon.anomaly_detection import STOMP
import numpy as np
# Create time series with anomaly
y = np.concatenate([
np.sin(np.linspace(0, 10, 100)),
[5.0], # Anomaly spike
np.sin(np.linspace(10, 20, 100))
])
# Detect anomalies
detector = STOMP(window_size=10)
anomaly_scores = detector.fit_predict(y)
# Higher scores indicate more anomalous points
threshold = np.percentile(anomaly_scores, 95)
anomalies = anomaly_scores > threshold
Use: COPOD, DWT_MLEAD, IsolationForest
Subsequence anomalies (discords): Unusual patterns
Use: STOMP, LeftSTAMPi, MERLIN
Collective anomalies: Groups of points forming unusual pattern
Specialized metrics for anomaly detection:
from aeon.benchmarking.metrics.anomaly_detection import (
range_precision,
range_recall,
range_f_score,
roc_auc_score
)
# Range-based metrics account for window detection
precision = range_precision(y_true, y_pred, alpha=0.5)
recall = range_recall(y_true, y_pred, alpha=0.5)
f1 = range_f_score(y_true, y_pred, alpha=0.5)