Ваш алгоритм прибыл

Как математика мирит спрос пассажиров с предложением таксистов

Агрегатор такси не просто связывает пассажиров с водителями. Это регулятор рынка, который постоянно анализирует поведение пользователей и экспериментирует со спросом и предложением. О том, как это делается, N + 1 рассказал руководитель отдела эффективности платформы «Ситимобил» Андрей Павлов.

Для людей по всему миру слово «Убер» стало синонимом агрегатора такси. Компания, основанная в 2009 году, устроила революцию на рынке. Но идея сервиса, который объединяет пассажиров и водителей, витала в воздухе до этого. Хотя компания «Ситимобил» создавалась в 2007 году как служба такси, она довольно быстро отказалась от раций — водители получали информацию о заказах через браузер мобильного. И позволила подключать к сервису сторонние автомобили. А в 2009 году закрыла свой таксопарк. С тех пор на рынок вышли и другие агрегаторы. И началась гонка технологий.

Если бы агрегатор такси работал просто как диспетчер — отвечал на заказы пассажиров и распределял водителей поблизости — рынок пришел бы к коллапсу. Пассажиры, для которых не нашлось водителя, и водители, которые не получили заказы, постепенно покинули бы сервис. Чтобы не допустить этого, агрегатор действует на рынке не просто в качестве посредника, а как полноценный участник, который балансирует спрос и предложение.

Он позволяет цене не только опускаться, но и подниматься, потому что слишком дешевое такси — плохо для всех. Сервис делит город на зоны (об этом ниже). Если в одной зоне спрос вырастет, а цена нет, то первые пассажиры успешно уедут. Когда свободные автомобили в этой зоне закончатся, туда будут назначаться машины из других районов. Там, в свою очередь, уменьшится предложение, и пассажиры уже не смогут вызвать машину.

Такая ситуация, когда таксисты мечутся по городу, называется Wild Goose Chase, или «погоня за диким гусем».

Таксист во время работы пребывает в одном из трех состояний: он свободен, направляется к пассажиру или выполняет заказ. Простейшая модель агрегатора предполагает, что:

1. Свободная машина немедленно назначается на любую запрошенную поездку;
2. Водители получают оплату только за выполненные заказы. То есть только за то время, когда они находятся в третьем состоянии.

Этот расклад как раз может привести к Wild Goose Chase — на заказы в зоны высокого спроса будут назначаться водители из дальних районов. Большая часть их рабочего времени придется на путь к пассажирам. И доход может оказаться ниже даже по сравнению с работой в зонах обычного спроса. Так агрегатор рискует лишиться большой части партнеров, а затем и клиентов. К тому же бесконтрольное перемещение водителей может значительно ухудшить ситуацию в зонах, где спрос не очень высокий, но все-таки имеется. Чтобы избежать всего этого, агрегаторы дают рынку сбалансировать цену соответственно росту количества заказов.

По словам Андрея Павлова, команда «Ситимобил» не пытается с помощью цен приравнять спрос к предложению. Она старается удерживать разницу между ними в пределах некоторого количества свободных машин.

 

На графике видно, что ETA (estimated time of arrival, время подачи авто) снижается с увеличением числа свободных машин. Значит, агрегатору нужно как можно больше свободных машин. Этого можно добиться за счет поднятия цены так, что пассажиров просто не будет и водители останутся свободны. Конечно, этот вариант недопустим. И поэтому существует другое ограничение, выражающееся в максимизации числа поездок и, как следствие, снижении простоя водителя и повышении его заработка.

Сейчас в «Ситимобил» работают над тем, чтобы выразить эти ограничения через постановку задачи математической оптимизации в данных ограничениях и численно решить ее для автоматического подбора оптимального значения числа свободных машин в разрезе времени и гео во всех городах присутствия. Задача эта, мягко говоря, сложная.

При настройке агрегатора многие факторы пересекаются. Так, количеством свободных машин сервис управляет с помощью surge multiplier, коэффициента высокого спроса (того самого 1.8x, 2x, которые пользователь видит в часы пик). Но он влияет и на спрос, и на предложение. Это объясняется тем, что среди водителей конверсия в принятии заказа (доля принятых заказов) в зоне действия surge multiplier выше.

Однако эластичность предложения по цене все равно уступает эластичности спроса по цене. Водители больше внимания уделяют своему дневному заработку, чем цене отдельно взятой поездки. Поэтому surge multiplier в большей степени влияет именно на количество заказов, чем на мгновенную активность водителя.

Побочный эффект — перемещение автомобилей в районы с высоким спросом, в свою очередь, сказывается на уровне предложения сразу в нескольких зонах.

Почему агрегатор делит город на гексагоны

Существует много способов разбить город на зоны. Эта задача относится к более широкой проблеме замощения плоскости. Среди правильных многоугольников есть всего три фигуры, которыми можно заполнить всю плоскость без пробелов и взаимопересечений: треугольник, квадрат и гексагон (правильный шестиугольник). В сервисе «Ситимобил» карта делится на гексагоны, так как в отличие от, например, квадрата, в гексагоне расстояние от центра до соседних областей одинаково. Еще одним преимуществом является наличие открытой библиотеки h3, которая позволяет удобно и эффективно работать с этой структурой.

Одновременно с выбором того, на какие фигуры разбивать карту, агрегатору нужно решить, делать это деление статическим или динамическим. Динамическое разбиение выглядит решением, которое позволит избавиться от некоторых болезней агрегатора. О них речь пойдет ниже. Можно построить гексагон вокруг пользователя и затем в его пределах быстро распределять заказы. Но огромное количество пользователей не дает использовать такой подход. Динамическое разбиение приведет к слишком большим нагрузкам на серверы и базу данных.

