Demand Forecasting & Inventory Engine
A forecasting layer at SKU grain — combines time-series baselines with external signal (macro indicators, social-and-search signal, weather, consumer-behavior priors) — feeds inventory and replenishment decisions with documented uncertainty.
- Engagement
- 10–16 week build · ongoing forecast cadence
- Built for
- Supply chain leads · Inventory directors · Commercial leads
Inventory decisions at most established businesses are made on rolling-average demand baselines that miss the early signal — demand spikes show up in the historical data after the stockout, demand lulls show up after the markdown.
What this is
A demand-and-inventory layer for businesses where inventory decisions matter to the P&L. Three components:
- Forecasting models. Per-SKU, per-channel, per-region. Ensemble of statistical baselines, gradient-boosted models, and Bayesian models depending on data depth.
- Signal integration. External signal layered onto historical sales — macro, weather, search, paid-marketing pacing.
- Inventory-decision layer. Forecasts feed a configurable policy that produces replenishment recommendations. The supply-chain team finalizes.
How it's built
Statsmodels for the baseline time-series, Prophet for the trend-seasonality decomposition, LightGBM for the signal-augmented layer, PyMC for the Bayesian piece on sparse-history SKUs. Integration into the ERP (NetSuite, SAP, Oracle) for replenishment output.
What you get
- The forecasting model with documented uncertainty per SKU class.
- The inventory-decision policy, configured.
- ERP integration for the replenishment hand-off.
- Quarterly model refresh.
- Documentation defensible to the supply-chain audit.
Engagement is shape, not list.
Length and price are functions of the data and the destination. The shape below is the typical engagement.
- Length
- 10–16 week build · ongoing forecast cadence
- Lead
- Bogdan
- Cadence
- Async, weekly
- Bar
- Production
Scoped during the discovery call against the actual data and the operation it integrates with.
Principal engineer. Architecture and most code ships through one keyboard.
Written updates between, calls when the decision needs the room.
Async correctness, capacity under burst, observability at every boundary.
Products this composes with.
Same suite, or vertical-specialized versions in another.
What buyers ask about this one.
Why custom instead of o9, Blue Yonder, or the rest of the supply-chain SaaS landscape?
Those are excellent at enterprise scale where the SaaS's data model maps cleanly to the business. For mid-market businesses and for enterprises whose data shape doesn't fit (long-tail SKUs with sparse history, channel-specific demand patterns, recently-launched products), custom forecasting captures structure SaaS misses.
What signals does the model use beyond historical sales?
Per-engagement, the signal set is calibrated. Common adds: regional employment as a consumer-demand proxy, weather (for season-sensitive categories), search-trend data, paid-marketing-spend pacing, competitor pricing where the business tracks it. Where the business operates in a category with public consumer-spending data, that's a strong signal.
How are long-tail and intermittent-demand SKUs handled?
Intermittent-demand modeling (Croston's class methods plus Bayesian baselines with strong priors). The forecast acknowledges uncertainty rather than producing a confident point estimate where the data doesn't support one.
What's the inventory-decision layer?
Forecasts feed a configurable inventory policy — order-up-to, periodic-review, or whatever matches the business's purchasing constraints. The policy is configured during the engagement; the forecast plugs into it. We're explicit that we don't replace the supply-chain team's judgment — we equip it.
Pricing?
Scoped to SKU count, channel complexity, and integration depth. Discovery call covers all three.
If the deliverable matches the gap, the next step is one call.
We'll scope length and price against your data and the operation it integrates with. No retainer, no fishing.
Bogdan and team · async-first · OP—2026