Benchmark report · Track A, model selection

    The champion model changes every 90 days

    We ran 21,600 backtests — five forecasting models, across nine retail catalogs and six planning horizons — to answer a simple question: which algorithm should power a demand forecast? The honest answer is that no single model wins for long. Here is what actually won, where, and why it matters for how you should think about champion selection.

    buffers.ai Benchmark Lab · July 2026

    4,320
    SKU × horizon backtests
    21,600
    individual model fits
    9
    retail catalogs — 8 synthetic, 1 real client
    720
    qualified SKUs sampled
    01

    Why "best model" is the wrong question

    buffers.ai doesn't hard-code a forecasting algorithm. Every SKU is backtested against a slate of candidates — a pretrained foundation model, a gradient-boosted tree model, a classical statistical model, and two simple baselines — and a composite score picks a champion per SKU, weighted mostly by weighted absolute percentage error (WAPE), with bias, safety-stock impact, and achieved service level as secondary tie-breakers.

    That per-SKU approach is deliberately un-opinionated: it doesn't assume any one model is universally best. This report asks the aggregate version of that question anyway — at scale, across many catalogs and many horizons, does a pattern emerge in which model tends to win, and under what conditions does that tendency flip?

    Qualification gate: a SKU needs at least 20 non-zero-demand days before the evaluation window starts to be considered backtestable at all.

    Thinner or brand-new SKUs are scored through a separate cold-start/cohort path and are outside this report's scope — this is Track A, the mature-SKU model comparison. 720 SKUs cleared this gate across the nine catalogs studied here.

    02

    The headline result

    Across all 4,320 SKU × horizon combinations, LightGBM won the plurality of the time — 36.2% — narrowly ahead of a plain moving-average baseline at 31.9%. Together those two account for two out of every three wins. The three more elaborate models — Prophet, TimeSFM, and exponential smoothing — split the remaining third, and none individually clears 14%.

    LightGBM
    36.2%
    MovingAverage
    31.9%
    TimeSFM
    12.4%
    Prophet
    13.4%
    ExpSmoothing
    6.2%
    ModelWin rateMedian WAPEMedian |bias|
    LightGBM36.2%0.3210.173
    MovingAverage31.9%0.3280.128
    Prophet13.4%0.7000.416
    TimeSFM12.4%0.5540.486
    ExpSmoothing6.2%0.7390.495

    Win rate = share of the 4,320 SKU × horizon combinations where a model produced the lowest WAPE among the five candidates. WAPE and bias are medians across all combinations that model was scored on, win or not — the two winningest models also post the two lowest error and bias figures, so the ranking isn't an artifact of the scoring rule.

    03

    The horizon effect

    The aggregate hides a crossover. LightGBM's edge is largest at 30–60 days — winning roughly 47% of SKUs — and erodes at every horizon after that. The moving-average baseline is the mirror image: barely competitive at 30 days (24.6%), it overtakes LightGBM around 120–150 days and wins the plurality of SKUs by 180 days (42.6%).

    0%10%20%30%40%50%30d60d90d120d150d180d30d: 4.8%60d: 4.9%90d: 6.6%120d: 6.3%150d: 7.7%180d: 6.8%30d: 13.2%60d: 12.7%90d: 14.0%120d: 13.8%150d: 12.7%180d: 14.0%30d: 9.6%60d: 12.2%90d: 13.1%120d: 12.5%150d: 13.3%180d: 13.4%30d: 24.6%60d: 22.9%90d: 26.5%120d: 33.3%150d: 41.5%180d: 42.6%MovingAverage30d: 47.7%60d: 47.3%90d: 39.9%120d: 34.1%150d: 24.8%180d: 23.1%LightGBM
    LightGBMMovingAverageTimeSFMProphetExpSmoothing

    Why the crossover happens: near-term demand carries structure a model can learn from — day-of-week effects, a recent promotional lift, short-term trend — and LightGBM's lag features exploit exactly that. Far enough out, that structure decays faster than the model's ability to extrapolate it, and a plain average of recent history becomes hard to beat with a model that's effectively extrapolating noise.

    04

    What the real client revealed

    Eight of the nine catalogs in this study are synthetic, generated by buffers.ai's internal Synthesis engine. The ninth is one real, anonymized retail client's production sales history. Comparing that one real catalog against the synthetic-only aggregate exposes a gap the aggregate alone hides.

    ModelWin rate — real clientWin rate — synthetic (avg)Difference
    LightGBM25.2%37.6%-12.4pp
    MovingAverage19.7%33.5%-13.8pp
    Prophet15.9%13.1%+2.8pp
    TimeSFM25.0%10.7%+14.3pp
    ExpSmoothing14.2%5.2%+9.0pp

    The TimeSFM gap: TimeSFM — a large pretrained forecasting foundation model — wins almost never on synthetic data (10.7%) but ties LightGBM for the top spot on the one real dataset (25.0% vs. 25.2%). Prophet and exponential smoothing show the same pattern in miniature: both do measurably better on real data than on synthetic.

    Read literally, this is one client, not a population — not proof of anything universal. But the size and consistency of the gap is a caution against trusting synthetic benchmarks alone when evaluating a large pretrained model: synthetic catalogs, however carefully constructed, may lack the messy structure — irregular promotions, supply disruptions, genuine regime changes — that a model like TimeSFM is specifically built to absorb.

    05

    Recommended model, by catalog and horizon

    The practical output of this study isn't a universal recommendation — it's a diagnostic. Each cell below shows the model that won the most SKUs for that catalog and horizon, and the share of SKUs it won by.

    Catalog30d60d90d120d150d180d
    Real client (anonymized)
    LightGBM25%
    TimeSFM24%
    TimeSFM25%
    LightGBM29%
    TimeSFM25%
    TimeSFM28%
    Basic fashion
    LightGBM51%
    LightGBM48%
    LightGBM36%
    MovingAverage33%
    MovingAverage42%
    MovingAverage46%
    Luxury
    LightGBM36%
    LightGBM44%
    LightGBM41%
    LightGBM34%
    MovingAverage33%
    MovingAverage40%
    Footwear
    LightGBM51%
    LightGBM41%
    LightGBM35%
    MovingAverage38%
    MovingAverage46%
    MovingAverage52%
    Beauty
    LightGBM49%
    LightGBM59%
    LightGBM45%
    MovingAverage41%
    MovingAverage55%
    MovingAverage54%
    Home
    LightGBM57%
    LightGBM57%
    LightGBM42%
    LightGBM42%
    LightGBM35%
    LightGBM39%
    Mass retail
    LightGBM55%
    LightGBM55%
    LightGBM42%
    MovingAverage45%
    MovingAverage57%
    MovingAverage54%
    Sporting goods
    LightGBM63%
    LightGBM56%
    LightGBM48%
    LightGBM42%
    MovingAverage46%
    MovingAverage49%
    Bags & accessories
    LightGBM44%
    LightGBM44%
    LightGBM46%
    LightGBM30%
    MovingAverage39%
    MovingAverage36%

    Percentages are the winning model's share of that cell's ~80 qualified SKUs; the remainder splits across the other four candidates. The real-client row is highlighted — note it's the only row where TimeSFM (not MovingAverage) picks up the long-horizon wins.

    06

    Methodology & limits

    Data
    Eight vertical catalogs synthesized via buffers.ai's internal Synthesis engine — basic fashion, luxury, footwear, beauty, home, mass retail, sporting goods, and bags & accessories — 500 SKUs generated per catalog with a lifecycle mix skewed toward more new/thin SKUs than a realistic catalog, so qualification filtering still leaves enough sample per bucket. One real, anonymized retail client, sourced from production sales history and labelled "real client" throughout.
    Sample
    80 qualified SKUs randomly sampled per catalog (720 total), each backtested at six horizons (30 / 60 / 90 / 120 / 150 / 180 days) against all five candidate models — 4,320 SKU × horizon combinations, 21,600 individual model fits.
    Scoring
    "Won" means lowest WAPE among the five candidates for that SKU × horizon — a simpler proxy than buffers.ai's live composite ranking, which additionally weighs bias, safety-stock impact, and achieved service level. The simpler rule is used here for a cleaner aggregate read.
    Coverage
    About 4.6% of individual model fits did not produce a usable forecast — most often a model needing more history than a given SKU/horizon combination had — and were excluded rather than imputed.
    Limits
    • One real client is one data point, not a population — treat section 04's finding directionally, not as a universal claim about foundation models.
    • Synthetic catalogs, however varied, are generated by one internal engine and inherit its assumptions about seasonality and promotional structure.
    • This report covers only Track A (qualified, mature SKUs). Cold-start and thin-history SKUs are scored through a separate cohort model and are not represented here.
    Back to buffers.ai