Skip to main content

Multi-model engine and per-SKU selection

How the engine runs several models in parallel (CNNQR, DeepAR, Prophet, NPTS, ARIMA, ETS) and picks the best performer for each SKU.

Why no single model always wins

There is no universally superior forecasting model. A model that captures annual seasonality well may fail on intermittent series; one designed for large data volumes may overfit on short histories. The question is not "which model is the best?" but "which model is the best for this SKU, right now?"

AInventory answers that question by running multiple models in parallel and letting the data decide. The engine compares each candidate's performance against the actual history of each series and selects the winner based on error metrics (RMSE and MAPE). If the series behavior changes in the future, the system retrains and may choose a different model.

The available models

The table describes each model's main strength. The engine always makes the final per-SKU selection; this view is a guide.

ModelFamilyWhen it performs best
CNNQR (CNN · Quantile Regression)Causal neural networkHigh-volume related series; complex demand with non-linear patterns. Produces prediction intervals (quantiles), not just a point estimate.
DeepAR (Recurrent Neural Network)Recurrent neural networkLarge sets of series with external metadata (price, promotions). Leverages cross-SKU information to improve individual forecasts.
ProphetBayesian structural modelSeries with a clear trend and well-defined daily, weekly, or annual seasonality, provided there are enough historical cycles.
NPTS (Non-Parametric Time Series)Non-parametricIntermittent or sparse series where parametric models overfit. Scales well to large portfolios.
ARIMAClassical autoregressiveRelatively simple series, without multiple seasonality patterns, and with enough history to estimate parameters.
ETS (Exponential Smoothing)Exponential smoothingStrong seasonality with additive or multiplicative trend; performs well when the history is not very long.
Level of detail

This page covers the engine at a high level. The exact per-SKU selection mechanism (how validation data are partitioned, how models are compared, and when retraining is triggered) is documented in depth in the engine administration guide.

TODO: link to the engine administration guide when available.

Special cases the engine handles

Beyond model selection, the engine has built-in capacity to handle situations that break the basic assumptions of a standard time series:

  • Intermittent demand: periods with zero sales interspersed with peaks; the model does not interpret zeros as a downward trend.
  • Multiple seasonality: a SKU can have a weekly cycle and an annual cycle simultaneously.
  • Product launches (phase-in): products with no prior history or very short history; the engine borrows information from similar products to start with a better baseline.
  • Discontinuations (phase-out): demand falls structurally; the engine recognizes the signal and does not interpret it as noise.
  • Promotions: point-in-time events that inflate demand; if properly labeled, the model does not carry that peak forward as if it were base demand.
  • Systematic bias recalibration: if a model consistently over- or under-estimates, the engine applies bias correction before delivering the forecast.

Relationship with the metrics

The engine compares models using RMSE and MAPE. To understand what each metric measures and why they are used together, see Accuracy and training metrics.

The terms CNNQR, DeepAR, phase-in, phase-out, and intermittent demand have entries in the glossary.