# series_outliers()

Scores anomaly points in a series.

The function takes an expression with a dynamic numerical array as input, and generates a dynamic numeric array of the same length. Each value of the array indicates a score of a possible anomaly, using "Tukey's test". A value greater than 1.5 in the same element of the input indicates a rise or decline anomaly. A value less than -1.5, indicates a decline anomaly.

## Syntax

`series_outliers(`

*x*`, `

*kind*`, `

*ignore_val*`, `

*min_percentile*`, `

*max_percentile*`)`

## Arguments

*x*: Dynamic array cell that is an array of numeric values*kind*: Algorithm of outlier detection. Currently supports`"tukey"`

(traditional "Tukey") and`"ctukey"`

(custom "Tukey"). Default is`"ctukey"`

*ignore_val*: Numeric value indicating missing values in the series. Default is double(null). The score of nulls and ignore values is set to`0`

*min_percentile*: For calculating the normal inter-quantile range. Default is 10, custom values supported are in range`[2.0, 98.0]`

(`ctukey`

only)*max_percentile*: same, default is 90, custom values supported are in range`[2.0, 98.0]`

(ctukey only)

The following table describes differences between `"tukey"`

and `"ctukey"`

:

Algorithm | Default quantile range | Supports custom quantile range |
---|---|---|

`"tukey"` |
25% / 75% | No |

`"ctukey"` |
10% / 90% | Yes |

Tip

The best way to use this function is to apply it to the results of the make-series operator.

## Example

A time series with some noise creates outliers. If you would like to replace those outliers (noise) with the average value, use series_outliers() to detect the outliers, and then replace them.

```
range x from 1 to 100 step 1
| extend y=iff(x==20 or x==80, 10*rand()+10+(50-x)/2, 10*rand()+10) // generate a sample series with outliers at x=20 and x=80
| summarize x=make_list(x),series=make_list(y)
| extend series_stats(series), outliers=series_outliers(series)
| mv-expand x to typeof(long), series to typeof(double), outliers to typeof(double)
| project x, series , outliers_removed=iff(outliers > 1.5 or outliers < -1.5, series_stats_series_avg , series ) // replace outliers with the average
| render linechart
```