Разработка 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: Total Revenue per Available Room (F&B, SPA, парковка)
Оptimization objective:
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
Revenue Optimization:
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).
Length of Stay (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
Competitive Rate Intelligence
Real-time мониторинг цен конкурентов:
Rate Shopping:
- OTA Insight, Duetto, RateGain: агрегаторы цен конкурентов
- Парсинг напрямую (legality depends on ToS)
- Rate parity: проверка, нет ли более низкой цены в OTA, чем на прямом сайте
Competitive positioning:
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
Integration с PMS и Channel Manager
PMS (Property Management System):
- Opera Cloud, Protel, 1С:Отель
- API для получения: reservations, occupancy, rate plans
- API для записи: rate updates
Channel Manager:
- SiteMinder, Wubook, Bnovo
- Синхронизация обновлённых цен на все OTA одновременно
Pipeline:
- Ежедневно 05:00: импорт reservations из PMS
- Обновление прогноза спроса
- Запуск оптимизатора цен для горизонта 365 дней
- Проверка ценовых правил (min/max rates, rate parity)
- Запись в Channel Manager → автоматическое обновление на Booking.com/Expedia
Метрики:
- RevPAR improvement: 5-15% vs. baseline (без AI RM)
- Forecast accuracy (MAPE occupancy): < 8%
- Price update frequency: ежедневно для 365 дней
Сроки: прогноз occupancy + базовый price optimizer — 6-8 недель. Полноценная система с LOS-оптимизацией, competitive intelligence и PMS-интеграцией — 4-5 месяцев.







