Statistical Forecast Functions
Overview
Reference
forecastforecast_stdevforecast_score_stdevforecast_score_deviationforecast_deviationthresholdTime
forecast()
forecast([string name]) object
Returns forecast object for the entity, metric, and tags in the current window. The object contains neighboring forecast periods based on time field calculated by subtracting 50% of the forecast period from the window center (windowTime).
If the name is specified, the forecast object is retrieved for the named forecast settings.
The object contains the following fields:
previous- Previous period value.next- Next period value.min- Minimum of the previous and the next period values.max- Maximum of the previous and the next period values.linear- Linearly interpolated value between previous and next periods based ontimefield.windowTime- Window center time calculated as average of first and last timestamps in the current window.time- Forecast time calculated aswindowTime - 0.50*forecast_series_period.previousTime- Previous period start time.nextTime- Next period start time.
| Parameter | Time | Date |
|---|---|---|
command.time | 1550082342000 | 2019-02-13 18:25:56 |
previousTime | 1550080800000 | 2019-02-13 18:00:00 |
nextTime | 1550081700000 | 2019-02-13 18:15:00 |
windowTime | 1550081922000 | 2019-02-13 18:18:42 |
time | 1550081472000 | 2019-02-13 18:11:12 |
The violates() function in the forecast object returns true if the input value deviates by more than the specified delta from the min and max range. The delta must be a non-negative number.
violates(double a, double delta) {
return a < min - delta || a > max + delta;
}

Example:
violates(avg(), 10)
forecast_stdev
forecast_stdev() double
Returns forecast standard deviation.
forecast_score_stdev
Returns the standard deviation of actual aggregated values from the best fitting forecast values within the scoring interval.
Scoring is a procedure that identifies parameters that produce the best fitting forecast with the smallest standard deviation from observed aggregated values.
forecast_score_stdev(string name) double
forecast_score_deviation
forecast_score_deviation(string name, double a) double
Returns the difference between a number a (such as the last value, or moving average avg()) and the forecast().interpolated value, divided by the forecast score standard deviation.
The function returns NaN if either forecast or forecast score standard deviation cannot be retrieved, or if the standard deviation is zero.
The formula is:
(a - forecast(name).interpolated/forecast_score_stdev(name)
forecast_deviation
forecast_deviation(number a) double
Returns difference between a number a and the forecast().interpolated value, divided by the forecast standard deviation.
(a - forecast().interpolated)/forecast_stdev()
thresholdTime
thresholdTime(number min, number max [, string interval]) long
Returns Unix time in milliseconds when the stored forecast value is outside of the (min, max) range for the first time during time interval interval.
interval is specified as count and unit, for example 1 WEEK. If interval is not specified, the function checks all forecast values in the future.
Thresholds min and max are ignored by the function if either is set to null. If both min and max are specified, the following rules apply:
- If threshold
maxis equal or greater thanmin, the function returns time when the forecast value is outside of the specified range. - If threshold
minexceedsmax, the function returns time when the forecast value is within the specified range.
The function returns null if no stored forecast is found in the database.
Example
/* Returns time, within the next 6 hours, when the forecast exceeds 90.
Returns `null`, if all forecast values are below 90 or the violation occurs after the `6 HOUR` window. */
thresholdTime(null, 90, '6 HOUR')
Example Table
Current time is 2018-Jul-07 15:00, or 1530975600000 in Unix time (milliseconds).
Forecast Values:
| Value | Date | Time | Note |
|---|---|---|---|
70 | 2018-Jul-08 15:00 | 1530975600000 | 1 day from now |
80 | 2018-Jul-09 15:00 | 1531148400000 | 2 days from now |
90 | 2018-Jul-10 15:00 | 1531234800000 | 3 days from now |
100 | 2018-Jul-16 15:00 | 1531753200000 | 9 days from now |
/* Returns 1531753200000 (2018-Jul-16 15:00)
First time when the forecast 100 exceeds 'max' threshold 95 */
thresholdTime(null, 95)
/* Returns null. No forecast value exceeds 120. */
thresholdTime(null, 120)
/* Returns null. No forecast value exceeds 95 within the next 7 days, by 2018-Jul-14 15:00. */
thresholdTime(null, 95, '7 DAY')
/* Returns 1531234800000 (2018-Jul-10 15:00).
First time when the forecast 90 exceeds 'max' threshold 80.
Forecast 80 on 2018-Jul-09 15:00 is ignored as not exceeding the threshold. */
thresholdTime(null, 80, '7 DAY')
/* Returns 1530975600000 (2018-Jul-08 15:00).
First time when the forecast 70 is below 'min' threshold 80. */
thresholdTime(80, null, '7 DAY')
/* Returns 1531753200000 (2018-Jul-16 15:00)
Outside range check: case when 'max' threshold is greater than 'min' threshold.
First time when the forecast 100 is either below 70 OR above 90. */
thresholdTime(70, 90)
/* Returns 1531148400000 (2018-Jul-09 15:00)
Within range check: case when 'min' threshold is greater than 'max' threshold.
First time when the forecast 80 is BOTH above 'max' threshold 70 AND below 'min' threshold 90. */
thresholdTime(90, 70)
/* Returns 1531148400000 (2018-Jul-09 15:00)
Case when 'min' threshold equals 'max' threshold.
First time when the forecast 80 is either below 70 (false) OR above 70 (true). */
thresholdTime(70, 70)