series_periods_validate()
Checks whether a time series contains periodic patterns of given lengths.
Often a metric measuring the traffic of an application is characterized by a weekly or daily period. This period can be confirmed by running series_periods_validate() that checks for a weekly and daily period.
The function takes as input a column that contains a dynamic array of time series (typically the resulting output of make-series operator), and one or more real numbers that define the lengths of the periods to validate.
The function outputs two columns:
- periods: A dynamic array that contains the periods to validate (supplied in the input).
- scores: A dynamic array that contains a score between 0 and 1. The score shows the significance of a period in its respective position in the periods array.
Syntax
series_periods_validate(x, period1 [ , period2 , . . . ] )
Arguments
- x: Dynamic array scalar expression that is an array of numeric values, typically the resulting output of make-series or make_list operators.
- period1, period2, and so on:
realnumbers specifying the periods to validate, in units of the bin size. For example, if the series is in 1h bins, a weekly period is 168 bins.
Important
The minimal value for each of the period arguments is 4 and the maximal is half of the length of the input series. For a period argument outside these bounds, the output score will be 0.
The input time series must be regular, that is, aggregated in constant bins, and is always the case if it has been created using make-series. Otherwise, the output is meaningless.
The function accepts up to 16 periods to validate.
Example
The following query embeds a snapshot of a month of an application’s traffic, aggregated twice a day (the bin size is 12 hours).
print y=dynamic([80,139,87,110,68,54,50,51,53,133,86,141,97,156,94,149,95,140,77,61,50,54,47,133,72,152,94,148,105,162,101,160,87,63,53,55,54,151,103,189,108,183,113,175,113,178,90,71,62,62,65,165,109,181,115,182,121,178,114,170])
| project x=range(1, array_length(y), 1), y
| render linechart
If you run series_periods_validate() on this series to validate a weekly period (14 points long) it results in a high score, and with a 0 score when you validate a five-day period (10 points long).
print y=dynamic([80,139,87,110,68,54,50,51,53,133,86,141,97,156,94,149,95,140,77,61,50,54,47,133,72,152,94,148,105,162,101,160,87,63,53,55,54,151,103,189,108,183,113,175,113,178,90,71,62,62,65,165,109,181,115,182,121,178,114,170])
| project x=range(1, array_length(y), 1), y
| project series_periods_validate(y, 14.0, 10.0)
| series_periods_validate_y_periods | series_periods_validate_y_scores |
|---|---|
| [14.0, 10.0] | [0.84,0.0] |
Feedback
Submit and view feedback for