Actual vs forecast demand, with confidence band · combo + band
Forecast line and 90% band over a 12 week holdout, against actual bookings (bars).
Demand by month & weekday · heatmap
Seasonality and day of week together, the brightest cells are peak pricing windows.
Occupancy by day of week · bar
Weekend demand sets the pricing ceiling.
Seasonality & price tier · area + stepped line
Demand index by month with the recommended rate tier stepping alongside.
Forecast driver importance · radar
How much each feature contributed to the demand model.
The question
A short term rental operator priced units on gut feel and reacted late to busy periods. They needed a forecast that said, weeks ahead, how much demand was coming and what nightly rate each period could support.
How I did it
- Built the inputs in Python from the booking history: how far ahead people book, weekday or weekend, the month and the season.
- Trained a demand forecast with a confidence band and tested it on a held back 12 weeks, landing near 8% average error.
- Read season and day of week together on a heatmap, then matched the forecast demand to sensible price bands.
- Checked which inputs mattered most on a radar, and put the forecast and the suggested rates into a Tableau dashboard.
What the analysis found
- Lead time was the strongest early signal, pickup pace 21 days out reliably flagged peaks.
- Flat pricing undercharged weekends and peaks and overcharged slow midweek windows.
- Demand based pricing produced a +12% modeled revenue gain at similar occupancy.
Recommendation: Replace flat nightly rates with demand based pricing driven by the forecast, and alert when 21 day pickup signals a peak so rates move up before inventory sells out cheaply.
Tools
Python · Excel · Forecasting · Tableau / Power BI
▸Built on a simulated hospitality booking dataset so the forecasting and pricing method is fully visible.