Когда вы открываете приложение такси, вы можете видеть, что цена повысилась (или нет) и в разное время, в разных местах она по-разному себя ведёт. Почему так происходит и для чего это… объясню.
Мы в компании MyTaxi (агрегатор такси) стремимся удовлетворить клиента и водителя. Для первых одна из важных потребностей — быстрая подача машины, а для других — увеличение количества заказов (или уменьшение времени простоя) и, следовательно, заработка. Для нас это означает малое количество отмен и всё большее число пользователей захотят использовать наш сервис.
Важный фактор, который на это влияет — цена. Она обычно складывается из стоимости подачи, километража, времени поездки и… сурджа.
Что такое сурдж?
Сурдж — это коэффициент нагрузки района (повышенный спрос), определяемый как отношение количества клиентов к количеству водителей. Основная задача сурджа — достижение точки равновесия между спросом (клиенты) и предложением (водители). Добавочная стоимость рассчитывается как произведение коэффициента сурджа на цену за единицу сурджа.
Он, например, показывают водителю, где много клиентов, а водителей не хватает, а клиенту из-за этого не нужно долго ждать автомобиль. И наоборот, куда водителю нет смысла ехать из-за отсутствия заказов или наличия там уже других таксистов.
Расчёт сурджа можно реализовать путём деления количества альт-пинов (пользователь ставит точку, но ещё не заказал) на местоположение водителей.
Однако для MyTaxi такой сценарий не подходит по некоторым причинам:
-
Скорость обработки: сурдж должен рассчитываться молниеносно для каждого района. Это можно реализовать, но сложно.
-
Недостаток клиентов и водителей: недостаточное количество клиентов и водителей для охвата всего города.
Чтобы выйти из это ситуации, сурдж можно прогнозировать на основе исторических данных заказов и водителей. Тут я, как ML разработчик, обучил модель сурджа, которая используется в нашем сервисе. Сбор и обучение реализовывал на R, а модель встраивал в сервис, используя python.
Под районом имеется ввиду гексагон.
Подготовка и обучение модели
Процесс начинается с тщательной подготовки данных и обучения модели. Стоит добавить, что выгрузка и обработка данных занимает много времени, так как количество строк может достигать 200 миллионов за один месяц, а объём одного датасета может составлять до 20 ГБ.
Основные этапы включают:
-
Загрузка данных
-
Данные о местоположении водителей: эти данные позволяют определить количество водителей в каждом районе на каждой минуте.
-
Данные по заказам: определяется количество заказов в каждом районе по точкам отправления.
-
-
Обработка данных
-
Нахождение количества водителей: Определяется количество водителей в каждом районе за каждую минуту.
-
Нахождение количества заказов: Определяется количество заказов, поступивших в каждый район за каждую минуту.
-
Интервал: данные суммируются, чтобы отойти от минут к пятиминутным интервалам. Это нужно, чтобы уменьшить количество нулей по заказам или по водителям, а также сокращает датасет (в 5 раз).
-
Расчёт сурджа: отношение количества заказов + 1 к числу водителей + 1 (для предотвращения деления на ноль).
-
-
Обучение модели
-
Кластеризация данных: Данные по заказам и водителям группируются в кластеры для улучшения качества модели. Кластеры найдены с помощью K-means.
-
Вход и выход:
-
Входные данные для модели:
-
Сурдж за последние 20 минут (4 интервала)
-
День недели
-
Временной интервал, на который нужно спрогнозировать
-
Кластер
-
-
На выходе ожидается значение сурджа на указанный временной интервал и кластер
-
-
Создание и тестирование модели: Для прогнозирования сурджа были обучены несколько моделей (для проверки обучались на ограниченном количестве данных, чтобы ускорить процесс):
-
Линейная регрессия (lm)
-
Prophet
-
BSTS
-
Локализованная полиномиальная регрессия (loess)
-
Смешанные регрессионные модели (lmer)
-
Градиентный бустинг линейных данных
-
Рекуррентная нейронная сеть
-
-
Выбор лучшей модели: Методом перекрёстной валидации выбиралась лучшая модель. За базовую модель выбрана линейная регрессия.
-
Model MAE, surge MAPE, % RSME, surge R-square, % SMAPE, % Position loess 0.194 53.0 0.328 51.1 40.9 1 phophet 0.219 69.9 0.347 53.8 47.2 2 lm 0.218 81.4 0.348 52.5 45.8 3 lmer 0.264 104.7 0.389 45.8 60.3 4 grad_boost 0.585 138.7 0.749 54.6 70.6 5 neuro 0.455 255.9 0.583 0.6 87.0 6 bsts 1.697 904.7 2.350 1.8 134.2 7
Очень хорошо показывает себя Локализованная полиномиальная регрессия (loess), но тут есть одно большое НО. Тут исследовали в целом сурдж, но в реальности если сурдж < 1, то мы его учитывем как 1 — т.е. сурджа нет.
Поэтому правильно анализировать, какая модель себя лучше показывает при прогнозировании сурджа >= 1.
Model MAE, surge MAPE, % RSME, surge R-square, % SMAPE, % Position lm 0.825 42.3 1.068 8.2 19.7 1 grad_boost 0.656 35.1 0.909 3.8 58.3 2 phophet 0.837 42.9 1.081 8.0 20.9 3 lmer 0.835 42.6 1.088 6.6 23.9 4 loess 1.046 54.3 1.271 6.3 33.9 5 neuro 1.266 65.9 1.509 0.1 81.6 6 bsts 1.914 113.9 2.480 0.5 100.9 7
И тут, на удивление, лучше всего себя показала линейная регрессия, поэтому она была выбрана в качестве модели прогнозирования сурджа. Это хорошая практика тестировать несколько моделей, так как могут быть неожиданные результаты.
Расчёт коэффициента сурджа
После обучения модели она используется для расчёта коэффициента сурджа. Процесс (описан в нотации BPMN) определения цены по сурджу — это отдельная тема, тут описывается как рассчитываются эти коэффициенты для каждого гексагона.

Дальнейшие улучшения
Для повышения точности и эффективности модели в будущем планируются следующие улучшения:
-
Разбиение на тарифы: Прогнозирование сурджа ещё и для каждого тарифа. Сейчас рассчитывается для вех общий.
-
Добавление прогноза погоды: Учёт погодных условий для более точного прогнозирования спроса на транспортные услуги.
-
Добавление событий (афиша): Включение информации о местных событиях, которые могут влиять на спрос.
-
Расчёт сурджа на основе точки А и Б: Включение маршрута водителя, чтобы учитывать возможность возвращения из областей с низким сурджем в области с высоким сурджем.
-
Формирование сурджа на основе отказов: Учёт отказов от заказов для более точного определения загруженности.
Сурдж не только повышает качество обслуживания клиентов, но и способствует более рациональному использованию ресурсов компании и водителей. Он уже снижает время подачи, отказы клиентов из-за отсутствия рядом машины или долгого ожидания.
ссылка на оригинал статьи https://habr.com/ru/articles/818349/
Добавить комментарий