Plan
Plan
Budget across five channels and three dayparts. Fifteen cells, a concave objective, and an optimum you can check rather than trust.
Each cell’s response saturates, so the total is concave and a greedy marginal allocation reaches the exact optimum — not an approximation of one. The check is the marginal spread above: at the optimum every funded cell returns the same amount for the next dirham.
Affinities and saturation rates are structural assumptions scaled by the forecast, not fitted elasticities. No promotion has run. Every response the allocator returns carries assumed=true, and an allocator presented as optimal on invented elasticities would be the most confident wrong thing in this application.
Where the money goes
| channel | morning | midday | evening | total |
|---|---|---|---|---|
| — | 275 | 2,225 | 2,500 | |
| — | — | 1,525 | 1,525 | |
| Delivery aggregator | — | 750 | 1,900 | 2,650 |
| Near-store OOH | 1,025 | 250 | 1,525 | 2,800 |
| SMS / CRM | 625 | 325 | 1,575 | 2,525 |
| total | 1,650 | 1,600 | 8,750 | 12.0k |
Cell shading is the thermal ramp by daypart — morning at the cool end, evening at the warm end — so the table reads as a heat map without introducing a colour that competes with it.
Diminishing returns
The curve the slider moves along. Concavity is not decoration: it is why there is a right answer at all, and why the second ten thousand dirhams buys less than the first.