15 releases (4 breaking)
new 0.6.2 | Nov 10, 2024 |
---|---|
0.6.1 | Nov 9, 2024 |
0.5.4 | Oct 28, 2024 |
0.4.3 | Oct 18, 2024 |
0.2.0 | Jun 5, 2024 |
#149 in Math
1,682 downloads per month
Used in 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