The next best package for each guest and night
A package hides the room rate, so value can flex on peak and green-season nights without breaking OTA rate parity. The engine ranks offers by expected profit: P(accept) × add-on margin, minus breakfast the guest would have bought anyway.
Night Sat 7 Nov B · Busy
Guest
Share of room nights
20%
When they book
Weekends, 30–60 days out
Why this offer mix
High spend, low price sensitivity
| Offer | Add-on | P(accept) | Expected/ booking |
|---|---|---|---|
Room + Mekong Dinner First offer 3-course riverside set ×2 | +990 | 22% | 112 |
Room + Sunrise & That Phanom Bikes, local guide, temple half-day ×2 | +850 | 15% | 65 |
Room + Breakfast Buffet breakfast ×2 | +490 | 48% | 60 −40 cannibalised |
Upgrade + late checkout Next category + 15:00 checkout | +400 | 14% | 48 |
Festival Night Only on tier A+ nights | +2,190 | 35% | – |
Stay-2 Rainy Escape Only on tier D/C nights | +1,050 | 6% | – |
Guardrails the engine can't break
- Add-on ≥ cost + 35%.
- Add-on ≤ 85% of the parts, so guests always see value.
- Festival Night only on A+ nights; Stay-2 only on D/C nights.
- Breakfast cannibalisation netted at THB 210 margin.
How it learns (phase 4)
These acceptance rates are starting priors. Once live, a Thompson-sampling bandit shows two or three offers per segment, watches what guests book, and shifts traffic to the winners each week. All 6 offers pass the guardrails today.