Case studies / JWC

How a reseller replaced gut feel with 86% forecast accuracy

Happy young couple lying on green grass outdoors on a sunny day, with the woman resting on the man's back and both smiling, blue sky and trees in the background.

86%

Forecast accuracy on held-out products

12M

Amazon products behind every forecast

5 mo

From raw data to a live system

TL;DR

JWC, one of Amazon's top 100 resellers, sized its monthly purchase orders by hand on historical sales and category feel.

We built a demand forecasting system on Google Cloud: behaviour clustering over roughly 12 million products, fine-tuned Chronos-2 models, and a forecast API with confidence bands.

It forecasts at 85.8% accuracy on 4,030 held-out products, including products with no sales history, and went from raw data to live in 5 months.

Ever bought Nike or Adidas gear on Amazon? Chances are it came from one of the platform’s top 100 resellers for those brands.

Every reseller at that scale loses money in the same two places: stockouts on products that were selling, and write-offs on products that were not. Both trace back to a single decision made monthly, by hand.

We rebuilt that decision around a forecast. Buyers now size purchase orders against a projected demand range with a stated confidence level, and products with no sales history at all get forecast too.

Here is how the system works, and what forecasting demand across 12 million products taught us.

The challenges

Purchasing ran on experience, category feel and Excel formulas. That carried the business for years, and it broke down in four places.

No forward-looking signal
Reviews looked backwards at historical sales. There was no systematic way to answer whether a specific product would sell, and roughly how much, over the next few months.

Capital trapped in products that never sold
Stock that does not move ties up cash, adds storage cost and eventually becomes a write-off.

Winners caught late, or missed entirely
Products sold out early because nobody spotted them in time, or nobody had the confidence to put real money behind them.

New products worst of all
A product with no sales history is pure instinct, and those are the buys where the stakes run highest.

What we built

The system sits between the reseller's sales history and its purchase orders. Products are grouped by how they behave in the market, each group gets its own forecasting model, and a confidence layer turns the raw prediction into a range a buyer can act on. A forecast API serves it to the buying team, and a drift monitor retrains the models before accuracy quietly decays.

From two data sources to a 13-week forecast range.

Flowchart of ML demand forecasting system showing data sources Amazon Selling Partner API and Keepa feeding into automated ETL on Google Cloud. Data undergoes behavioral clustering (K-means, K=5) to group 12 million ASINs by sales behavior. Drift monitor on Vertex AI auto-retrains forecast models (Chronos-2) with five behavior-cluster models plus one cold-start. Forecast API (Cloud Run) provides a 13-week prediction range with p10, p50, and p90 outputs to the buyer. Diagram highlights integration of external and own market data with machine learning-driven forecasting.

Two sources feed an ETL pipeline on Google Cloud: the client's own sales, units and pricing from Amazon's Selling Partner API, and large-scale external market data from Keepa, which is what lets the system say something useful about a product the client has never sold.

Both APIs throttle hard, so ingestion backs off, retries, checkpoints and resumes without double counting.

Solution 1

Grouping products by how they sell

Category and brand say almost nothing about demand. A steady staple and a promo-driven spike can sit side by side in the same category and behave nothing alike, so the first layer groups products by market behaviour: demand rhythm, how they ramp and taper, seasonality, and price sensitivity.

K-means over roughly 12 million Keepa ASINs produces five behaviour clusters: long-tail-steady, steady-staple, seasonal-peak, spiky-promo and fast-ramp, with a silhouette of 0.52 and mean coherence of 0.74. New products route to a cold start path until they join a cluster.

This layer is where accuracy had been leaking. One global model averaging across products with nothing in common produces a number that fits none of them.
Behavioral clustering analysis features K-means with five clusters over approximately 12 million Keepa ASINs, grouped by sales behavior. Metrics show 0.52 Silhouette score, 0.71 Davies-Bouldin index, and 0.74 mean coherence. Clusters include long-tail-steady (5.4M size, 0.76 coherence), steady-staple (2.9M size, 0.78 coherence), seasonal-peak (1.9M size, 0.74 coherence), spiky-promo (1.1M size, 0.69 coherence), and fast-ramp (0.7M size, 0.71 coherence). A note mentions new products with no history route until they join a cluster.
Solution 2

