The right product, to the right distributor, at the right time.
Forecasting and stock allocation for Kokuyo Camlin, redesigned around real demand instead of a flat budget. Built by dataeze, the team already running your Camlin BI.
On a live shadow run on your Camlin server (23 Jun 2026, 11,692 distributor-SKU lines), the current budget-gap allocation reaches a fill rate of just 52.6%, the share of demand lines the depots actually serve. It is mis-targeted, not just under-supplied.
Lines are auto-zeroed once billing crosses the monthly budget which, in a back-to-school ramp, usually means the budget was set too low, not that the distributor is stocked. Across this run distributors were collectively at ~95% of plan (15,61,420 sold vs 16,40,044 planned units) but very unevenly, so the same logic over-orders the overstocked and starves the ones about to run dry. It is a decision-logic problem, not a warehouse problem.
Monthly budget − billed so far = gap to budget. That single signal splits depot stock pro-rata to the gap. Transparent and cheap, but blind to the four things that actually cause stock-outs:
requirement = max(month_budget − billed_so_far, 0); each depot's stock for a SKU is split across active distributors in proportion to that requirement, capped at it, zeroed if the depot is empty. It is a fair-share rationer, not a stock-out-prevention system.
Same data to start. Different question. Today the system answers "who is behind budget?" Tomorrow it answers "who is about to stock out at peak, and which truck stops it."
Knows why demand moves: season, school calendar, NPD curves, and ships its own confidence.
Protect stock-outs first, then right product to right distributor, executable to the carton.
Never out of stock at peak. Less overstock. NPDs protected.
A forecasting brain turns history, seasonality and the school calendar into a demand signal with an explicit confidence band. That feeds an allocation engine that sizes a target (cycle + safety stock, capped at 45 days of cover), nets off what is already on the way (open orders), blends the 90-day off-take 70/30 with the budget signal, and under scarcity protects the distributors most likely to stock out before chasing budget attainment. The output is cartons to ship, not a chart of the old plan.
A forecast is only as trustworthy as the data and definitions beneath it. This is the pipeline we run before a single carton is ever recommended, on the very same SQL you already have.
Primary billing, depot stock, in-transit, budget, masters, reconciled into one model.
One governed definition of demand, cover, run-rate, fill rate, so every number agrees.
The demand brain and allocation engine on top, traceable and back-tested.
The semantic layer is why the forecast answers like your best planner, not a black box.
Sparse distributor-SKU cells borrow the depot's clean seasonal shape (MinT reconciliation).
A model tournament per series (ETS, SARIMAX, Croston/TSB, gradient boosting). Must beat seasonal-naive to ship.
State-wise reopening, exams and festivals encoded as demand drivers.
Analog + Bass-diffusion models forecast new SKUs with zero history.
P50 for planning, P90 sizes safety stock. The budget stays until the model measurably wins.
Runs on SQL plus Python, no server change needed to produce and validate it. Every cell is probabilistic, so the safety buffer is derived, not guessed.
A 1/12 flat budget structurally under-feeds the Mar to Jul back-to-school peak, where the money is, and over-feeds the trough. Our engine rides the curve.
The engine de-seasonalises history to a clean base rate, then re-applies a seasonality index at ruling level for the planning month, so the signal rises and falls with real demand instead of a calendar-blind twelfth.
A single national budget smears the country's reopening regimes together. A region-keyed reopening signal sharpens each depot's curve to its own calendar.
School-reopening windows, board/exam schedules, festivals and monsoon onset are encoded as learnable regressors at region-by-ruling level, refreshed annually from public board, IMD and tender sources in a short calendar-update ritual. This is the moat a generic time-series vendor will not build.
The budget is the champion. The statistical and ML forecast is the challenger, scored each month on a rolling back-test, against the budget and against seasonal-naive. It earns allocation weight only where it measurably beats both.
A model is never adopted where it cannot beat your own plan.
Accuracy and bias monitored by A/B/C class and NPD.
Planner & sales overrides are logged and scored next cycle.
Under scarcity, the norm at ~53% fill, pure pro-rata spreads the shortage evenly and silently manufactures stock-outs. The waterfall changes the objective:
Fill every active distributor to a minimum days-of-cover, so nobody goes dark.
NPDs and A-class SKUs get the next units.
Weighted by genuine run-rate, not vanity budget gap.
Whatever remains, split fairly.
Plus executable guard-rails: case-lot rounding, an over-stock cap (no channel-loading), inter-depot balancing and same-family substitution.
Live shadow run on your Camlin server, 23 Jun 2026: 11,692 distributor-SKU lines, the identical set under both models. Every allocation respects depot stock, zero supply-safety breaches, independently re-checked. Planning and recommendation only; execution stays with your team.
| Distributor | Profile | Earlier (units) | Demand-to-Shelf | Action |
|---|---|---|---|---|
| Maharashtra · distributor | Past plan, still selling | 0 | 3,267 | Recovered |
| Vidarbha · distributor | ~30% past plan, dry | 0 | 13,309 | Recovered |
| Tamil Nadu · distributor | NPD / A-class | 20,736 | 23,807 | Prioritised |
| West Bengal · distributor | Dry, below cover | 0 | 3,184 | Min cover |
| Bihar · distributor | Dry, below cover | 0 | 3,904 | Min cover |
Real lines from the 23 Jun 2026 shadow run (distributor names masked). The budget-gap model ships zero to fast sellers who passed plan; Demand-to-Shelf recovers them and protects dry distributors to a minimum cover. Full per-line view in the companion Excel. Recommendations only; execution stays with your team.
At your ₹26/unit average realised price that is ≈ ₹4.37 Cr of recoverable peak sales, from your live shadow run, 23 Jun 2026. Full-year scale calibrated on your WSP in week 1.
Recovered sales and fill-rate need no extra inventory at all, won by landing existing depot stock in the right godown.
Where we say days-of-cover or run-rate today, it is an estimate inferred from primary, made precise once secondary is captured. Missing ground data is a roadmap, not a blocker.
Each step adds measurable rupee impact. The first two run now, on data you already share; the rest unlock as we capture ground data through a live, mobile-optimised template.
Shadow-run on closed books. No server change.
Priority + seasonality + case-rounding on today's primary data. Simulations on demand.
We share a live mobile template to capture distributor closing stock → true days-of-cover.
Secondary / DMS sell-through replenishment, demand-led right to the retailer.
A live mobile template captures raw-material / BOM → produce to real demand.
Phases 0–1 run now on the base data you already share (the ₹4.37 Cr is simulated on your live primary billing at ₹26/unit). For Phases 2 and 4 we provide a live, mobile-optimised capture template (distributor closing stock, raw-material) so ground data flows in without disrupting your team. Today's pro-rata logic stays as the cold-start fallback throughout: capability is layered on, nothing is ripped out.
This is not a cold vendor learning your business from scratch. We built and maintain your Camlin BI model on your own SQL, so the demand-to-shelf engine starts from data we already know.
Built on your SQL, behind your network. Your data never leaves your environment.
20 years building decision systems across FMCG, retail and D2C, now AI-first.
Every number maps back to a query that ran. No black box.
A short working session with your sales, supply-chain and IT leads to align on a few things, then a one-month run on Camlin's own data, before a single line changes on your server.
"Let's agree the scope and give us one month on Camlin's own run. We will show you the lift before a single line changes on your server."