Hotel revenue managers often rely on intuition, leading to revenue losses of up to 15%. We replace intuition with a data-driven forecast built on LightGBM and custom features. An error in occupancy prediction results in an overcrowded restaurant or idle staff—we solve this through granular analysis of OTB, pickup, and cancellations. Our team has 10+ years of experience in AI/ML and 30+ implemented projects in hospitality. We guarantee MAPE <5% at a 14-day horizon after model stabilization.
System Architecture for Hotel Occupancy Forecasting
On-the-books (OTB) Base — AI System Development
The current booking portfolio is the starting point. On a date 30 days out, OTB predicts final occupancy with 70–80% accuracy based solely on existing bookings.
Pickup Forecast
How many more bookings will come in from now until arrival. The pickup pattern is specific to each hotel and segment. We use historical pickup curves weighted by segment.
def pickup_forecast(arrival_date, current_reservations, pickup_curves): """ For each segment: historical pickup by day to arrival Example: business segment books on average 7 days ahead, leisure 30 """ days_until_arrival = (arrival_date - today).days expected_pickup = {} for segment, curve in pickup_curves.items(): expected_pickup[segment] = curve.predict(days_until_arrival, current_reservations[segment]) return sum(expected_pickup.values()) Cancellation Correction
Not all bookings materialize. Cancellations depend on lead time, rate type (non-refundable — 0%), and channel (OTA vs direct). No-show adds another 2–5%. The model predicts cancellation rate by segment using historical data and lead time. According to a study by Hospitality Technology, accurate cancellation forecasting reduces losses by up to 10%. We add the feature cancellation_exposure—the share of bookings with a high cancel rate—improving accuracy by 5–7%.
| Segment | Lead time 30+ days | Lead time 7-14 days |
|---|---|---|
| OTA | 30–40% | 10–15% |
| Direct | 15–20% | 5–8% |
| Corporate | 5–10% | 2–3% |
Feature Engineering
Feature engineering example
```python occupancy_features = { 'rooms_on_books': current_reservations, 'otb_vs_last_year_same_date': otb / last_year_otb, 'pace_index': otb_growth_rate, 'cancellation_exposure': high_cancel_rate_bookings, 'occupancy_same_date_last_year': historical_occupancy, 'occupancy_avg_dow_last_4w': avg_occupancy_day_of_week, 'convention_center_events': events_score, 'sports_events': sports_score, 'concerts': concert_score, 'graduation_season': graduation_flag, 'month': month, 'week_number': week_of_year, 'is_holiday': holiday_flag, 'school_holidays': school_holiday, 'competitor_sold_out': compset_availability_index, 'market_demand_index': str_market_demand } ```These features allow the model to account for both internal trends (OTB, pickup) and external factors (events, market). The importance of each feature is evaluated via SHAP values, yielding an interpretable forecast.
Models by Horizon
| Horizon | Features | MAPE | Model |
|---|---|---|---|
| 1–14 days | OTB + pickup + cancellation | <5% | LightGBM |
| 14–60 days | OTB + events + seasonality | 8–12% | XGBoost + event embed |
| 60–365 days | Seasonal decomp + macro | 15–25% | Prophet + trend |
LightGBM on short-term achieves the best accuracy due to its ability to capture nonlinear interactions between OTB features. Compared to ARIMA, LightGBM reduces MAPE by half at a 14-day horizon. For medium-term forecasts, we use XGBoost with event embedding; for long-term, Prophet with seasonal decomposition.
How PMS Integration Improves Forecast Accuracy?
Automatic import of bookings from PMS every 4 hours allows real-time forecast recalculation. When a group booking occurs, the system triggers a pickup forecast recalculation. The revenue management dashboard updates automatically, providing an operational occupancy picture. This reduces forecast error by 10–15% compared to manual updates once per day.
We also integrate STR (Smith Travel Research) data for competitor set comparison. The Market Penetration Index (MPI) allows adjusting the forecast for market share.
Accuracy metrics: D-1 forecast MAPE < 5%, D-7 forecast MAPE < 8%, D-30 forecast MAPE < 12%.
Segmented Hotel Forecast
Overall occupancy is not enough. We need a breakdown by guest segment and room type.
Guest Segments
- Transient leisure (FIT): highest price, price-sensitive
- Corporate: fixed rates, predictable pattern
- Groups & Meetings: booked well in advance, high volume
- OTA vs. Direct: different commission and client type
Room Type
- Standard / Deluxe / Suite: different price, different demand elasticity
- Single vs. Double: occupancy patterns differ
A segmented forecast enables dynamic pricing for each segment, increasing RevPAR by 5–8%. The additional revenue averages 1–2 million rubles per month for a 200-room hotel.
Operational Planning
Staffing
Housekeeping: occupied_rooms × checkout_stayover_mix × min_per_room / 60 F&B: expected_guests × meal_plan_pct × meals_per_time_slot Front Desk: check-ins_per_hour / optimal_agent_load Accurate occupancy forecasts optimize staffing and procurement costs. For example, at 80% occupancy, housekeeping needs 12 people; at 50% — 8. Staffing savings can reach 200,000 to 500,000 rubles per month.
Procurement
Breakfast forecast → product purchase 2–3 days ahead. Amenities ordered weekly based on forecast.
Maintenance Scheduling
Predicted low occupancy → schedule technical room work without revenue loss.
Why Segmented Forecast Generates More Profit?
Segmented forecast enables dynamic pricing for each segment. For instance, if the leisure segment shows high pickup, we can raise prices on standard rooms. The leisure segment often books closer to the date and is willing to pay more when occupancy is high. The segmented approach allows raising prices on standard rooms without affecting corporate blocks. Our experience shows RevPAR growth of 5–8% after implementing a segmented forecast. Order the development of an hotel occupancy forecasting system to achieve similar results.
How We Build the Model: Step-by-Step Process
- Analyze PMS data and identify biases.
- Feature engineering: OTB, pickup, events, competition.
- Train LightGBM with time-based cross-validation.
- A/B test with current forecast on historical data.
- Deploy model on Kubernetes via MLflow.
- Monitor accuracy and automatically retrain on data drift.
- Continuous monitoring and weekly retraining.
Scope of Work and Timelines
Included:
- PMS data analysis and bias identification
- Feature engineering: OTB, pickup, events, competition
- LightGBM/XGBoost training and validation
- Revenue management dashboard
- Model and ETL documentation
- Staff training
- 3 months post-deployment support
Basic occupancy forecast with LightGBM and OTB features — 4–5 weeks. Segmented system with event calendar and operational planning — 3–4 months. Cost is calculated individually after data audit. Contact us for a preliminary assessment. Get a consultation on a pilot project.







