Skip to main content

Intermittent Demand Models

Specialized models for sparse, lumpy demand patterns with many zeros.

ModelDescription
CrostonClassicClassic Croston method for sparse demand
CrostonOptimizedCroston with optimized smoothing parameters
CrostonSBASyntetos-Boylan Approximation (bias-corrected)
ADIDAAggregate-Disaggregate Intermittent Demand
IMAPAIntermittent Multiple Aggregation Prediction
TSBTeunter-Syntetos-Babai (trending intermittent)
Showing 6 of 6

CrostonClassic

Classic Croston method that separately forecasts demand size and inter-arrival times.

Example

SELECT * FROM anofox_fcst_ts_forecast(
'spare_parts',
'date',
'demand',
'CrostonClassic',
30,
MAP{}
);

Best for: Sparse demand, many zeros, spare parts inventory.


CrostonOptimized

Croston method with optimized smoothing parameters.

Example

SELECT * FROM anofox_fcst_ts_forecast(
'spare_parts',
'date',
'demand',
'CrostonOptimized',
30,
MAP{}
);

Best for: Better variance estimation than classic Croston.


CrostonSBA

Syntetos-Boylan Approximation - bias-corrected Croston.

Example

SELECT * FROM anofox_fcst_ts_forecast(
'low_frequency',
'date',
'demand',
'CrostonSBA',
30,
MAP{}
);

Best for: Reduced bias, low-frequency demand.


ADIDA

Aggregate-Disaggregate Intermittent Demand Approach.

Example

SELECT * FROM anofox_fcst_ts_forecast(
'very_sparse',
'date',
'demand',
'ADIDA',
30,
MAP{}
);

Best for: Very sparse demand, complex intermittent patterns.


IMAPA

Intermittent Multiple Aggregation Prediction Algorithm.

Example

SELECT * FROM anofox_fcst_ts_forecast(
'complex_intermittent',
'date',
'demand',
'IMAPA',
30,
MAP{}
);

Best for: Very complex intermittency, multiple temporal patterns.


TSB

Teunter-Syntetos-Babai method - handles trending intermittent demand.

Example

SELECT * FROM anofox_fcst_ts_forecast(
'trending_sparse',
'date',
'demand',
'TSB',
30,
MAP{}
);

Best for: Intermittent + trending, growing/declining sparse demand.


Comparison

ModelTrend SupportBias CorrectionComplexity
CrostonClassicNoNoSimple
CrostonOptimizedNoNoSimple
CrostonSBANoYesSimple
ADIDANoModerateMedium
IMAPANoYesComplex
TSBYesYesMedium

Demand Classification

Before choosing a model, classify your demand pattern:

PatternZero %VariationRecommended
SmoothLowLowAutoETS
ErraticLowHighMFLES
IntermittentHighLowCrostonSBA
LumpyHighHighTSB or ADIDA

When to Use Intermittent Models

ScenarioRecommended Model
Spare parts inventoryCrostonClassic
Low-frequency demandCrostonSBA
Very sparse (>80% zeros)ADIDA
Complex intermittencyIMAPA
Growing/declining sparseTSB
Quick baselineCrostonClassic

Example: Spare Parts Forecasting

-- Classify demand first
WITH classified AS (
SELECT
sku_id,
COUNT(*) as n_obs,
SUM(CASE WHEN demand = 0 THEN 1 ELSE 0 END)::DOUBLE / COUNT(*) as zero_pct
FROM spare_parts_demand
GROUP BY sku_id
)
-- Use appropriate model based on zero percentage
SELECT
sku_id,
CASE
WHEN zero_pct > 0.7 THEN 'CrostonSBA'
WHEN zero_pct > 0.3 THEN 'CrostonClassic'
ELSE 'AutoETS'
END as recommended_model
FROM classified;
🍪 Cookie Settings