Как сделать приложение яндекс такси
Совместная команда полтора года каталась на такси в разных городах, звонила диспетчерам и тестировала свои идеи на клиентах, чтобы создать новое мобильное приложение для одного из крупнейших игроков на рынке.
Что должно быть на главном экране приложения для вызова такси — карта города (как у «Яндекс.Такси») или адресная строка? В какой момент новый клиент должен регистрироваться — когда только скачал приложение или в процессе первого заказа? И какой сценарий больше подойдет жителю Пензы, который привык звонить в диспетчерскую, а вовсе не пользоваться приложением?
Redmadrobot и ИТ-команда компании «Везёт» рассказывают о том, как им удалось создать приложение, используя продуктовый подход. А потом, преодолев все сложности, передать его для дальнейшей разработки инхаус.
В 2017 году агрегаторы Fasten и RuTaxi объединились и образовали группу компаний «Везёт» — она стала крупнейшим игроком в российских регионах, в том числе в небольших городах, где про «Яндекс.Такси» и Uber никто не слышал.
В то время услугами «Везёт» пользовались жители 120 российских городов, а количество заказов, сделанных через оператора, достигало 1,5 млн в сутки (для сравнения: у «Яндекс.Такси» их было вдвое меньше, а у Uber — около 160 тысяч в сутки). 80% пользователей сервиса привыкли вызывать такси по телефону.
При этом у группы компаний «Везёт» в результате слияния появилось пять мобильных приложений. У самого популярного из них — «Рутакси» — было более 2 млн пользователей в месяц.
Но с момента выхода первого релиза прошло уже шесть лет — его дизайн и возможности устарели. За это время разработчики не выпускали значительных обновлений, а на рынок вышли Gett, «Яндекс.Такси» и Uber с новыми, современными решениями.
Когда я вызываю такси в приложении, могу не вбивать адрес вручную, а подтвердить геолокацию, которую сервис определяет автоматически.
Этого не было в старом приложении «Рутакси». Еще не было описания тарифов, сохраненных маршрутов, расчёта времени — сколько ехать от точки А в точку Б.
Опции вроде «детское кресло» или «поездка с питомцем» были «закопаны», и пользователи не заморачивались с поиском.
Совместная команда «Везёт» и Redmadrobot должна была спроектировать и поставить на поток разработку нового приложения — современного и понятного.
Переделывать старое не было смысла: мы собирались внедрять много новых фич, каждую из них надо было протестировать, а проверка неудачной гипотезы могла бы привести к оттоку клиентов и потерям для бизнеса.
Наш продукт должен был стать лучше других приложений группы компаний «Везёт» по основным продуктовым метрикам и сравняться с ними по основным конверсиям. Это стало бы главным критерием успешности проекта.
При этом нашей целью было не обойти текущее популярное приложение, а добиться того, чтобы пассажиры, привыкшие звонить диспетчеру, перешли бы на мобильный сервис — заказ такси через приложение дешевле для компании, чем оператор.
Проект стартовал в июле 2017 года. Чтобы как следует разобраться в том, как устроены сервисные приложения «Везёт», мы решили посмотреть на них со стороны.
Команда проанализировала, как работают существующие приложения, приняла во внимание данные о бизнесе и устройство популярных сервисов конкурентов и спроектировали новый, нестандартный сервис. Оставалось протестировать его вместе с командой «Везёт», внести изменения по результатам тестов и передать проект клиенту.
Однако оказалось, что у «Везёт» как раз меняется ИТ-отдел — прежние сотрудники передавали дела новым, которые только начинали осваиваться на работе. Прямо скажем, не лучшая ситуация, чтобы передать проект инхаус.
Поэтому первое приложение для Android мы делали самостоятельно, а обновленная команда «Везёт» полноценно подключилась на стадии разработки версии для iOS.
Всю работу можно разбить на три этапа:
- Выпуск первых версий приложения: ноябрь 2017 — апрель 2018.
- Улучшение и тестирование новых функций: май 2018 — август 2018.
- Совместная работа с передачей компетенций и дел: сентябрь 2018 — октябрь 2018.
- Передача и развитие приложения: ноябрь 2018 — декабрь 2018.
Итак, после того как в ноябре 2017 года вышло Android-приложение, мы вместе с разработчиками «Везёт» начали работу над iOS-версией.
Конечно, процесс требовал взаимной «притирки» — на налаживание ушло около двух с половиной месяцев. К апрелю 2018 года мы закончили iOS-версию, а уже в мае впервые сравнили новый сервис «Везёт» со старым приложением «Рутакси».
Мы купили по 3000 пользователей на каждое приложение и посмотрели на значимые показатели — где люди больше заказывают, сколько поездок приходится на нового клиента.
Старый сервис «Рутакси» при всей его несовременности был лучше для пользователей по конверсиям в первую поездку и по количеству поездок на нового пользователя. Но мы были к этому готовы и через сравнение искали слабые места в новом продукте. Определив их, мы расписали новый подход к разработке.
Вот что мы сделали после сравнения приложений.
- Сформировали перечень метрик. Далее все фичи — то есть всё, что клиент видит в приложении, — внедрялись под их рост.
- Решили делать больше прототипов и тестировать их до разработки.
- А также проверить гипотезы с помощью экспериментов на пользователях приложений.
- «Везёт» начали нанимать в команду необходимых людей под проект — от продуктового аналитика до backend-инженеров для реализации микросервисов под мобильное приложение.
На этапе проектирования мы просмотрели 23 российских и зарубежных приложения для заказа такси: Lyft, Grab и другие сервисы, сделанные во Франции, США, азиатских странах.
Дизайнеры и аналитики изучили функции в этих приложениях и попробовали разные сценарии заказа такси. В процессе подготовки мы составили список фич для пользователей, которые понравились нам и «Везёт» и могли повлиять на наши метрики. Теперь можно было проверять их на локальной аудитории.
После этого начали изучать потребности пользователей «Везёт». Чтобы понять привычный сценарий вызова такси по телефону, мы множество раз заказали такси в разных городах.
Несколько раз мы пробовали говорить с операторами на английском языке, но те пугались и бросали трубку. И 10 раз пытались заказать такси для пассажира с большой собакой — во всех случаях получили отказ.
Чаще я не успевал рассказать легенду про собаку или спросить о тарифе — оператор спрашивал, откуда и куда я поеду, говорил, что заказ принят, и отключался. Этот диалог занимал в разных городах от 22 до 32 секунд.
В дальнейшем мы ориентировались на это время — в приложении заказ такси должен был занимать столько же времени или меньше.
В конце этого этапа у нас появился список основных трудностей при заказе такси в небольших городах. Мы придумали решения каждой из выявившихся проблем — теперь предстояло протестировать их вместе с «Везёт». Сформировав бэклог и определив приоритетность задач, мы начали делать приложение.
В регионах медленный Интернет и большая доля бюджетных смартфонов на платформе Android, которые медленно работают и не справляются с тяжелыми приложениями.
Решение: новое приложение «Везёт» для Android — легкое: оно весит 5 МБ. Это позволяет не засорять память смартфонов и сделать процесс загрузки быстрым. Для сравнения: приложение «Яндекс.Такси» весит 90 МБ, а Uber — 170 МБ.
Для некоторых небольших городов не существует подробных актуальных карт Google (мы не стали использовать карты Яндекса).
Решение: в разных городах пользователю показываются разные карты в зависимости от степени детализации. Поэтому мы использовали три сервиса с картами: OpenStreetMap, Google Maps и «2ГИС». В сценарии заказа появился дополнительный экран, где можно указать номер подъезда или другой ориентир.
Интересно, что в небольшом городе ориентиром может быть магазин «Карина» или хлебозавод. На картах Google нет таких точек, но любой водитель понимает, где забрать пассажира.
В небольших городах люди ждут такси дольше, чем в Москве или крупном мегаполисе. На 100–200 тысяч жителей приходится относительно мало машин. Мы изучили статистику и поняли, что большой процент отказов от поездки происходил уже после оформления заказа.
Решение: сделать процесс ожидания интересным. Чтобы клиент не думал, что о нем забыли, мы создали живой интерфейс. Пользователь видит, что происходит и на какой стадии его заказ: идет поиск такси, водитель уже едет, осталось столько-то времени, он скоро будет на месте.
Кроме того, важно было привлечь внимание клиента на этапе поиска автомобиля. Мы показывали дорогу с машинами, которые едут рядом, и плашку со словами «пожалуйста, подождите ещё немного».
Некоторые клиенты не привязывают банковскую карту в приложении для автоматической оплаты, а хотят переводить деньги через «Сбербанк Онлайн».
Но иногда у водителя нет карты «Сбербанка», привязанной к номеру телефона.
Решение: разрабатывая приложение, мы добавили такую опцию. Вызывая такси, пользователь может выбрать оплату с помощью сервиса «Сбербанк Онлайн»: в этом случае к нему приедет водитель с картой «Сбербанка», на которую можно будет перевести деньги за поездку.
Еще сервисом пользуются компании, чтобы развести своих сотрудников по домам после ночной смены. Для таких клиентов в приложении есть возможность оплатить поездку с помощью корпоративной карты, указав ее номер, пароль, имена сотрудников.
При оформлении карты менеджеры могут задать ограничения. Есть корпоративные карты, которые работают только по будням или только по выходным, там может быть указан фиксированный адрес отправления или имена конкретных пассажиров.
Многие элементы приложения — дизайн главной страницы, способы оплаты и прочие — мы выбирали с помощью A/Б-тестов. A/Б-тестирование — это проверка гипотез на контрольных равноценных группах.
Это один из первых проектов, где мы в полной мере смогли использовать продуктовый подход: база пользователей позволяла проводить тестирования.
Мы не предполагали, какой вариант лучше, а постоянно проводили А/Б- или А/Б/В-тестирования. Эксперименты стояли во главе угла, и всё строилось вокруг них. Гипотезы мы часто строили во время командных брейнстормов, где были арт-директор, дизайнер, аналитик, разработчики и тестировщики со стороны роботов и «Везёт».
Обсуждали цифры конверсии, смотрели на графики и генерировали идеи — какие фичи внедрить или переделать, чтобы уменьшить «отвалы» аудитории. Проверяли гипотезы с точки зрения реализуемости, стоимости внедрения, полезности и возможности дальнейшего развития. Из этого получался бэклог.
Кстати, мы внутри команды роботов еженедельно делали рассылку дайджеста продукта, где рассказывали о том, как меняются показатели в проекте.
Бесплатное приложение Яндекс.Такси – это гарантия быстрой и комфортной поездки по приятной стоимости. Благодаря удобному сервису больше не нужно ждать, пока диспетчер подберет машину – система автоматически назначает ближайшего свободного водителя.
Где скачать приложение Яндекс Такси
Вы можете бесплатно скачать приложение Яндекс.Такси (Яндекс Go) на мобильный телефон по ссылкам ниже:
Для устройства на базе OS Android (Samsung, Xiaomi, LG, HTC) – скачать в Google Play
Для iOS-устройств (iPhone, Ipad) – скачать в App Store
Для телефонов Huawei – загрузить в AppGallery
Приложение для Windows Phone (Microsoft, Nokia, HTC) больше не поддерживается.
Для водителей Яндекс.Такси доступно специальное приложение Таксометр.
Как пользоваться приложением Яндекс Такси
Сервис имеет интуитивный интерфейс, простой для понимания и распознания функций.
Как установить мобильное приложение?
- Зайдите в Google Play (со смартфона на Android), App Store или Windows Phone Store со смартфона или планшета (либо воспользуйтесь прямыми ссылками на приложения выше);
- Введите в поиске название приложения «Яндекс.Такси»;
- Подтвердите загрузку нажатием кнопки «Установить»;
- После завершения операции нажмите «Открыть».
Программа автоматически создаст иконку на рабочем столе для быстрого запуска.
Как заказать такси через приложение?
Чтобы заказать машину через Яндекс.Такси:
- Откройте приложение;
- Укажите свой адрес – программа сверит его с местоположением на карте автоматически. Для продолжения нажмите «Далее»;
- Укажите конечный адрес поездки. Чтобы добавить несколько адресов, нажмите + возле указанного адреса. Виртуальный диспетчер разрешает установить 3 промежуточных остановки;
- Определите удобный способ оплаты услуги и тариф.
Функция «Комментарии» поможет уточнить детали поездки: нужно ли вам детское кресло, куда лучше подъехать водителю для ожидания и т.д.
Если у вас есть промокод на скидку, то воспользуйтесь им через графу «Промокоды» в меню приложения. Вот инструкция «Как активировать промокод».
Как оплатить заказ картой?
Внимательно читайте условия по регионам – в некоторых городах функция онлайн-оплаты недоступна. Для оплаты заказа на счету должно быть достаточно средств, оплата происходит автоматически после завершения поездки.
Как отменить заказ?
Заказ всегда можно отменить через приложение, но данная услуга платная. Сколько стоит отмена вызова, зависит от выбранного тарифа и рассчитанной стоимости поездки.
- Нажмите на кнопку с тремя точками в нижней части приложения;
- Выберите графу «Отменить заказ» и подтвердите.
Если удалить вызов через программу не получается, можно позвонить диспетчеру службы по номеру, указанному в графе «Детали поездки» под этой же кнопкой.
Настройки и работа приложения
Как получить отчет о поездке?
Отчетность помогает вам быстро находить данные о качестве работы приложения при прошлых заказах по таким параметрам:
- Дата и длительность поездки;
- Адрес отправления и прибытия;
- Выбранный тариф;
- Время начала выполнения заказа;
- Стоимость заказа;
- Данные таксиста, автомобиля и таксопарка, к которому они причислены.
Чтобы подтвердить получение отчетов после каждого заказа, подключите эту функцию в настройках «Почта для отправки отчетов».
Как получить электронный чек?
Чек автоматически приходит при электронной оплате одной из услуг:
- Оплата заказа;
- Отмена заказа;
- Отправка чаевых;
- Возврат средств.
Вы всегда можете распечатать чек, сделав фото экрана или переслав информацию с телефона на электронную почту.
Как включить Push-уведомления?
Данный тип уведомлений сообщает информацию о приложении, когда телефон находится в режиме блокировки. Уведомления можно включать разными способами в зависимости от того, какой модели устройство, на котором установлено приложение:
iOS: Откройте настройки телефона – Яндекс.Такси – Уведомления и установите параметры уведомлений.
Android: Откройте настройки телефона – Приложения – Яндекс.Такси и выберите опцию Включить уведомления.
Как подключить SMS-уведомления?
Как включит смс-оповещения:
- Войдите в Меню приложения – Настройки;
- Выберите графу «Не присылать смс» передвиньте кнопку в другую сторону.
Через смс клиент получает информацию о водителе и предстоящей поездке.
Как сменить язык приложения?
Изменение языковых настроек в электронном помощнике также зависит от модели устройства, на котором оно установлено:
iOS: Откройте настройки телефона – Основные – Язык и регион – Язык iPhone – Выберите язык – Нажмите«Готово».
Android: Откройте Меню приложения Яндекс.такси – Настройки – Язык приложения
Интерфейс приложения будет отображаться на русском или любом другом языке, на который вы решили изменить исходный.
Популярные вопросы
Можно ли вызвать такси без приложения?
Такси можно вызвать без приложения при помощи официального сайта Яндекс.Такси:
Через пару минут придет СМС-оповещение с информацией о стоимости поездки и машине.
Что значит кнопка «Демо-заказ», появляющаяся в конце оформления заказа?
Это функция для демонстрации работы службы Яндекс.такси. На экране отобразится виртуальная последовательность выполнения заказа от обработки, поиска такси рядом, до прибытия на место назначения. Это нереальный заказ, оплата не взимается.
Как выйти из приложения?
После прекращения работы с приложением в базе Яндекса может остаться личный аккаунт с вашими данными.
Чтобы выйти из приложения и удалить его, вам нужно:
- Войти в Меню;
- Выбрать графу «Телефон»;
- Нажать на аватарку во всплывшем аккаунте и удерживать ее;
- После появления вопроса«Вы уверены, что хотите удалить аккаунт + 7 999 xx xx 99 с этого устройства?» подтвердить действие.
- Далее можно удалить приложение с телефона.
Почему не получается открыть приложение?
Проблема может крыться в работе операционной системы. Обновите систему и само приложение до последней версии, обычно это решает проблему.
Почему приложение вылетает?
Есть несколько способов избавиться от глюков:
- Очистить кэш на телефоне;
- Обновить версию приложения или наоборот – вернуть более старую.
Проблемы могут быть в соответствии приложения и операционной системы телефона.
Как обновить приложение?
Приложение автоматически загружает обновления при выходе новой версии. Если эта опция у вас отключена, то найти приложение Яндекс.такси в общем списке и нажмите Обновить.
Как очистить историю?
Чтобы удалить историю заказов в приложении:
- Зайдите Меню – История поездок;
- Выберите нужный заказ;
- Прокрутите вниз и нажмите «Удалить поездку».
Не забывайте чистить кэш телефона вручную после удаления, чтобы стереть остаточные файлы.
В общем, навеяно несколькими постами о том, какой Яндекс не хороший, обманщик и т.д. и т.п. Пассажирам вряд-ли будет интересно, а водителям, которые никогда не работали в тачке и попробовали в яндекс - посвящается.
Техника работы в Яндекс.Такси для тех, кто хочет зарабатывать и видеть семью. Справедливо для Омска, в других регионах могут отличаться цифры, но я уверен, что только они.
По выбору заказа есть всего 2 правила:
1. Никогда не берите подачи больше 2 км. Как показал мой личный эксперимент длиной почти в месяц - из-за большого количества коротких поездок днем, общий пробег сокращается на 10-15% по сравнению с работой в режиме "брать все подряд". В часы пик же вообще отсутствует смысл носиться по всему району - в течении 5 минут ехать можно практически с места где стоишь. Как показала практика, после объединения с Убером и открытия колл-центров, заказов столько, что постоять 2-4 минуты гораздо быстрее, чем 5-7 делать длинную подачу. Ну и дешевле, что уж тут. Помните, что значения рейтинга ни на что не влияют. Число просто не должно упасть ниже определенного предела, чтобы не попасть в бан на несколько часов (30%). Достаточно принимать 1 заказ из 3. Если вы берете длинные подачи потому, что заказов мало - меняйте таксопарк. Это то, что знает (но не скажет) любой подключашка - у них тоже есть рейтинг. Отношение количества оформленных в регионе заказов к распределенным на парк. Хороший таксопарк - тот, в котором нужно уходить с линии, чтобы обоссать гараж.
2. К хренам поездки.
2.1. . По пробкам. Тариф рассчитывается с учетом времени в пути по текущей дорожной ситуации. По текущей, а не по прогнозируемой. В яндекс.пробках на компутере есть статистика, позволяющая узнать на каких дорогах в какое время статистически возникают пробки. Время возникновения пробок на основных магистралях в часы пик нужно выучить как "Отче наш" и не ехать в это время в ту сторону по фиксированной цене. Чтобы прошаренный пасс, которого постоянно кидают, но который не хочет доплачивать полтишок-другой и ищет лошка не запрыгнул в тачку еще до момента прихода конечного адреса - отбиться нужно на углу дома, а заезжая во двор одним глазом смотреть на адрес и цену, а другим - как побыстрее съебаться. Лучше уж сделать еще одну короткую подачу. О том, что не нужно было брать длинную вы помните, да?))
2.2. . В жопу мира. Если ваша поездка - в отдаленную пром. зону или близлежащий поселок, который, формально находится в городе, соответственно, тариф считается городским, но уехать вы оттуда с огромной вероятностью сможете только порожняком - так и поясняйте клиенту. Что не можете позволить себе ехать туда по такому тарифу. Предложите оплатить часть обратной дороги или подождать другой автомобиль. Большинство (на моей практике 9 из 10) соглашается накинуть несчастный полтинник-другой. Помните, что клиент ни в чем не виноват и вы создаете ему неудобства, не нужно ничего требовать, просто предложите. Если клиент по безналу - проще всего отдать ему несчастную стоимость посадки налом, потому как, если вы отъедите на 500м для того, чтобы заказ отменился без списания стоимости посадки - у вас снизится процент выполненных заказов.
Конечно, некоторые клиенты яшетакси не знают, что то, что вы приняли заказ еще не обязывает вас его выполнять и грозятся вам анальными карами - что же, узнают, когда они на вас пожалуются и на них в службе поддержки в лучшем случае забьют - узнают.
3. Не все меня поддержат, но мое личное мнение - не тратить свое время на мозгоебов. Я ничего не объясняю мамашам с выводками, синякам и обдолбышем, а просто съебываю. Мои нервы целее - нормальный пассажир довольней. Оценка стабильно не опускается ниже 4.97.
- Не пользуйтесь яндекс.навигатором. Вместо него установите яндекс.карты, они при построении маршрута сразу рассчитывают. Тадам! Стоимость поездки по нему по эконому, которую яндекс.такси вот уже больше года скрывает от водителя)) И выводят вам эту информацию сразу же, как только вы узнаете конечную точку и нажмете на навигацию. Цена не точная и может отличаться от вашей на 20-30р. из-за разницы в цене посадки на момент оформления заказа и вашего приезда.
- В предыдущей версии таксометра и в куче версий до нее был баг, который только что пофиксили и можно уже о нем рассказывать. Пока еще на предыдущую версию можно откатиться и работать некоторое время, потому - валяйте. Взяв клиента за нал отключите GPS прям до старта в путь. А включите - сразу после завершения заказа на конечной точке. Так вы останетесь для алгоритма, выявляющего водителей, завершающих заказ на минималке не замеченным и с субсидией вместо комиссии. Я так делаю даже с короткими заказами по б/н. Клиент едет - яндекс платит. И клиенту приятно и мне меньше палева - GPS глючит, чо. Есть еще как минимум 3 рабочих без палевных способа делать то же самое, яндекс два из них не сможет пофиксить никогда, а один из них - вообще, что называется, "против лома нет приема", поэтому им тоже поделюсь - есть на али GPS глушилки в прикуриватель.
- Точно так же, заглушив GPS можно съебаться от причитаний мамашки, вызвавшей эконом и "забывшей" написать о детях и все равно получить свои деньги за посадку. Осторожно, если таким методом намеренно гаситься от пассажиров, можно стать потенциальным вопилой на форумах "куплю акк яшетакси срочно азазааа". Хотя так и подмывает, когда пасс поставит точку хуй знает куда, ты кое-как туда заедешь, а тебе в чат пишут что-то в стиле "Эй, алё, ты где?!".
- Если вы таки встряли в пробку с клиентом - не паникуйте, просто расслабьтесь и за 500 метров по прямой(. ) до места назначения заглушите/отключите/заставьте зависнуть GPS модуль. В результате, не учтётся последний км пути, но, вместо него, учтётся всё его время. На вопрос почему цена изменилась - включать дурака, благо, и пассажиры и поддержка считают нас за идиотов. А поддержка считает за идиотов еще и пассажиров. Ну и пусть считают.
- Никаких конфликтов в чате - так пассажиру нечего будет предъявить службе поддержки, по той же причине не ведитесь на провокации в разговоре - сразу сбрасывайте трубку. Да, иногда бывает обидно, но что поделать - работа такая. Регистрируйте акк яшетакси на отдельно приобретенную для эти целей сим. карту - пассажиры бывают весьма злоебучи.
Представьте: вы открываете приложение, чтобы в очередной раз заказать такси в часто посещаемое вами место, и, конечно, в 2017 году вы ожидаете, что все, что нужно сделать – сказать приложению «Вызывай», и такси за вами тут же выедет. А куда вы хотели ехать, через сколько минут и на какой машине — все это приложение узнает благодаря истории заказов и машинному обучению. В общем-то все, как в шутках про идеальный интерфейс с единственной кнопкой «сделать хорошо», лучше которого только экран с надписью «все уже хорошо». Звучит здорово, но как же приблизить эту реальность?
На днях мы выпустили новое приложение Яндекс.Такси для iOS. В обновленном интерфейсе один из акцентов сделан на выборе конечной точки маршрута («точки Б»). Но новая версия – это не просто новый UI. К запуску обновления мы существенно переработали технологию прогнозирования пункта назначения, заменив старые эвристики на обученный на исторических данных классификатор.
Как вы понимаете, кнопки «сделать хорошо» в машинном обучении тоже нет, поэтому простая на первый взгляд задача вылилась в довольно захватывающий кейс, в результате которого, мы надеемся, у нас получилось немного облегчить жизнь пользователей. Сейчас мы продолжаем внимательно следить за работой нового алгоритма и еще будем его менять, чтобы качество прогноза было стабильнее. На полную мощность запустимся в ближайшие несколько недель, но под катом уже готовы рассказать о том, что же происходит внутри.
Задача
При выборе пункта назначения, в поле «куда» у нас есть возможность предложить пользователю буквально 2-3 варианта на главном экране и еще несколько – если он перейдет в меню выбора точки Б:
Если наш прогноз верный, пользователю не требуется вбивать адрес, и вообще есть повод порадоваться, что приложение в состоянии хоть немного запомнить его предпочтения. Именно для этих подсказок разрабатывалась модель, которая на основе истории поездок пользователя пытается предугадать, куда именно он сейчас скорее всего отправится.
До построения модели на основе машинного обучения была реализована такая стратегия: берутся все точки из истории, «одинаковые» точки (с одинаковым адресом или находящиеся близко) сливаются, за разные параметры получившимся локациям начисляются различные баллы (если пользователь ездил в эту точку, ездил из этой точки, ездил в эту точку в какое-то временное окно и так далее). Затем выбираются локации с наибольшим числом баллов и рекомендуются пользователю. Как я уже говорил, исторически эта стратегия неплохо работала, но точность прогнозирования можно было повысить. А главное — мы знали как.
«Старые» эвристики и обученный классификатор могут давать разные прогнозы: на этом рисунке размер круга показывает, насколько высоко данная точка находится в списке рекомендаций в конкретный день и конкретное время. Обратите внимание, что обученный алгоритм в данном примере предложил несколько дополнительных локаций (зеленые круги).
Наша задача состояла в том, чтобы поверх «старой» стратегии использовать переранжирование наиболее вероятных «точек Б» с помощью машинного обучения. Общий подход такой: сначала начисляем баллы, как и раньше, затем берём топ n по этим баллам (где n заведомо больше, чем нужно в итоге порекомендовать), а далее переранжируем его и пользователю в итоге показываем только три наиболее вероятные точки Б. Точное число кандидатов в списке, конечно, определяется в ходе оптимизации, чтобы и качество кандидатов и качество переранжирования были как можно выше. В нашем случае оптимальное число кандидатов оказалось равным 20.
Об оценке качества и результатах
Во-первых, качество нужно разделить на две части: качество кандидатов и качество ранжирования. Качество кандидатов — это то, насколько отобранные кандидаты в принципе возможно правильно переранжировать. А качество ранжирования — это насколько мы правильно предсказываем точку назначения при условии того, что она вообще есть среди кандидатов.
Начнём с первой метрики, то есть качества кандидатов. Стоит отметить, что только примерно в 72 процентах заказов выбранная точка Б (или очень близкая к ней географически) присутствовала ранее в истории. Это означает, что максимальное качество кандидатов ограничено этим числом, так как мы пока не можем рекомендовать точки, куда человек еще ни разу не ездил. Мы подобрали эвристики с назначением баллов так, что при отборе топ-20 кандидатов по этим баллам правильный ответ в них содержался в 71% случаев. При максимуме в 72% это весьма неплохой результат. Это качество кандидатов нас полностью устраивало, поэтому эту часть модели мы дальше не трогали, хотя, в принципе, могли бы. Например, вместо эвристик можно было обучить отдельную модель. Но так как механизм поиска кандидатов, основанный на эвристиках, уже был технически реализован, мы смогли сэкономить на разработке, лишь подобрав нужные коэффициенты.
В качестве базового алгоритма ранжирования мы взяли сортировку по количеству баллов и получили следующие результаты (в процентах): recall@1 = 63,7; recall@2 = 78,5 и recall@3 = 84,6. Заметим, что проценты здесь – это доля от тех случаев, где правильный ответ в кандидатах вообще присутствовал. В какой-то момент возник логичный вопрос: возможно, простая сортировка по популярности уже даёт хорошее качество, а все идеи сортировки по баллам и использование машинного обучения излишни? Но нет, такой алгоритм показал самое плохое качество: recall@1 = 41,2; recall@2 = 64,6; recall@3 = 74,7.
Запомним исходные результаты и перейдем к обсуждению модели машинного обучения.
Доля случаев, когда фактический пункт назначения попадал в число первых k рекомендаций
Какая модель строилась
Для начала опишем механизм нахождения кандидатов. Как мы уже говорили, на основании статистики поездок пользователя разным местам начисляются баллы. Точка получает баллы, если в нее или из нее совершаются поездки; причем существенно больше баллов получают те точки, в которые пользователь ездил из места, где сейчас находится, а ещё больше баллов, если это происходило примерно в это же время. Далее логика понятная.
Теперь перейдём к модели для переранжирования. Так как мы хотим максимизировать recall@k, в первом приближении мы хотим прогнозировать вероятность поездки пользователя в определенное место и ранжировать места по вероятности. «В первом приближении» потому, что эти рассуждения верны только при очень точной оценке вероятностей, а когда в них появляются погрешности, recall@k может лучше оптимизироваться и другим решением. Простая аналогия: в машинном обучении, если мы точно знаем все распределения вероятностей, самый лучший классификатор — байесовский, но поскольку на практике распределения восстанавливаются по данным приближенно, часто другие классификаторы работают лучше.
Задача классификации ставилась следующим образом: объектами были пары (история предыдущих поездок пользователя; кандидат в рекомендации), где положительные примеры (класс 1) — пары, в которых пользователь все-таки поехал в эту точку Б, отрицательные примеры (класс 0) — пары, в которых пользователь в итоге поехал в другое место.
Таким образом, если побыть прожженным формалистом, модель оценивала не вероятность того, что человек поедет в конкретную точку, а сдвинутую вероятность того, что заданная пара «история-кандидат» является релевантной. Тем не менее, сортировка по этой величине столь же осмыслена, что и сортировка по вероятности поездки в точку. Можно показать, что при избытке данных это будут эквивалентные сортировки.
Классификатор мы обучали на минимизацию log loss, а в качестве модели использовали активно применяемый в Яндексе Матрикснет (градиентный бустинг над решающими деревьями). И если с Матрикснетом всё понятно, то почему всё-таки оптимизировался log loss?
Ну, во-первых, оптимизация этой метрики приводит к правильным оценкам вероятности. Причина, по которой так происходит, своими корнями уходит в математическую статистику, в метод максимального правдоподобия. Пусть вероятность единичного класса у i-го объекта равна , а истинный класс равен . Тогда, если считать исходы независимыми, правдоподобие выборки (грубо говоря, вероятность получить именно такой исход, который был получен) равно следующему произведению:
В идеале нам хотелось бы иметь такие , чтобы получить максимум этого выражения (ведь мы хотим, чтобы полученные нами результаты были максимально правдоподобны, правда?). Но если прологарифмировать это выражение (так как логарифм — монотонная функция, то можно его максимизировать вместо исходного выражения), то мы получим . А это уже известный нам log loss, если заменить на их предсказания и умножить все выражение на минус-единицу.
Во-вторых, мы, конечно, доверяем теории, но на всякий случай попробовали оптимизировать разные функции потерь, и log loss показал самый большой recall@k, так что все в итоге сошлось.
О методе поговорили, о функции ошибки – тоже, осталась одна важная деталь: признаки, по которым мы обучали наш классификатор. Для описания каждой пары «история-кандидат» мы использовали более сотни разных признаков. Вот несколько для примера:
И, наконец, о результатах: после переранжирования с помощью построенной нами модели мы получили следующие данные (опять же в процентах): recall@1 = 72,1 (+8,4); recall@2 = 82,6 (+4,1); recall@3 = 88 (+3,4). Совсем неплохо, но в будущем возможны улучшения за счет включения в признаки дополнительной информации.
Можно посмотреть на примере, как новый алгоритм прогнозирования будет выглядеть для пользователя:
Дальнейшие планы
Разумеется, впереди много экспериментов по улучшению модели. Будет и добавление новых данных для построения рекомендаций, в том числе интересов пользователя, а также предполагаемых «дома» и «работы» из Яндекс Крипты и связанных с ними признаков, и эксперимент по сравнению различных методов классификации в этой задаче. Например, у Яндекса уже есть не только используемый сугубо внутри команды Матрикснет, но и набирающий популярность и в Яндексе, и за его пределами CatBoost. При этом, конечно же, нам интересно сравнивать не только собственные разработки, но и другие реализации популярных алгоритмов.
Кроме того, как уже было сказано в начале поста – было бы здорово, если бы приложение само понимало, когда, куда и на какой машине нам нужно поехать. Сейчас сложно сказать, насколько по историческим данным возможно точно угадывать параметры заказа и настройки приложения, подходящие пользователю, но мы работаем в этом направлении, будем делать наше приложение все более «умным» и способным подстраиваться под вас.
Принцип работы приложения
Перед началом работы необходимо понять, что такое Яндекс Такси. Итак, это специальная программа, с помощью которой можно заказать автомобиль в любое время по выгодной цене.
После установки приложения на экране появляется карта города, в котором проживает пользователь. При этом на карте отмечено местоположение заказчика. Отслеживание его перемещения выполняется при помощи GPS. Благодаря этому водитель такси способен быстро отследить своих потенциальных клиентов, если установить это приложение себе на телефон или любое другое устройство. Вот почему нельзя сказать, что эта программа предназначена только для пассажиров. Таксисты при ее использовании также получают выгоду.
На возможности отслеживания местоположения клиента или свободной машины и основан принцип работы этой программы. Эта информация во многом необходима для того, чтобы разобраться с тем, как работает приложение Яндекс Такси.
Программа несет в себе следующие преимущества:
- показывает достоверную стоимость услуги. Этот параметр не меняется в зависимости от пробок на дорогах, погодных условий и т. д.;
- возможность оплаты банковской картой;
- наличие скидок и дополнительных бонусов;
- имеется активная система для голосования по оценки оказанной услуги;
- быстрый способ сделать заказ машины. Можно даже оформить демонстрационный заказ. Что такое демо-заказ на Яндекс Такси можно узнать на официальном сайте компании;
- учет индивидуальных пожеланий клиента.
Стоит отметить, что приложение отображает только надежных и проверенных водителей такси, которые заинтересованы в качественном предоставлении услуг. Поэтому пользоваться этой программой можно не опасаясь нарваться на непрофессионального или хамоватого водителя.
Видео «Как пользоваться Яндекс Такси»
В этом видео вы узнаете, как установить приложение Яндекс Такси и как ним пользоваться.
Как заказать машину
Как пользоваться Яндекс Такси, чтобы заказать машину? Для этого нужно выполнить пошаговую инструкцию, состоящую из 4 простых действий:
После выполнения всех перечисленных выше действий на экране отобразится информация о том, через сколько времени заказанная машина прибудет по указанному адресу. Нужно подтвердить заказ, нажав на кнопку «Вызвать такси».
Также можно определить форму оплату: банковской картой или же наличными деньгами. Останется только дождаться уведомления о том, что заказ был принять, и можете готовиться к отъезду.
Как отменить заказ
Ситуация, когда необходимо изменить или отменить заказ такси, случается не так уж редко. Для того чтобы удалить заказ, необходимо нажать кнопку «Отменить заказ», которая появится после оформления заявки внизу экрана. Все, дело сделано! И не нужна никакая пошаговая инструкция.
Способы оплаты
Использование приложения Яндекс Такси удобно еще и тем, что клиенты службы могут расплатиться за предоставленную услугу с помощью банковской карты.
Владельцы всех телефонов, которые работают на операционной системе iOS (версий 8.0 и выше) и Android (4.0 и новее), могут использовать безналичный способ оплаты. Для этого нужно привязать банковскую карту к программе. Данная операция выполняется следующим образом:
- Заходим в приложение и выбираем «Банковская карта».
- Нажимаем «Добавить карту» и вводим 16-значный номер карточки, а также срок ее работы и 3 цифры, расположенные на обратной стороне под магнитной лентой (CVV-код).
- Затем нажимаем «Готово».
Теперь при оформлении заявки следует выбирать оплату с помощью банковской карты. В результате сумма с вашей карточки будет списываться автоматически.
Стоит отметить, что пассажир всегда может расплатиться с водителем наличными деньгами.
Как пользоваться водителям
Водитель, чтобы начать работать через данное приложение, должен выполнить следующие действия:
- Оставьте заявку через официального партнера службы или на сайте компании.
- Пройти тестирование на знание города, а также понимание существующих в организации требований к стандартам качества. Тестирование абсолютно бесплатное.
- Далее необходимо установить «Таксометр».
Работая через это приложение, водители получают следующие преимущества:
- наличие собственного личного кабинета с паролем;
- постоянное поступление заказов, что позволяет выбирать наиболее выгодный на данный момент времени;
- имеется возможность сменить позиции «Занят/Свободен»;
- возможность общения с другими таксистами в чате;
- наличие круглосуточной связи с диспетчером.
Как видим, водители от установки Яндекс Такси «Таксометр» получают одни только плюсы.
Основные настройки приложения
Интерфейс программы позволяет поменять некоторые настройки, которые дают возможность сделать его более удобным в использовании.
Настроить приложение можно следующим образом:
- изменить масштаб карты;
- сдвигать метки с целью уточнения адреса. Ее можно изменять при помощи голосового ввода;
- создавать точки отправления/прибытия, тарифные пожелания или время заказа.
Это основные настройки. Также в функциональном меню можно выбирать категорию (класс автомобиля): Минивэн, Бизнес. Комфорт+, Комфорт.
Подводя итоги можно заключить, что программа Яндекс Такси одинаково полезна как водителям, так и пассажирам. Поэтому умение работать с ней должно входить в багаж знаний современного человека.
Читайте также: