Люди часто вызывают такси к вокзалам, аэропортам, торгово-развлекательным центрам. Это большие здания со множеством входов и выходов, и найти приехавшую машину иногда непросто. Например, пользователь может ожидать водителя у главного подъезда — и не знать, что автомобильное движение там запрещено. Или бывает, что человек находится в одном конце здания, а водитель подъехал к противоположному. Это тоже неудобно: надо идти пешком сотни метров (порой — с детьми и багажом) либо договариваться о новом месте встречи.
Чтобы водителям и пассажирам было проще отыскать друг друга, мы научили приложение Яндекс.Такси подсказывать удобные точки посадки. Это места, которые расположены недалеко от выходов из здания и к которым можно без проблем подъехать на машине. Они отмечены на карте синими точками. Больше не нужно бегать с сумками по вокзалу или обсуждать с водителем ориентиры («Я стою под большим рекламным щитом — хотя погодите, они тут на каждом углу»). Просто выберите подходящую точку — и машина будет ждать вас именно там.
Точки посадки расположены у транспортных узлов, станций метро, офисных кварталов, торговых центров, вокзалов, аэропортов, жилых комплексов — в общем, там, где действует сложная схема организации движения. Это около 10 тысяч строений в одной только Москве. Вручную выделить для каждого удобные точки нереально, поэтому мы использовали алгоритм на базе машинного обучения.
Как определить удобные точки посадки
Мы проанализировали обезличенные треки поездок, выполненных автомобилями Яндекс.Такси за последние месяцы. Для каждого трека известна точка начала поездки: там человек сел в такси. Казалось бы, достаточно отыскать места, где много таких точек накладываются друг на друга — раз все садятся в авто именно там, значит, это удобное место. Но всё не так просто: зачастую здания окружает целое облако точек — они распределены по карте почти равномерно. Это вина GPS — при определении местоположения система может ошибаться на десятки метров.
Алгоритм смотрит на дорожный граф и отбрасывает точки, где GPS явно соврал. Очевидно, что водители перемещаются только по дорогам: такси вряд ли заберёт человека прямо со взлётно-посадочной полосы аэродрома, лесной опушки или из окрестного пруда. Оставшиеся точки — те, которые рассеяны вдоль дорог, — алгоритм разбивает на кластеры. Для каждого кластера вычисляется центр масс — так называют среднее значение координат всех входящих в кластер точек. Это предварительный кандидат на роль удобной точки.
Все кандидаты проходят проверку. Мы оцениваем, насколько удобно добираться до этого места — например, проверяем, нет ли на дороге запрещающих знаков или разметки. Точки, которые успешно прошли проверку, появляются в приложении.
Особенность алгоритма — способность к самообучению. Не обязательно вызывать такси именно в точку, которую советует приложение. Если известно более удачное место, можно передвинуть «булавку» туда. Алгоритм учитывает такие переносы: когда их много, появляется новая точка или старая переезжает в другое место. Самообучение позволяет быстро реагировать на смену обстановки. В жизни случается всякое: один из выходов из торгового центра могут закрыть, а прилегающая улица может превратиться в пешеходную. В такой ситуации алгоритм подстроится под обстоятельства и автоматически передвинет точки посадки.
***
Сейчас точки посадки доступны пользователям Яндекс.Такси для iOS. В ближайшее время они появятся и на Android. Пока мы расставили точки в Москве — но это только начало. В будущем аналогичная разметка станет доступна всюду, где работает Яндекс.Такси, — это более ста городов в шести странах.