summaryrefslogtreecommitdiffstats
path: root/web/api/queries/des/README.md
blob: b12751a40477f7a7d96694bf63e76851f8f0a6cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<!--
title: "double exponential smoothing"
sidebar_label: "double exponential smoothing"
custom_edit_url: https://github.com/netdata/netdata/edit/master/web/api/queries/des/README.md
learn_status: "Published"
learn_topic_type: "References"
learn_rel_path: "Developers/Web/Api/Queries"
-->

# double exponential smoothing

Exponential smoothing is one of many window functions commonly applied to smooth data in signal
processing, acting as low-pass filters to remove high frequency noise.

Simple exponential smoothing does not do well when there is a trend in the data.
In such situations, several methods were devised under the name "double exponential smoothing"
or "second-order exponential smoothing.", which is the recursive application of an exponential
filter twice, thus being termed "double exponential smoothing".

In simple terms, this is like an average value, but more recent values are given more weight
and the trend of the values influences significantly the result.

> **IMPORTANT**
>
> It is common for `des` to provide "average" values that far beyond the minimum or the maximum
> values found in the time-series.
> `des` estimates these values because of it takes into account the trend.

This module implements the "Holt-Winters double exponential smoothing".

Netdata automatically adjusts the weight (`alpha`) and the trend (`beta`) based on the number
of values processed, using the formula:

```
window = max(number of values, 15)
alpha  = 2 / (window + 1)
beta   = 2 / (window + 1)
```

You can change the fixed value `15` by setting in `netdata.conf`:

```
[web]
   des max window = 15
```

## how to use

Use it in alarms like this:

```
 alarm: my_alarm
    on: my_chart
lookup: des -1m unaligned of my_dimension
  warn: $this > 1000
```

`des` does not change the units. For example, if the chart units is `requests/sec`, the result
will be again expressed in the same units. 

It can also be used in APIs and badges as `&group=des` in the URL.

## Examples

Examining last 1 minute `successful` web server responses:

-   ![](https://registry.my-netdata.io/api/v1/badge.svg?chart=web_log_nginx.response_statuses&options=unaligned&dimensions=success&group=min&after=-60&label=min)
-   ![](https://registry.my-netdata.io/api/v1/badge.svg?chart=web_log_nginx.response_statuses&options=unaligned&dimensions=success&group=average&after=-60&label=average&value_color=yellow)
-   ![](https://registry.my-netdata.io/api/v1/badge.svg?chart=web_log_nginx.response_statuses&options=unaligned&dimensions=success&group=ses&after=-60&label=single+exponential+smoothing&value_color=yellow)
-   ![](https://registry.my-netdata.io/api/v1/badge.svg?chart=web_log_nginx.response_statuses&options=unaligned&dimensions=success&group=des&after=-60&label=double+exponential+smoothing&value_color=orange)
-   ![](https://registry.my-netdata.io/api/v1/badge.svg?chart=web_log_nginx.response_statuses&options=unaligned&dimensions=success&group=max&after=-60&label=max)

## References

-   <https://en.wikipedia.org/wiki/Exponential_smoothing>.