A model per behaviour, and a path for cold start

Five behaviour models plus one cold start model, all built on a fine-tuned Chronos-2, a time-series foundation model that can project a very short history into a real three-month forecast. Cold start combines the first month of sales, behavioural comparables and a calibrated confidence layer. Every forecast goes down to size and colour, across 13 weeks, as a range with a stated confidence level.

On 4,030 held-out ASINs the forecaster lands at an R² of 0.83, or 85.8% accuracy. Accuracy tapers from 88.4% in month one to 79.1% in month three, and the 80% confidence band holds 86% of the time.
Graph titled 'Backtest against actual sales' showing monthly units sold for one ASIN from January 2023 to January 2025, with last 8 months held out from model training. Four metrics above the graph: 85.8% accuracy, 0.98 bias, 0.86 80% band coverage, and 8 held-out months. The line graph compares actual sales (solid white line) versus forecast median (dashed line) with an 80% confidence interval shaded area. Key events marked are Prime Day around July 2024, a holdout period starting shortly after, and a December sales peak. Sales trend shows rises around Prime Day and December, with forecast closely tracking actual sales.
Solution 3

One call per product, one run per month

The forecaster runs as an API on Google Cloud Run, currently v4. A buyer passes an ASIN and gets its behaviour cluster with nearest comparables, plus a 13-week forecast with p10, p50 and p90 bands, with model metrics on every response.

Once a month the same forecast runs in batch against the incoming supplier list, checking projected demand and margin at supplier cost, to produce a replenishment shortlist the buying team can work straight through.
Solution 4

Watching its own accuracy and retraining

Vertex AI watches for data drift and for rolling forecast error creeping up. Either crossing its threshold triggers a retrain that validates against a frozen test set and promotes behind a canary, so a bad retrain never reaches production.

It currently reads a data drift PSI of 0.08 against a 0.20 threshold, and model drift of 1.3 points against an alarm at 5. The last automatic retrain was 13 July 2026, validated and promoted without anyone touching it.

Conclusion

The largest recurring capital decision in the business now runs on a number instead of an instinct: less money trapped in products that do not move, and more winners caught early. Scope has expanded since launch.

Products do not all sell the same way, and the whole system is built around that. Detect the pattern a product follows, route it to the behavioural segment and model that fit, and everything downstream works.

Want a forecasting system built like this one? Get in touch.

86%

Forecast accuracy on held-out products

12M

Amazon products behind every forecast

5 mo

From raw data to a live system

Data sources: Amazon Selling Partner API | External market data: Keepa
Pipeline: automated ETL on Google Cloud (ingest, de-duplicate, FX-normalise, aggregate)
Models: fine-tuned Chronos-2, five behaviour-cluster models plus one cold-start | Clustering: K-means, K=5
Serving: Forecast API v4 on Google Cloud Run | Horizon: 13 weeks at monthly resolution
Monitoring: Vertex AI drift detection, automated retraining, frozen-set validation, canary promotion

FAQ

How do you build an AI demand forecasting system for an Amazon reseller?

Feed Selling Partner API sales and Keepa market data through an ETL pipeline, cluster products by sales behaviour, train a forecasting model per cluster, and serve 13-week forecast ranges through an API.

How do you forecast demand for products with no sales history?

A cold start path combines the first month of sales, behavioural comparables from clustering, and a calibrated confidence layer, so a buyer gets an honest range instead of a guess.

How accurate is AI demand forecasting for e-commerce?

85.8% accuracy (R² of 0.83) on 4,030 held-out ASINs, tapering from 88.4% in month one to 79.1% in month three, with the 80% band holding 86% of the time.

How do you prevent model drift in a demand forecasting system?

Vertex AI monitors data drift and forecast error, and retrains automatically, validating against a frozen test set and promoting behind a canary. More on production AI agents.

About JWC
A privately held e-commerce business built on product reselling, and one of the top 100 resellers on Amazon.
Tags
Product & engineering
Tech stack
Chronos-2 (Amazon)
Keepa
Vertex AI
Want similar results?
We build AI agents and software for teams ready to move faster.
Get in touch
contact image