Lumière Skin Malaysia
Synthetic
Date range
Region
Branch
SKU
Campaign
Compare

Forecast and Campaigns

Connect future demand to promotion plans, always with a range and a model version.

Comparison
Model v2.4.1 · run 16 Oct 2026

Actual versus forecast · SK-002

i
v2.4.1 · run 2026-10-16
Forecast, next 30 days
0 units
0 to 0 · 80% interval
The interval is the measured 10th to 90th percentile of the residuals this model actually produced at each horizon, pooled across branches rather than added up. Adding up per-branch bounds would assume every branch is wrong in the same direction on the same day, and would be roughly three times too wide.
Actual units (M-02)Forecast point estimateLower to upper boundCampaign window

What the model actually did

i
What moved SK-002 over the next 0 dayslargest first, and nothing that did not apply is listed
The live run stored no factors for this selection, so there is no ranking to show. Nothing is estimated in the meantime.
SKUthe screen filter, so the chart above moves with it
Branchordered by share of the forecast in this window
Daythe 0 days inside the horizon
This run published no row for that branch, SKU and day together, so there is nothing to decompose. The factor table covers the live run only.

Campaign results

i
CampaignOfferUpliftIncr. GPvs targetCannibalisation
Payday 15% off Serum, Oct
in flight · Healthy across the network
Percentage discount+16.9%−MYR 22,39256%9/14 daysNone detected
Cleanser + Moisturiser bundle, Oct
Healthy across the network
Bundle+21.1%+MYR 26,300145%+MYR 140,154−21.1% SK-003
Cleanser + Moisturiser bundle, Sep 2026
Healthy across the network
Bundle−19.6%−MYR 69,051119%+MYR 64,505−13.7% SK-003
Flash 12% off Cleanser, Sep 2026
Healthy across the network
Percentage discount+9.1%−MYR 14,61760%−MYR 121,461None detected
Daily ritual bundle, Aug 2026
Healthy across the network
Bundle+28.0%+MYR 47,974127%+MYR 100,518−30.5% SK-003
Payday 20% off Serum, Aug 2026
Healthy across the network
Percentage discount+2.7%−MYR 23,03248%−MYR 234,539None detected
Merdeka SPF push, Jul 2026
Healthy across the network
Gift with purchase+9.7%−MYR 5,50340%−MYR 208,405None detected
Mid-month 18% off Night Cream, Jul 2026
Healthy across the network
Percentage discount−0.1%−MYR 35,84747%−MYR 254,881None detected
Cannibalisation is measured at receipt level: units of the moisturiser bought on a basket that does not also contain the cleanser. Counting total units would show the line growing and miss the effect entirely.

Scenario

i

The 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
Payday 15% off Serum, Oct
8 to 21 Oct 2026
In flight
Attainment
55.5%
Target
MYR 470,000
Revenue so far
MYR 261,077
Shortfall
−MYR 208,923
9 of 14 days elapsed, 5 still to run. The target covers all 14 days, so this is a partial reading and is not run forward.
Cleanser + Moisturiser bundle, Oct
1 to 14 Oct 2026
Completed
Attainment
145.2%
Target
MYR 310,000
Revenue
MYR 450,154
Surplus
+MYR 140,154
Closed after all 14 days. This is the final figure.
Weekend 20% off SPF, Nov 2026
9 to 24 Nov 2026
Not started
Attainment
Not measurable yet
Target
MYR 507,284
Revenue
not started
Gap to target
n/a
Starts in 24 days and runs for 16. There is nothing measured to compare against the target yet.
Revenue here is the same figure the uplift column above is measured from: sales of the SKUs the campaign is eligible on, across the whole branch network, over the campaign days that have happened. A campaign still running is compared against its full-campaign target with the days elapsed and remaining beside it. Nothing is pro-rated or run forward, because a campaign does not sell evenly across its days in a market whose demand shape is payday and the weekend.

Launching a new product

Not a forecast

This 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.

RequirementValueWhy
Ideal history24 monthsTwo observations of every festival, which is what the hierarchical shrinkage needs to be stable.
Minimum for a trustworthy trend112 daysBoth halves of the 56-day comparison must be full, or a flat product reads as growth.
Minimum for a level at all28 daysThe level is an exponentially weighted mean over the trailing four weeks.
Available for a new product todayNoneWhich is the whole point of this screen. Nothing below is a forecast.
Illustrative shape, 30 days
SK-002 Radiance Vitamin C Serum is the analogue, scaled to an assumed 12 units a day. The wiggle you can see is Radiance Vitamin C Serum’s weekday pattern and nothing else, not the new product’s, and not any festive calendar: the days are replotted a whole number of weeks forward, which preserves the weekday and cannot preserve a date.
No band is drawn, because none has been measured. See below.
What this will not tell you
  • 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

i
20.7%
Oct 25
20.2%
Nov 8
20.3%
Nov 22
19.1%
Dec 6
20.1%
Dec 20
20.7%
Jan 3
19.9%
Jan 17
20.3%
Jan 31
20.6%
Feb 14
17.1%
Feb 28
19.5%
Mar 14
18.4%
Mar 28
20.3%
Apr 11
20.4%
Apr 25
20.7%
May 9
22.7%
May 23
20.3%
Jun 6
20.4%
Jun 20
18.9%
Jul 4
22.0%
Jul 18
18.8%
Aug 1
19.4%
Aug 15
21.6%
Aug 29
19.5%
Sept 12
24.1%
Sept 26
20.6%
Oct 10
Per SKU, per branch, per day
19.9%
irreducible floor 15.8% · the hardest question the model is asked
Network total, per day
6.9%
irreducible floor 2.6% · errors cancel across ten branches
Network total, 30 days
3.4%
irreducible floor 0.5% · what a purchase decision consumes
Weighted absolute error over 26 rolling origins, model v2.4.1. All three figures are correct and they answer different questions, so each is labelled with the question it answers. The floor is what a model that knew the true rate exactly would still record: daily unit counts are small integers, so a share of the error is the dice and not the model. Bias is -0.4%, and 80% of actual days landed inside the published 80% interval.

Scoring a published forecast run

i
v2.4.1 · run 2025-10-25
Run date26 past runs can be scored. The live run (16 Oct 2026) cannot: its first target date is after 16 Oct 2026, the last day of sales in this dataset.
Per SKU, per branch, per day
19.9%
1,500 predictions, the grain this run was published at
Network total, per day
5.5%
30 days, errors cancel across 10 branches
Network total, whole window
0.8%
one window, so this is the size of the bias below
Weighted absolute error, all three from the same run and all three correct. They differ because they answer different questions: an over-forecast at one branch cancels an under-forecast at another, and a purchase covering the whole window consumes only the total. The run’s bias is -0.8%, so it predicted 24,085 units against 24,277 actual over 30 days (2025-10-26 to 2025-11-24).
Did the published interval hold

The 80 percent interval stored on each forecast row contained the actual on 1,252 of 1,500 SKU-branch-days (83.5 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 27 of 30 days (90 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.

Actual units (M-02)Predicted on 2025-10-25Pooled 80% intervalNetwork total outside it
What this does not prove
  • The point estimates are out of sample. The model was fitted on data up to 25 Oct 2025 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.