Данные о рынке собраны — 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. Логика работает — осталось проверить на реальных бронированиях.