Forecast and Campaigns
Connect future demand to promotion plans, always with a range and a model version.
Model v2.4.1 · run 16 Oct 2026
Actual versus forecast · SK-002
iv2.4.1 · run 2026-10-16What the model actually did
iCampaign results
iScenario
iThe projection applies the price elasticity observed on prior percentage-discount campaigns across the whole range, not this SKU alone, then re-runs the stock position across the campaign window. This line used to say “for this SKU”, which was never true: the elasticity is pooled over every discount campaign in the history because no single SKU has run enough of them to fit its own.
Campaign target attainment
i- Target
- MYR 470,000
- Revenue so far
- MYR 261,077
- Shortfall
- −MYR 208,923
- Target
- MYR 310,000
- Revenue
- MYR 450,154
- Surplus
- +MYR 140,154
- Target
- MYR 507,284
- Revenue
- not started
- Gap to target
- n/a
Launching a new product
Not a forecastThis model needs history, and a new product has none. Rather than draw a line and call it a forecast, this states exactly what the system would need, what it can show you in the meantime, and what that shape is not.
| Requirement | Value | Why |
|---|---|---|
| Ideal history | 24 months | Two observations of every festival, which is what the hierarchical shrinkage needs to be stable. |
| Minimum for a trustworthy trend | 112 days | Both halves of the 56-day comparison must be full, or a flat product reads as growth. |
| Minimum for a level at all | 28 days | The level is an exponentially weighted mean over the trailing four weeks. |
| Available for a new product today | None | Which is the whole point of this screen. Nothing below is a forecast. |
- No error figure. Every accuracy number in this product is a rolling-origin back-test result, and a product with no history has nothing to back-test. None is shown here because none has been measured.
- No confidence band. The bands elsewhere are the measured percentiles of that back-test's residuals. There are no residuals for a product that has never sold, so a band here would be borrowed from a different product and relabelled.
- No launch curve, and none is possible. Not one product in this history has ever launched: all five trade from the first day of the 24-month window, so there is no measured ramp, no time-to-plateau and no first-week multiple anywhere in the data. Your assumed rate is applied at the same value on every day, including the first.
- The trend term is unreliable below 112 days and not merely absent. The model compares the last 56 days against the 56 before them. For the first 56 days after launch the earlier window is entirely empty and the trend correctly reads flat. From roughly day 57 to day 111 it is PART empty, so a product selling at a perfectly flat rate reads as growing at the model's maximum permitted +33.9% a year. Only past day 112 is the comparison like for like. Do not trust the model's own trend for a new product before then.
- The shape you can see is the analogue's WEEKDAY pattern, not this product's, and NOT its festive calendar. The observed days are replotted a whole number of weeks forward, so the weekday alignment is exact, but a festival falls on a fixed date rather than a weekday, so no festival in the source window lands on its matching day here. It is drawn so you can see the form of the output, and it says nothing about how the new product will actually sell.
Forecast accuracy
iScoring a published forecast run
iv2.4.1 · run 2026-05-23The 80 percent interval stored on each forecast row contained the actual on 235 of 300 SKU-branch-days (78.3 percent). That is the interval as it was published, read back off the row.
Pooled up to a network total, the interval contained the actual on 16 of 30 days (53 percent). That band is pooled from the same measured residual variance the row bounds came from, never summed across them, so it is derived here rather than published at the time. Only the per-row interval is calibrated to 80 percent by construction: pooling treats count noise as cancelling across branches and model error as correlated, so on a network total a single run can land either side of 80.
- The point estimates are out of sample. The model was fitted on data up to 23 May 2026 and nothing after it. The interval WIDTH is not: it comes from a variance model fitted across all rolling origins at once, this run included. So the coverage figures above show the published band is calibrated, not that it would have been calibrated using only what was known on the day.
- One run is one sample. The panel above this one scores the same model at every rolling origin, and that is the figure to quote for the model rather than this one. A run can be lucky.
