Популярность того или иного места среди пользователей Яндекс.Такси мы определяем по числу заказов, в которых это место было пунктом назначения. Это значит, что про каждую поездку нам нужно понять, куда направлялся пассажир. Когда название организации есть в заказе, всё просто. Но люди часто указывают только адрес, причём иногда неточный: например, название улицы без номера дома.
Поэтому на первом этапе мы работаем не с адресами или названиями организаций, а с максимально конкретными данными — координатами, в которых водители завершали поездки. Мы находим скопления конечных точек (кластеры) и определяем, куда хотели попасть приехавшие туда люди. Для этого используется информация из описания поездки: кластер относится к той организации, название которой встречается в большинстве заказов.
В некоторых местах — например, возле больших торговых центров — получается сразу несколько кластеров. Если из описаний заказов, относящихся к этим кластерам, видно, что они относятся к одной организации или адресу, мы склеиваем такие кластеры и считаем, что все люди ехали в одну организацию.
На последнем этапе мы проверяем, не склеил ли алгоритм кластеры, которые на самом деле относятся к нескольким разным организациям, — в Москве примером такой некорректной склейки стал кластер на площади Европы, где находятся Киевский вокзал и ТЦ «Европейский». Подобные кластеры мы разделяем вручную: зачисляем каждой из самых популярных организаций число поездок, пропорциональное числу заказов, в которых было явно указано её название.
Исключение составляют кластеры баров и ресторанов, их мы не расклеиваем: в местах вроде «Красного Октября» в Москве или улицы Рубинштейна в Петербурге так много заведений и расположены они так кучно, что результаты расклейки были бы слишком неточными.