20 releases (7 breaking)
0.9.0 | Jan 14, 2025 |
---|---|
0.8.0 | Dec 23, 2024 |
0.7.0 | Nov 25, 2024 |
0.3.1 | Jul 30, 2024 |
#4 in #time-series-analysis
371 downloads per month
Used in 2 crates
(via augurs)
90KB
2.5K
SLoC
Outlier detection
This crate provides implementations of time series outlier detection, the problem of determining whether one time series behaves differently to others in a group. (This is different to anomaly detection, which aims to determine if one or more samples appears to be different within a time series).
Two implementations are planned:
- DBSCAN: implemented
- Median Absolute Difference (MAD): not yet implemented (see GitHub issue)
Example
use augurs::outlier::{OutlierDetector, DbscanDetector};
// Each slice inside `data` is a time series.
// The third one behaves differently at indexes 2 and 3.
let data: &[&[f64]] = &[
&[1.0, 2.0, 1.5, 2.3],
&[1.9, 2.2, 1.2, 2.4],
&[1.5, 2.1, 6.4, 8.5],
];
let detector = DbscanDetector::with_sensitivity(0.5)
.expect("sensitivity is between 0.0 and 1.0");
let processed = detector.preprocess(data)
.expect("input data is valid");
let outliers = detector.detect(&processed)
.expect("detection succeeds");
assert_eq!(outliers.outlying_series.len(), 1);
assert!(outliers.outlying_series.contains(&2));
assert!(outliers.series_results[2].is_outlier);
assert_eq!(outliers.series_results[2].scores, vec![0.0, 0.0, 1.0, 1.0]);
Dependencies
~6MB
~119K SLoC