Розробка AI-системи динамічного ціноутворення для готелів Revenue Management
Revenue Management (RM) - управління прибутковістю через оптимізацію цін залежно від попиту. Авіаційна промисловість використовує RM з 1980-х. Готелі запровадили пізніше, і більшість досі працюють зі спрощеними правилами. AI-система підвищує RevPAR (Revenue per Available Room) на 5-15%.
Ключові концепції Hotel RM
Основні метрики:
- Occupancy Rate: % заповнених номерів
- ADR (Average Daily Rate): середня ціна проданого номера
- RevPAR = Occupancy × ADR - ключовий KPI
- TRevPAR: Загальний дохід на кожен доступний номер (харчування та напої, спа, парковка)
Мета оптимізації:
Maximize RevPAR = Σ (price_t × occupancy_t) / total_rooms
Чи не максимізувати occupancy (продамо за дешевою ціною) і не ADR (продамо мало). Баланс між ціною та заповнюваністю.
Прогноз попиту
Вхідні дані:
demand_features = {
# Исторические
'occupancy_lag_7d': occupancy_7_days_ago,
'occupancy_lag_365d': occupancy_same_date_last_year,
'revenue_lag_7d': revenue_7d_ago,
# Forward-looking (из OTA, direct booking)
'reservations_on_books': current_reservations,
'reservations_pace': reservations_vs_same_period_last_year,
'cancellation_rate_on_books': expected_cancellations,
# Внешние
'city_events': conference_concert_sports_score,
'holiday_flag': is_holiday,
'competitor_rates': compset_avg_rate, # из Rate Shopping tool
'flight_arrivals_forecast': airport_arrivals,
'weather': weather_forecast,
'day_of_week': dow,
'days_until_arrival': lead_time
}
Модель: LightGBM для прогнозу occupancy × 365 днів вперед (кожна дата → окремий прогноз). Оновлення щодня з новими даними про бронювання.
Оптимізація цін
Price Sensitivity модель:
def estimate_demand(price, base_demand, elasticity):
"""
log(D) = log(D0) + ε × log(P/P0)
ε = price elasticity (обычно -0.5 до -2.0 для отелей)
"""
return base_demand * (price / baseline_price) ** elasticity
Оптимізація доходів:
from scipy.optimize import minimize_scalar
def optimize_price(base_demand, elasticity, variable_cost=0):
def neg_revenue(price):
demand = estimate_demand(price, base_demand, elasticity)
return -(price - variable_cost) * demand
result = minimize_scalar(neg_revenue, bounds=(min_price, max_price), method='bounded')
return result.x
Сегментація каналами:
- OTA (Booking.com, Expedia): висока комісія 15-20%, широка аудиторія
- Direct (сайт готелю): немає комісії, лояльні клієнти
- Corporate: фіксовані ставки за договором
- GDS: корпоративні агенти
Різні канали – різні оптимальні ціни (net revenue = price – commission).
Оптимізація тривалості перебування (LOS)
Не лише сьогоднішня ціна, а й скільки днів бронюють. У п'ятницю перед порожньою неділею приймати лише довгі бронювання (fri+sat+sun) з ціною трохи нижче.
Minimum LOS обмеження:
def calculate_min_los(date, forecast, avg_los_by_segment):
"""
Если прогнозируется высокий спрос на период D+2/D+3 →
установить минимальное LOS = 2, чтобы не "дробить" инвентарь
"""
if forecast[date:date+timedelta(days=2)].mean() > occupancy_threshold:
return 2 # требуем минимум 2 ночи
return 1
Аналітика конкурентних цін
Real-time моніторинг цін конкурентів:
Оцінка покупок:
- OTA Insight, Duetto, RateGain: агрегатори цін конкурентів
- Парсинг безпосередньо (legality depends on ToS)
- Rate parity: перевірка, чи немає нижчої ціни в OTA, ніж на прямому сайті
Конкурентне позиціонування:
def competitive_rate_recommendation(own_forecast, compset_rates, positioning='market'):
"""
positioning: 'premium' (+10% к compset), 'market' (паритет), 'value' (-5%)
"""
compset_avg = np.mean(compset_rates)
if positioning == 'premium':
target = compset_avg * 1.10
elif positioning == 'market':
target = compset_avg
else:
target = compset_avg * 0.95
# Если прогнозируем высокий собственный спрос — отклоняемся вверх
demand_premium = max(0, (own_forecast.occupancy - 0.8) * 50)
return target + demand_premium
Інтеграція з PMS та Channel Manager
PMS (Система управління нерухомістю):
- Opera Cloud, Protel, 1С: Готель
- API для отримання: reservations, occupancy, rate plans
- API для запису: rate updates
Менеджер каналу:
- SiteMinder, Wubook, Bnovo
- Синхронізація оновлених цін на всі OTA одночасно
Трубопровід:
- Щоденно 05:00: імпорт reservations з PMS
- Оновлення прогнозу попиту
- Запуск оптимізатору цін для горизонту 365 днів
- Перевірка цінових правил (min/max rates, rate parity)
- Запис у Channel Manager → автоматичне оновлення на Booking.com/Expedia
Метрики:
- Покращення RevPAR: 5-15% порівняно з базовим рівнем (без штучного інтелекту, RM)
- Точність прогнозу (заповненість MAPE): < 8%
- Price update frequency: щодня для 365 днів
Терміни: прогноз occupancy + базовий price optimizer - 6-8 тижнів. Повноцінна система з LOS-оптимізацією, competitive intelligence та PMS-інтеграцією – 4-5 місяців.







