Demand assessment · Example Distributor
Udgass 0.4.0 · 2026-10-23 14:26 UTC · Each estimate below used only data available at its date.
Reading of the evidence (advisory)
The evidence supports a pilot: estimates were clearly more accurate than your current forecast, with honest ranges.
- Compared with your current forecast on 660 windows where your forecasts could be matched: error 10.3% vs 12.7% (19% lower).
- Actuals inside the stated 80% range: 79% of 242 windows.
- 19 series had zero-stock weeks: recorded sales understate demand there, for every method.
- 2 series have less than 56 weeks of history, so seasonality could not be used for them.
Supports a pilot: at least 30 test windows, error at least 5% lower than the comparison, and range coverage within 10 points of target. Marginal: lower error but less than 5%. No improvement: equal or higher error. Fixed before the data was seen.
This is an advisory reading of the evidence. Whether to run a pilot, and any business decision, rests with your company.
1. Your data
Complete weeks from 2023-01-02 to the week starting 2025-12-22. Weeks with no sales rows are treated as zero demand.
Files checked
| File | Rows | Rejected | Dates | Columns used |
|---|---|---|---|---|
| sales.csv sales | 26239 | 0 | 2023-01-02 to 2025-12-28 (daily) | date = Posting Date, sku = Material, quantity = Order Qty, location = Plant, category = Category |
| inventory.csv inventory | 4524 | 0 | 2023-01-08 to 2025-12-28 (weekly) | date = Snapshot Date, sku = Material, on_hand = Stock On Hand, location = Plant |
| purchase_orders.csv purchase orders | 3826 | 0 | 2023-01-06 to 2025-12-26 (weekly) | po_number = PO Number, sku = Material, order_date = PO Date, quantity = Ordered Qty, expected_date = Promised Date, received_date = Goods Receipt Date, supplier = Vendor, location = Plant, unit_cost = Unit Price, line_id = Line |
| events.csv events | 25 | 0 | 2023-02-13 to 2025-11-10 (irregular) | event_type = Event Type, start_date = Start, end_date = End, sku = Material, location = Plant, description = Notes |
No record id is mapped, so rows are added up per product, location and day, and this file is treated as the complete total for each product, location and day it contains. Re-importing a day replaces its total.
2. What this data can answer
| Question | Answerable | Why |
|---|---|---|
| How accurate would demand estimates have been, against simple methods? | yes | sales history is present |
| Did stock-outs hide demand? | yes | stock snapshots present |
| How long do suppliers really take, and is it changing? | yes | 3741 receipts with order and receipt dates |
| How much stock would meet a service target, and what does a late supplier do to it? | yes | stock snapshots and lead times present |
3. How accurate would estimates have been?
History was replayed at 65 dates. At each date, a 4-week total was estimated from earlier weeks only, then compared with what happened. The first 60% of dates are the earlier half; the rest are the later half, reported first because it was not used to tune anything.
| Method (later half) | Error (WAPE) | Error bar | Bias | Inside range | Windows |
|---|---|---|---|---|---|
| Udgass | 10.1% | -0.1% | 79% | 242 | |
| Average of last 4 weeks | 11.6% | +1.6% | no range | 242 | |
| Same week last year | 15.0% | +0.3% | no range | 242 | |
| Last week's value | 18.2% | -0.5% | no range | 242 |
WAPE: total absolute error divided by total actual demand. Bias above zero means estimates were too high. The range is a prediction interval built from each method's own past errors; 'inside range' checks whether it was honest.
By weeks ahead
| Week ahead | Udgass | Average of last 4 weeks |
|---|---|---|
| 1 | 15.6% | 16.2% |
| 2 | 16.3% | 16.2% |
| 3 | 17.3% | 17.4% |
| 4 | 15.9% | 17.3% |
By demand pattern
| Pattern | Windows | Udgass | Average of last 4 weeks |
|---|---|---|---|
| intermittent | 60 | 90.2% | 138.5% |
| smooth | 624 | 10.0% | 11.2% |
Smooth: steady weekly demand. Erratic: steady but variable. Intermittent and lumpy: many weeks without demand, where every method struggles and percentages are large.
4. Against your current forecasts
| On 660 matched windows | Error (WAPE) | Bias |
|---|---|---|
| Your forecasts | 12.7% | +2.1% |
| Udgass | 10.3% | -1.1% |
| Average of last 4 weeks | 11.6% |
Closer to the actual: Udgass in 372 windows, yours in 280. Your forecasts must be the ones actually made at the time (saved snapshots), for the same horizon. Re-created forecasts are not comparable.
5. Where estimates fail
Every series, hardest first. Shown on purpose: these are the products where any forecast needs a person's judgement.
| Product | Location | Pattern | Windows | Udgass | 4-week average | Bias | Inside range |
|---|---|---|---|---|---|---|---|
| M-3001 | P-BLR | intermittent | 23 | 171.5% | 172.7% | -16.7% | 65% |
| M-3002 | P-BLR | intermittent | 16 | 153.1% | 150.0% | -7.2% | 69% |
| M-3003 | P-BLR | intermittent | 21 | 79.9% | 135.2% | -10.1% | 90% |
| M-3005 | P-PUN | smooth | 26 | 16.2% | 16.4% | -3.4% | 81% |
| M-2004 | P-PUN | smooth | 26 | 14.8% | 17.8% | -1.0% | 69% |
| M-3005 | P-BLR | smooth | 26 | 14.4% | 13.5% | -0.6% | 77% |
| M-1004 | P-PUN | smooth | 26 | 13.1% | 12.8% | -0.8% | 69% |
| M-2002 | P-BLR | smooth | 26 | 13.0% | 16.4% | -2.5% | 73% |
| M-2006 | P-BLR | smooth | 26 | 12.7% | 12.8% | -3.3% | 81% |
| M-1002 | P-PUN | smooth | 26 | 12.4% | 13.3% | -0.3% | 77% |
| M-1003 | P-BLR | smooth | 26 | 12.1% | 12.9% | -2.6% | 73% |
| M-1003 | P-PUN | smooth | 26 | 11.8% | 12.4% | -1.5% | 73% |
| M-3004 | P-PUN | smooth | 26 | 11.2% | 14.1% | -1.8% | 77% |
| M-2003 | P-BLR | smooth | 26 | 11.1% | 12.6% | -3.5% | 65% |
| M-3004 | P-BLR | smooth | 26 | 10.7% | 11.7% | -0.1% | 77% |
| M-2004 | P-BLR | smooth | 26 | 10.6% | 14.9% | -4.7% | 85% |
| M-2001 | P-BLR | smooth | 26 | 10.2% | 10.5% | -0.2% | 65% |
| M-2003 | P-PUN | smooth | 26 | 10.0% | 9.4% | -1.2% | 73% |
| M-1001 | P-BLR | smooth | 26 | 9.7% | 13.0% | -1.0% | 81% |
| M-2006 | P-PUN | smooth | 26 | 9.0% | 8.8% | -0.5% | 92% |
| M-2002 | P-PUN | smooth | 26 | 8.5% | 11.5% | -1.3% | 85% |
| M-1004 | P-BLR | smooth | 26 | 8.3% | 9.3% | +1.4% | 96% |
| M-2001 | P-PUN | smooth | 26 | 8.3% | 7.7% | +1.0% | 77% |
| M-1005 | P-BLR | smooth | 26 | 8.2% | 8.4% | -0.4% | 85% |
| M-1002 | P-BLR | smooth | 26 | 7.9% | 10.7% | -1.8% | 81% |
| M-1001 | P-PUN | smooth | 26 | 7.9% | 11.1% | -0.6% | 81% |
| M-1005 | P-PUN | smooth | 26 | 7.5% | 8.0% | -0.8% | 77% |
2 series had too little history to replay and are not scored.
6. Patterns worth a look
Observations for review, not conclusions. None of them states a cause.
| Kind | Where | Observation | Period |
|---|---|---|---|
| censored demand | M-2001 · P-BLR | M-2001: stock recorded at zero in 3 of the last 26 weeks | 2025-07-07 to 2025-12-28 |
| censored demand | M-2002 · P-BLR | M-2002: stock recorded at zero in 5 of the last 26 weeks | 2025-08-18 to 2025-12-28 |
| growth change | M-1003 · P-PUN | M-1003: growth vs last year changed from +19% to +53% | 2024-12-30 to 2025-12-28 |
| demand change | M-2006 · P-BLR | M-2006: drop, observed 0 vs expected 142 | 2024-05-06 to 2024-05-19 |
| censored demand | M-2001 · P-PUN | M-2001: stock recorded at zero in 2 of the last 26 weeks | 2025-09-15 to 2025-12-28 |
| growth change | M-1004 · P-BLR | M-1004: growth vs last year changed from -21% to -50% | 2024-12-30 to 2025-12-28 |
| demand change | M-2001 · P-PUN | M-2001: drop, observed 72 vs expected 175 | 2025-12-01 to 2025-12-14 |
| censored demand | M-2006 · P-BLR | M-2006: stock recorded at zero in 2 of the last 26 weeks | 2025-06-30 to 2025-12-28 |
| data gap | M-2006 · P-BLR | M-2006: 2 consecutive weeks with no sales rows, while stock was not recorded at zero | 2024-05-06 to 2024-05-19 |
| censored demand | M-2003 · P-BLR | M-2003: stock recorded at zero in 3 of the last 26 weeks | 2025-07-14 to 2025-12-28 |
| censored demand | M-2003 · P-PUN | M-2003: stock recorded at zero in 5 of the last 26 weeks | 2025-08-04 to 2025-12-28 |
| demand change | M-2001 · P-BLR | M-2001: drop, observed 111 vs expected 236 | 2025-10-20 to 2025-10-26 |
| lead time change | all | Vendor V2: median lead time 28 days in the last 26 weeks vs 16 days in the 52 weeks before | 2025-06-29 to 2025-12-28 |
| censored demand | M-2004 · P-PUN | M-2004: stock recorded at zero in 6 of the last 26 weeks | 2025-08-25 to 2025-12-28 |
| censored demand | M-2005 · P-BLR | M-2005: stock recorded at zero in 7 of the last 26 weeks | 2025-08-11 to 2025-12-28 |
7. Method and limits
- Estimates come from six standard methods; for each product the one with the lowest error on that product's own earlier history is used, with a preference for an equal-weight combination.
- Each estimate used only weeks before its date (rolling origins). No future data enters any estimate.
- Prices, promotions, calendar effects and stock-outs are not modelled as inputs.
- Weeks with zero stock make recorded sales lower than real demand, for every method alike.
- Past accuracy does not guarantee future accuracy.
Optional: draft summary, only if you choose to allow publication
Relative figures only: no company name, product codes or volumes. Permission to publish is separate from the assessment and entirely optional; the free assessment does not depend on it. Udgass will not publish this, or any part of this report, unless your company gives separate written approval of the exact wording.
- Data: about 30 product-location series, median 156 weeks of history.
- Replayed 242 forecast windows; each estimate used only data available at the time.
- Forecast error (WAPE, later half of history): Udgass 10.1%, four-week average 11.6%, same week last year 15.0%.
- Actuals inside the stated 80% range: 79%.
- Against the company's own forecasts on 660 matched windows: Udgass 10.3% vs 12.7%.
- Reading: The evidence supports a pilot: estimates were clearly more accurate than your current forecast, with honest ranges.
Reproducibility
| sales.csv | abffae6fb0b83bbf76c38d813b9acf130f9f173f163b48b0e681ba4743721aba |
| inventory.csv | 6c398b9a17fb0bae71f4d36345fd41f6e16f012fa274887f651ed4f93718f7f3 |
| purchase_orders.csv | 44cf8a03dc575585739c274090f71fb4d0e0a28aadb9bd208adee26c76caa885 |
| events.csv | 935d3eae2021ef78dd6e6d6347b775e33a0c16333f7db0b64830cc263d75c099 |
| Dataset fingerprint | sha256:4370b81cb5827271be05b296b4b624b8186c6f81f2d5f3b6e915cb461a83eb80 |
| Settings | {"horizon_weeks": 4, "step_weeks": 4, "min_train_weeks": 52, "level": 0.8, "by_location": true, "skus": null, "validation_test_split_origin": "2025-04-07"} |