docs-v2/content/flux/v0/stdlib/contrib/anaisdg/anomalydetection/mad.md

5.6 KiB

title description menu weight
anomalydetection.mad() function `anomalydetection.mad()` uses the median absolute deviation (MAD) algorithm to detect anomalies in a data set.
flux_v0_ref
name parent identifier
anomalydetection.mad contrib/anaisdg/anomalydetection contrib/anaisdg/anomalydetection/mad
301

anomalydetection.mad() uses the median absolute deviation (MAD) algorithm to detect anomalies in a data set.

Input data requires _time and _value columns. Output data is grouped by _time and includes the following columns of interest:

  • _value: difference between of the original _value from the computed MAD divided by the median difference.
  • MAD: median absolute deviation of the group.
  • level: anomaly indicator set to either anomaly or normal.
Function type signature
(<-table: stream[B], ?threshold: A) => stream[{C with level: string, _value_diff_med: D, _value_diff: D, _value: D}] where A: Comparable + Equatable, B: Record, D: Comparable + Divisible + Equatable

{{% caption %}} For more information, see Function type signatures. {{% /caption %}}

Parameters

threshold

Deviation threshold for anomalies.

table

Input data. Default is piped-forward data (<-).

Examples

Use the MAD algorithm to detect anomalies

import "contrib/anaisdg/anomalydetection"
import "sampledata"

sampledata.float()
    |> anomalydetection.mad(threshold: 1.0)

{{< expand-wrapper >}} {{% expand "View example input and output" %}}

Input data

_time *tag _value
2021-01-01T00:00:00Z t1 -2.18
2021-01-01T00:00:10Z t1 10.92
2021-01-01T00:00:20Z t1 7.35
2021-01-01T00:00:30Z t1 17.53
2021-01-01T00:00:40Z t1 15.23
2021-01-01T00:00:50Z t1 4.43
_time *tag _value
2021-01-01T00:00:00Z t2 19.85
2021-01-01T00:00:10Z t2 4.97
2021-01-01T00:00:20Z t2 -3.75
2021-01-01T00:00:30Z t2 19.77
2021-01-01T00:00:40Z t2 13.86
2021-01-01T00:00:50Z t2 1.86

Output data

MAD *_time _value _value_diff _value_diff_med level tag
16.330839 2021-01-01T00:00:00Z 1 11.015 11.015 anomaly t1
16.330839 2021-01-01T00:00:00Z 1 11.015 11.015 anomaly t2
MAD *_time _value _value_diff _value_diff_med level tag
4.410735 2021-01-01T00:00:10Z 0.9999999999999999 2.9749999999999996 2.975 normal t1
4.410735 2021-01-01T00:00:10Z 1.0000000000000002 2.9750000000000005 2.975 anomaly t2
MAD *_time _value _value_diff _value_diff_med level tag
8.22843 2021-01-01T00:00:20Z 1 5.55 5.55 anomaly t1
8.22843 2021-01-01T00:00:20Z 1 5.55 5.55 anomaly t2
MAD *_time _value _value_diff _value_diff_med level tag
1.6605119999999987 2021-01-01T00:00:30Z 0.9999999999999984 1.1199999999999974 1.1199999999999992 normal t1
1.6605119999999987 2021-01-01T00:00:30Z 1.0000000000000016 1.120000000000001 1.1199999999999992 anomaly t2
MAD *_time _value _value_diff _value_diff_med level tag
1.0155810000000007 2021-01-01T00:00:40Z 1 0.6850000000000005 0.6850000000000005 anomaly t1
1.0155810000000007 2021-01-01T00:00:40Z 1 0.6850000000000005 0.6850000000000005 anomaly t2
MAD *_time _value _value_diff _value_diff_med level tag
1.9051409999999995 2021-01-01T00:00:50Z 1 1.2849999999999997 1.2849999999999997 anomaly t1
1.9051409999999995 2021-01-01T00:00:50Z 1.0000000000000002 1.285 1.2849999999999997 anomaly t2

{{% /expand %}} {{< /expand-wrapper >}}