← Models and prediction modes

Purpose and workload fit

Groups observations by time of day and optionally weekday, then uses a decayed percentile per bucket. Useful for weekday/weekend demand patterns.

History and runtime requirements

A minimum of four observations. Weekday profiles need sufficient weeks and bucket samples; sparse buckets fall back to time of day, then the overall percentile.

Inputs must be regularly sampled, gap-free, and finite. Outputs retain the metric unit, such as CPU cores, memory bytes, or requests per second. The sample interval determines the duration of a step. Minimum history permits execution; it does not establish forecast quality.

This method does not use covariates; target metrics are forecast separately.

Parameter reference

On narrow screens, swipe the parameter table horizontally to read all columns.

Parameter / typeDefault / range / unitMeaning and use
percentile
float
90
≥ 1; ≤ 100
Historical percentile on a 1–100 scale; higher values give more conservative estimates.
bucket_minutes
int
60
≥ 1; ≤ 720; minutes
Bucket width in minutes; must divide 1440 exactly.
by_weekday
bool
true
No additional range
Keep separate weekday buckets; sparse buckets fall back to time of day, then overall history.
half_life_days
float
14
≥ 0; ≤ 365; days
Historical sample weight halves after this many days; zero disables decay.
min_samples_per_bucket
int
6
≥ 1; ≤ 100000
Minimum observations required to trust a bucket before falling back.
utc_offset_minutes
int
480
≥ -720; ≤ 840; minutes
Fixed UTC offset for bucket times; 480 means UTC+8.
safety_margin
float
0
≥ 0; ≤ 5
Multiply the result by 1+safety_margin; 0.1 adds 10%.

Configuration example

Edit parameters in Algorithm management. This is a parameter object, not a complete config.yaml. Seasonal examples assume five-minute sampling; adjust for your actual interval. Omitted optional values use the defaults above.

JSON
{
  "percentile": 90,
  "bucket_minutes": 60,
  "by_weekday": true,
  "half_life_days": 14,
  "utc_offset_minutes": 480
}

Tuning and tradeoffs

bucket_minutes must divide 1440; smaller buckets need more history. utc_offset_minutes=480 groups by UTC+8. It is a fixed offset, not automatic daylight-saving handling.

Shared parameters: shifts and quantiles

Parameter / typeDefault / range / unitMeaning and use
reset_on_change
bool
false
No additional range
Use history after a detected level shift, preserving enough points for the underlying method.
change_threshold
float
8
≥ 3; ≤ 50
Minimum shift relative to robust noise; used only with reset_on_change.
change_min_shift
float
0.2
≥ 0; ≤ 5
Minimum relative level shift; 0.2 means 20%. Used only with reset_on_change.
quantile_level
float
0
≥ 0; ≤ 0.99
Zero disables conformal calibration; otherwise must be above 0.5 and at most 0.99. Calibrates an upper forecast using earlier forecast errors.
calibration_windows
int
8
≥ 3; ≤ 50
Historical windows for conformal calibration; more windows add forecast calls and history requirements.

quantile_level uses a 0–1 scale; percentile uses 1–100. Calibration runs extra historical forecasts. Check history and runtime budgets before increasing windows; coverage is an evaluation target, not a guarantee.

Use in a module

  1. Save parameters and check history, sample interval, and horizon.
  2. Enable module prediction. Fixed mode runs the selected method; dynamic mode uses centrally enabled methods.
  3. Run rolling backtests and earn version promotion before adoption. Re-run backtests after changes affecting model identity.
  4. Review error, peak underestimation, runtime, and adoption reasons in Observe or Recommend before separately authorizing admission and replica actions.

For insufficient history, invalid settings, timeouts, or invalid output, inspect run reasons. Without eligible forecasts, the module follows its schedules, fallback, and protection rules.

Backtesting and evaluation · Recommendations and look-ahead