Executive Summary
The demand forecasting model sets the reorder decisions for each of the shop's 1,339 stocked items. The model takes the parts that booked jobs will draw as known and forecasts the rest of each item's usage before a new order could arrive, then turns the total into a reorder point and order quantity. It is trained using a random forest machine learning algorithm. The model has been live for the past six months, from January through June 2026.
Before the model, reordering was done manually and ran on data that was messy and couldn't be trusted. Much of the reordering process was labor-intensive and imprecise: stock levels and lead times were stale, stock on hand was unverified, safety stock was inflated, and rush orders were relied upon to compensate for shortfalls. The result was the shop carrying excess inventory, 161 days of usage, yet still logging elevated stockout days, held jobs for missing material and rush freight spend.
The results below compare the performance of the demand forecasting model and baseline method in January to June 2026 against 2025 as the shop recorded it, with 2025's two halves averaged to a six-month basis. Baseline assumes the shop continued their manual reordering process as they did in 2025, but on the newly cleaned data records. The model achieved significant improvements in stockout days (-36%), jobs held for material (-43%), and rush spend (-46%), while average inventory fell 5%, to $3.4m, or 148 days of usage from 161 in 2025.
Model Overview
What This Model Does
The demand forecasting model is built on an ensemble decision-tree algorithm called a random forest. Every week, the model predicts which items need to be reordered, and these predictions are then fed directly into the ERP for each of the 1,336 items it scores. The model's reorder decisions are based on the current stock on hand and on order for each item, the forecasted usage over each supplier's delivery time, and a safety buffer based on how unpredictable each item's demand and deliveries have been.
The model refreshes its forecasts every week and is retrained on the latest history once a month. The reorder point covers the usage the ERP cannot see ahead; the ERP nets the requirements of booked jobs itself. The model's predictions are loaded directly into the ERP, which flags when each item should be reordered and how much to order. To keep working capital low, the recommendations for how much to order are informed by the item's cost: expensive items are bought every few weeks in small lots, and cheap items a few times a year in larger lots.
The ERP's reorder queue ranks every stocked item against the model's weekly reorder point: items at or below it are marked "ORDER NOW", items within two weeks of it "ORDER SOON", and items more than two weeks outside of it "OK". Parts that have been replaced by a successor are marked "PHASE OUT", with the successor named, and carry no suggested order. Each line also shows the stock on hand, allocated to released jobs, booked over the lead time (the component requirements of booked jobs, which the model takes as known) and on order, the forecast, the safety stock and the suggested order quantity, as seen in the screenshot of the ERP system below:
Training Data Overview
The model learns from the shop's historical usage of every stocked item. It was originally trained on three years of this usage data (2023 through 2025, as shown below), and is continually trained on every new month of data.
Demand is steady in aggregate over the three years, but individual items exhibit very different demand patterns. We've categorized these individual item demand patterns into four groups, which the model is calibrated against: 409 smooth (regular and steady), 423 erratic (regular but variable), 288 lumpy (irregular and variable) and 219 intermittent (many months with no demand at all). One representative item within each pattern is shown below.
Part of each item's usage is known before it happens. On the 516 parts that sit on a bill of materials, the component requirements of booked jobs account for about a third (36%) of total usage over the item's lead time; floor pulls and service issues are the rest, and that remainder is what the model forecasts. Parts that sit on no bill are forecast in full.
Individual demand patterns are informed by the kind of item, though every category carries all four patterns. Smooth demand is most common among fasteners (50%) and consumables (44%), the floor stock used consistently every week. Erratic demand is spread widely, and is highest among raw material (35%) and hardware (35%). Lumpy demand concentrates in raw material (31%) and outside service (29%). Intermittent demand is highest in mechanical (30%) and electrical (20%), where just a few of these high-cost items are used for a job or sold as occasional spares.
Item cost and usage move in opposite directions across the categories. Mechanical and electrical items (motors, gearboxes, drives, controls) are 36% of items and 57% of usage value, with median unit costs of $41 and $25, but only 12% of the units used. Fasteners and hardware are the reverse: 53% of the units used but 9% of the value, at median unit costs under $3. The shop's working capital is therefore tied up in a few hundred expensive, slower-moving items, not in the high-volume floor stock.
| Category | Items | Median unit cost | Median units used per item (2025) | Share of units used (2025) | Usage value (2025) | Share of value (2025) |
|---|---|---|---|---|---|---|
| Mechanical | 269 | $40.93 | 84 | 5% | $2.38M | 31% |
| Electrical | 209 | $24.80 | 135 | 6% | $2.06M | 27% |
| Raw material | 194 | $12.01 | 291 | 12% | $1.18M | 15% |
| Outside service | 73 | $10.61 | 212 | 3% | $315K | 4% |
| Fittings | 106 | $5.79 | 424 | 10% | $576K | 7% |
| Consumables | 103 | $5.16 | 489 | 11% | $541K | 7% |
| Hardware | 183 | $2.02 | 455 | 19% | $411K | 5% |
| Fasteners | 202 | $0.85 | 716 | 33% | $268K | 3% |
| All items | 1,339 | 100% | $7.73M | 100% |
Model Performance
Scoring Summary
Across the 26 Monday refreshes of the buyers' queue, it made 33,644 predictions: 1,275 (4%) were marked ORDER NOW and 3,151 (9%) ORDER SOON, and the rest were OK. In a typical week that is about 49 items to order now and 121 to order soon, a short, ranked list for the buyers to work through. On June 30, 2026 the queue held 38 items to order now, 150 to order soon and 33 to phase out: parts replaced by a successor, which the shop runs down rather than reorders.
Accuracy and Validation
See the ML Model Technical Overview report for more detail on the model's performance and validation metrics.
The model was chosen and calibrated before go-live on held-out data for the full year of 2025. Three candidate algorithms were tuned and compared on their forecasts for that year, and the random forest model, with the lowest error, was selected. Validation error is scored on total usage over each item's lead time.
| Candidate | Validation error (WAPE) | Held-out 2025 error (WAPE) | |
|---|---|---|---|
| Random forest | 45.6% | 43.0% | ✔ Selected |
| XGBoost | 47.6% | 45.7% | |
| Linear regression (ridge) | 74.2% | 78.6% |
To understand how well the model performed against baseline, we'll compare the performance of the model and baseline in 1H 2026 to the same period of time under a status quo scenario. This status quo scenario assumes the shop operated in 1H 2026 as it did throughout 2025, including manual reordering and with the data errors fully intact (with stale lead times and reorder points). Baseline assumes the same manual reordering on cleaned records. The demand forecasting model achieved significant improvements over both baseline and status quo across the key production and purchasing KPIs: stockout days, jobs held for material, and rush freight expense.
| Measure | Status quo | Baseline | Change | Demand Forecasting Model | Change |
|---|---|---|---|---|---|
| Fill rate | 96.6% | 96.9% | +0.4 pts | 98.0% | +1.4 pts |
| Stockout days | 4,161 | 3,624 | -13% | 2,500 | -40% |
| Jobs held for material | 141 | 84 | -40% | 53 | -62% |
| Rush freight and premiums | $150,474 | $125,562 | -17% | $83,607 | -44% |
| Average inventory value | $3,340,610 | $3,203,826 | -4% | $3,415,685 | +2% |
| Inventory at the end of June | $3,327,080 | $3,059,885 | -8% | $3,322,514 | 0% |
| Days of usage | 145 | 139 | -6 days | 148 | +3 days |
| Order lines placed | 1,841 | 1,566 | -15% | 2,303 | +25% |
| Purchases | $3,860,923 | $3,646,171 | -6% | $3,883,659 | +1% |
The reordering decisions driven by the demand forecasting model result in more inventory than baseline and slightly more than the status quo over the same six months. This is because the model's buffers are sized to the fill-rate targets on the items with the widest forecast error, where the manual rule's thin buffers are what produce its stockouts; part of the 2026 model figure also reflects the over-correction on intermittent items that the monitor flagged for retraining (see monitoring report).
Limitations
- Lumpy and intermittent items are forecast poorly. About two-fifths of the catalog uses items in only a few weeks each year; no method forecasts those at low error. The safety buffer, not the forecast, is what keeps them in stock.
- The model only predicts demand, not supply. The model predicts how much the shop will use; it takes each supplier's lead time from its recent deliveries, refreshed monthly, and does not predict a late delivery. The buffer covers the usual spread of deliveries but does not account for potential supplier failures.
- Most of each item's usage has no advance signal. Booked jobs cover about a third of usage on bill parts; floor pulls and service issues, the other two-thirds, are forecast from history alone, so a new customer, a product launch or a lost account shows up only after it reaches the usage records.