Поэтому «Ситимобил» использует уже построенную статическую сетку. Она позволяет легко связывать водителей и пассажиров, но имеет свои недостатки. Один из них — пограничный эффект. Пользователь и водитель могут находиться очень близко географически, но на карте — в разных гексагонах. Влияние этого водителя в расчете коэффициента не будет учитываться, хотя распределение «назначить ближайшего» в некотором радиусе назначит заказ на него.

Сгладить проблему помогает расширение зон сбора данных. Если данных о спросе для точного подсчета недостаточно, используют статистику близлежащих: на ее основании и находят свой surge multiplier.

«Ситимобил» ищет выход из положения. Правда, оно осложняется еще и тем, что соседние зоны могут отличаться уровнем спроса. А направлять водителя из района высокого спроса в район низкого было бы довольно странным решением. Поэтому при распределении заказы из зон обычного спроса учитываются с меньшим весом. Команда «Ситимобил» проводит различные эксперименты в поисках оптимального решения этой проблемы.

Какие алгоритмы помогают уехать на такси

Алгоритм расчета surge multiplier во многом опирается на результаты экспериментов. Их проведение затрудняется невозможностью применения некоторых стандартных моделей проверки статистических гипотез. В качестве примера можно взять модель, в которой участвуют «пользователь 1», «пользователь 2» и водитель. В этой ситуации нельзя рассматривать «пользователя 1» в качестве контрольной группы, а «пользователя 2» в качестве экспериментальной. Их объединяет один водитель. Соответственно, он возьмет заказ с более высокой ценой. Однако есть другие методы, которые позволяют экспериментально проверять имеющиеся алгоритмы.

Существует несколько способов выхода из положения. Во-первых, можно сравнивать недельные результаты, когда в одну неделю применяется один алгоритм, в другую — другой. Ограничение в таком случае — быстрый рост числа пользователей.

Во-вторых, можно использовать так называемый синтетический контроль. Показатели в условном городе А рассчитываются с помощью данных из других городов. С этим тоже есть сложности. В большой степени они связаны с расчетом весовых значений. Специалистам нужно учитывать, насколько рассматриваемые города похожи друг на друга. Пока этот подход для surge multiplier не используется.

Для экспериментов чаще используется метод switchback. Суть в том, что Москва, к примеру, уже поделена сеткой гексагонов. Случайным образом они делятся пополам на две группы. Одна выбирается в качестве контрольной, другая в качестве экспериментальной. Затем через каждые, условно, 15 минут гексагоны снова случайно делятся на две группы.  

Таким образом удается нивелировать влияние сетевого эффекта, когда любые изменения, которые происходят с экспериментальной группой, влияют на контрольную. Свои сложности, разумеется, есть и со switchback. Тем не менее, результаты эксперимента уже используются в работе агрегатора.

Метод switchback применяется для проверки моделей, когда традиционное разделение на контрольную и экспериментальную группы неэффективно. В случае с агрегаторами такси это во многом связано с сетевым эффектом.

Разумеется, можно сравнить показатели «до» и «после» и даже найти корреляцию. Но корреляция не всегда показывает причинно-следственную связь.

Суть метода switchback заключается в следующем:

1. Имеющиеся районы разбиваются на две группы: контрольную и экспериментальную. К экспериментальной применяется тестируемый алгоритм.
2. Через короткий промежуток времени группы гексагонов случайно изменяются. Затем снова меняются и так далее. Процесс перестановки продолжается все время действия эксперимента.
3. Показатели за время, когда алгоритм действовал и бездействовал, считаются в разные «корзины».
4. Показатели из двух «корзин» сравниваются, что позволяет оценить влияние алгоритма на различные ситуации.

Но есть случаи, которые требуют отдельного подхода. Например, при расчете ночных тарифов, когда заказов ожидаемо меньше, а у водителей, соответственно, больший холостой ход.В таких условиях меняется эластичность предложения: водители не готовы на меньший заработок, поскольку им еще нужно вернуться домой, а там плотность заказов может быть низкой.

Отдельной задачей стоит механизм поездок в аэропорт и из аэропорта. Эта зона не делится на гексагоны. К этим заказам применяется особый множитель тарифов. Помимо этого, отличается порядок распределения поездок. Водитель, который приехал в аэропорт, становится в «очередь» на заказ.

Есть и другие факторы, которые влияют на расчет базовой цены. Кроме пиковых часов, агрегаторы берут в расчет выходные, праздники и сезонные изменения. У «Ситимобил» за этим следит операционный отдел. Он учитывает в том числе дорожный граф города и покупательную способность жителей. В команде есть специалисты, которые отслеживают показатели в каждом из городов присутствия сервиса. Если какие-то из них проседают, используются соответствующие инструменты: клиентские или водительские субсидии, surge pricing, обычная тарификация и т.д.

Новая для агрегаторов область исследований — учет конкурентов. У многих пользователей на устройстве установлены сразу несколько приложений. Пассажир может сравнить два варианта и из них выбрать тот, что дешевле. С точки зрения оценки спроса это усложняет задачу, потому что клиент начинает как рациональный агент ориентироваться не только на цену выбранного агрегатора, но и на цену конкурента, что в модели учитывать практически невозможно. А значит поиск наилучших моделей еще продолжается.

Нашли опечатку? Выделите фрагмент и нажмите Ctrl+Enter.
Дивный новый mundus

Текстовый квест о суровом мире латыни