Раньше маршруты на Картах ранжировались по времени в пути: работал принцип «самый быстрый — самый первый». Но в реальном мире скорость не всегда равна удобству и пользователь мог оказаться в ситуации, что маршрут вроде бы позволяет добраться до конечной точки быстрее, но придётся долго разбираться, а куда вообще ехать. 

Теперь ранжированием маршрутов занимается ML‑модель, которая обучена на реальном поведении пользователей. Она учитывает не только время, но и то, по каким маршрутам водители доезжают до конца. Поэтому сейчас первый вариант — тот, который вы, скорее всего, выбрали бы сами.

Я Илья Хохлов, руководитель службы разработки сервисов маршрутизации. Наша команда отвечает за ключевые алгоритмы навигации в Картах и в Навигаторе: маршрутизацию, прогноз времени в пути и позиционирование. В этой статье я расскажу о том, как мы переосмыслили ранжирование маршрутов в навигации на Картах и в Навигаторе: как именно ML‑модель понимает, какой маршрут предлагать первым, и как это решение повлияло на количество сходов с маршрута.


Что было не так с ранжированием

Задача навигации — не только построить маршрут, ��о и выбрать, какой из нескольких разумных вариантов показать пользователю первым. Между точками A и B почти всегда существует несколько маршрутов, и именно порядок их показа во многом определяет дальнейшее поведение пользователя. ​​В большинстве случаев человек просто нажимает «Поехали» и едет по первому предложенному пути.

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

Долгое время этот порядок формировался простой сортировкой по ETA (Estimated time of arrival), из‑за чего удобные и предсказуемые маршруты не оказывались на первом месте и иногда вовсе выпадали из топ-3, а логика со временем обрастала эвристиками и плохо масштабировалась.

Ранее мы уже пытались уйти от эвристик, обучая ранжирование на явных выборах пользователя — ситуациях, когда он осознанно выбирает не первый маршрут. Однако такой сигнал оказался слишком редким: в большинстве поездок пользователь следует первому маршруту и отклоняется от него позже, часто неосознанно. Поэтому такой сигнал оказался недостаточным для обучения ML‑модели ранжирования.

От кликов — к реальному поведению

Когда мы вернулись к перестройке ранжирования, попробовали учитывать фактическое поведение пользователя вместо кликов — насколько реальный трек поездки совпадает с первым маршрутом. Фактически это и стало нашим новым таргетом для обучения ML‑модели ранжирования: чем выше совпадение, тем более удачным мы считаем маршрут.

Например, два маршрута могут отличаться по ETA всего на 20–30 секунд, но по одному пользователь доезжает до конца, а с другого в какой‑то момент сходит. Как правило, более простой и предсказуемый маршрут приводит к меньшему числу сходов, даже если поездка занимает немного больше времени.

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

Красный маршрут предлагается новым ML‑ранжированием. Он немного проигрывает по ETA, но при этом более предсказуемый и простой. В реальных поездках пользователи реже сходят с такого маршрута, поэтому он оказывается более предпочтительным.

Так выглядит сложный манёвр из синего маршрута в реальности:

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

В целом эффект от нового подхода хорошо был заметен на маршрутах через центр города: они часто выглядят привлекательно по ETA, но с них нередко сходят — вероятно, из‑за более сложной дорожной обстановки и проблем с GPS. Модель начала реже принимать такие маршруты в качестве основных, даже если они выглядят более короткими. В эксперименте доля маршрутов через центр в выдаче снизилась примерно на 3%.

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

Например, нам нужно доехать от станции метро «Таганская» до «Маяковской». Маршрут через центр выигрывает по ETA и в старом ранжировании поднимается на первое место. Более предсказуемый объезд по Садовому кольцу также был в выдаче, но оценивался как более медленный. ML‑ранжирование в подобных случаях чаще поднимает второй маршрут выше, даже при небольшом проигрыше по времени. Это не строгое правило: итоговый выбор зависит от совокупности признаков. При одном их наборе — например, времени суток, текущей загруженности дорог и сложности манёвров — система предпочитает один маршрут, а при другом наборе признаков приоритет может сместиться к альтернативе.

От ранжирования — к задаче выбора маршрута

Когда появился новый таргет, следующим шагом стал выбор функции потерь. Мы начали с YetiRank — это функция потерь, которая придумана и применяется в Яндексе. Она оптимизирует позиции наиболее релевантных объектов. Для нас это стандартный подход к задачам ранжирования, и на старте он дал заметный эффект. Однако довольно быстро стало понятно, что сама постановка задачи всё ещё не полностью совпадает с реальным пользовательским сценарием.

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

В такой постановке для каждой поездки модель получает набор альтернативных маршрутов и учится распределять между ними вероятности выбора. One‑hot‑таргет указывает, какой маршрут в итоге выбрали, а Softmax позволяет напрямую оптимизировать вероятность этого выбора относительно остальных вариантов. В результате модель учится не просто упорядочивать маршруты, а предсказывать, какой из них с наибольшей вероятностью будет выбран в реальной поездке.

При внедрении такого подхода мы учитываем и продуктовые ограничения. Модель может поднимать выше маршрут, который хорошо соответствует поведенческим паттернам, но заметно уступает самому быстрому по времени прохождения. Чтобы сохранять ожидаемое поведение навигации, сейчас мы дополнительно ограничиваем допустимую разницу по ETA. Это временное решение, от которого мы планируем постепенно отказаться по мере развития ранжирования. Уже сейчас с этим ограничением примерно в 20% случаев на первом месте оказывается маршрут, который не является самым быстрым по времени прохождения, но по которому пользователи чаще доезжают до конца.

Результаты A/B-экспериментов

В экспериментах мы увидели устойчивое улучшение качества навигации. Число истинных сходов снизилось в среднем на 2,19%, при этом базовое поведение пользователей не изменилось: около 92% поездок, как и в контроле, начинаются с первого предложенного маршрута.

Параллельно выросла доля «хороших поездок» — сценариев без сходов, в которых пользователь следует по одному маршруту до финиша. В среднем показатель увеличился на 2,16%. Эффект распределён по времени суток неравномерно и усиливается в часы пик, когда дорожная обстановка сложнее и выбор маршрута особенно критичен.

В регионах России эффект выражен сильнее там, где навигация сталкивается с проблемами GPS. В таких местах модель, опираясь на поведение пользователей, реже выбирает маршруты, с которых люди регулярно сходят. Например, в Северной Осетии доля хороших поездок выросла в среднем примерно на 8%.

Отдельно стоит отметить международные регионы, где эффект местами выше среднего. Помимо общего снижения сходов, там заметно уменьшаются сходы с выигрышем по времени — например, в Узбекистане на 8,5%, в Казахстане — на 6,6%.

Как отмечалось выше, основной эффект — в сценариях, где ранжирование меняет выбор маршрута относительно самого быстрого варианта. Если рассматривать только такие поездки, рост доли хороших поездок значительно выше: в Москве — около 10%, в той же Северной Осетии — до 24%.

Что дальше

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

А пока можете оценить новые предложенные маршруты на практике: они уже доступны в приложениях Карт и Навигатора.