Данные о рынке собраны — 847 объектов с трёх платформ, цены по дням, рейтинги, координаты. Но сырые данные бесполезны, если не превратить их в ответы на конкретные вопросы. Сколько брать за ночь в высокий сезон? Кто мои прямые конкуренты? Когда поднимать цены, а когда скидывать?
За три дня (7-9 февраля) построил аналитический слой поверх Market Intelligence: карту конкурентов, KPI-дашборд, Comp Set менеджер и движок динамического ценообразования. Около 55 коммитов.
Каникулы 13 стран
Бали — не однородный рынок. В январе едут австралийцы (у них лето), в феврале — китайцы (Новый год), в апреле — индийцы, летом — европейцы. У каждой страны свои школьные каникулы и праздники, и они напрямую влияют на спрос.
Загрузил данные по каникулам для 13 стран-источников: Австралия, Китай, Индия, Япония, Южная Корея, Россия, Великобритания, Германия, Франция, Нидерланды, США, Сингапур, Малайзия. Модель SchoolHoliday хранит даты и страну. На графиках спроса теперь видно, почему загрузка растёт в конкретную неделю — не догадки, а факт: начались каникулы в Австралии.
KPI Dashboard
Четыре ключевых метрики:
- ADR (Average Daily Rate) — средняя цена за ночь по выбранному сегменту
- Occupancy — процент занятости, рассчитанный по календарям доступности
- RevPAR (Revenue Per Available Room) — ADR умножить на Occupancy, главная метрика доходности
- Supply — количество активных объектов в районе
Фильтры: район, количество спален, тип объекта, период. Графики строятся по дням — видно сезонность, провалы, аномалии. Price distribution analysis показывает, в каком ценовом диапазоне больше всего конкурентов и где есть свободные ниши.
Comp Set Manager
Comp Set — это набор прямых конкурентов для конкретной виллы. Не все 847 объектов, а 10-15 максимально похожих.
Бэкенд: алгоритм подобия. Оценивает каждый объект из базы по нескольким параметрам: район, количество спален, тип (вилла/апартаменты/дом), диапазон цен, рейтинг, наличие бассейна. Каждый параметр — вес, итоговый скор от 0 до 1. Объекты с высоким скором попадают в рекомендации.
Фронтенд: панель поиска. Ищешь конкурентов по фильтрам или вставляешь прямую ссылку на Airbnb/Booking — система находит объект в базе или запускает on-demand скрейпинг. Gap analysis показывает, чем твоя вилла отличается от конкурентов: цена выше/ниже, рейтинг, количество отзывов, amenities.
Карта конкурентов
MapLibre GL JS для рендеринга карты. Каждый объект из базы — точка на карте с ценой и рейтингом. При масштабировании точки группируются в кластеры с количеством объектов и средней ценой.
Два фильтра, которых нет у конкурентов:
- Фильтрация по береговой линии Бали. GeoJSON полигон острова отсекает объекты в океане — артефакты неточных координат с Airbnb. Без фильтрации карта показывала "виллы" в море, что ломало аналитику по районам.
- Радиус вокруг своих вилл. Круг 1/3/5 км от каждой из управляемых вилл. Показывает только ближайших конкурентов — тех, с кем реально делишь клиентов.
Popup при клике: название, цена, рейтинг, платформа, ссылка на детальную страницу. Кнопка "Добавить в Comp Set" прямо с карты.
Движок ценообразования
Собрал всё вместе в PricingEngine:
Модели. CompSet связывает виллу с набором конкурентов. PricingConfig хранит настройки: базовая стратегия (match market / beat market / premium), допустимый диапазон отклонений, минимальная цена. PriceRecommendation — результат расчёта на каждый день.
Мультипликаторы. Цена корректируется автоматически: - Сезонный множитель — высокий/низкий сезон по историческим данным - Событийный — Nyepi, Новый год, конференции увеличивают спрос - Каникулярный — школьные каникулы по 13 странам - Спросовой — если Occupancy в районе выше 85%, цена растёт
Celery tasks. Пересчёт рекомендаций запускается каждую ночь после обновления рыночных данных. Если цена конкурента резко изменилась — оповещение менеджеру.
CRM: WebSocket и AI
Параллельно доработал CRM-модуль. Добавил real-time обновления через WebSocket — Daphne как ASGI-сервер вместо Gunicorn для WebSocket-соединений. Новый запрос от гостя появляется в интерфейсе мгновенно, без перезагрузки.
AI auto-replies через Claude API: когда гость спрашивает стандартные вещи (цена, доступность, трансфер), система генерирует ответ и предлагает менеджеру. Менеджер одобряет одной кнопкой или редактирует. Не полная автоматизация — но экономит 2-3 минуты на каждом ответе.
Результат
~55 коммитов за 3 дня. Рыночные данные превратились в рабочие инструменты: KPI-дашборд с метриками ADR/Occupancy/RevPAR, карта конкурентов на MapLibre, Comp Set менеджер с алгоритмом подобия, движок динамического ценообразования с мультипликаторами.
Первый тест: PricingEngine предложил поднять цену на виллу в Чангу с $180 до $210 на неделю австралийских каникул. Конкуренты из Comp Set уже стояли на $200-230. Логика работает — осталось проверить на реальных бронированиях.