Development of an AI system for predicting hotel occupancy
An occupancy forecast is the foundation of a hotel's operational planning: how many staff members are needed per shift, how many breakfasts to prepare, when to perform maintenance in the rooms. An erroneous forecast translates into an overcrowded restaurant or idle staff.
Load Forecast Components
On-the-books (OTB) database: The current booking portfolio is the starting point. OTB can predict final occupancy with 70-80% accuracy 30 days in advance based on existing bookings alone.
Pickup forecast: How many more reservations will be received between now and the arrival date? The pickup pattern is specific to each hotel and segment.
def pickup_forecast(arrival_date, current_reservations, pickup_curves):
"""
For each segment: historical pickup for the given day before arrival
Example: the business segment books on average 7 days in advance, leisure 30 days in advance
"""
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 reservations are realized:
- Cancellation rate depends on: lead time (long = higher cancellation), tariff type (non-refundable = 0%), OTA vs. direct
- No-show rate: in addition to cancellations, 2-5% for most hotels
Feature Engineering
occupancy_features = {
# OTB signals
'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,
# Historical patterns
'occupancy_same_date_last_year': historical_occupancy,
'occupancy_avg_dow_last_4w': avg_occupancy_day_of_week,
# Events in the city
'convention_center_events': events_score,
'sports_events': sports_score,
'concerts': concert_score,
'graduation_season': graduation_flag,
# Seasonality
'month': month,
'week_number': week_of_year,
'is_holiday': holiday_flag,
'school_holidays': school_holiday,
# Market conditions
'competitor_sold_out': compset_availability_index,
'market_demand_index': str_market_demand # STR Global data
}
Models on the horizon
Short-term (1-14 days): OTB + pickup model provide high accuracy. LightGBM with OTB features. MAPE < 5%.
Medium-term (14-60 days): OTB is less informative. It places greater weight on historical patterns and events. MAPE is 8-12%.
Long-term (60-365 days): Strategic planning. Seasonal decomposition + event calendar + macro trends. MAPE 15-25%.
Segmented Forecast
General occupancy is insufficient. A section is needed along:
Guest segments:
- Transient leisure (FIT): highest price, sensitive to pricing
- Corporate: fixed rates, predictable pattern
- Groups & Meetings: booked well in advance, high volume
- OTA vs. Direct: Different Commissions and Client Types
Room type:
- Standard / Deluxe / Suite: different price, different elasticity of demand
- Single vs. Double: Loading patterns differ
Segmented forecast → segmented pricing policy.
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
Procurement: Breakfast forecast → grocery shopping 2-3 days in advance. Amenities (soap, towels) → weekly ordering based on the forecast.
Maintenance scheduling: With predicted low occupancy → technical work in the rooms without loss of revenue.
Integration with OTA and PMS
STR (Smith Travel Research) data: Market benchmark: occupancy of the competitive set. MPI (Market Penetration Index) = hotel_occ / market_occ.
Auto-update forecasts:
- Every 4 hours: import new reservations from PMS
- Recalculation of the pickup forecast
- Revenue management dashboard update
Export for operations:
- Daily report: tomorrow's occupancy by segment and room type
- Weekly report: 7-day forecast for shift planning
- Monthly report: strategic monthly plan for the CFO
Accuracy metrics:
- D-1 forecast MAPE: < 5% (день до заезда)
- D-7 forecast MAPE: < 8%
- D-30 forecast MAPE: < 12%
Deadlines: Basic occupancy forecast with LightGBM + OTB features – 4-5 weeks. Segmented system with event calendar and operational planning – 3-4 months.







