company_banner

Как мы сэкономили время курьерам. Логистика в Яндекс.Еде


    Всем привет! Меня зовут Роман Халкечев, я руковожу отделом аналитики в Яндекс.Еде. Одно из ключевых направлений этого сервиса — логистика. Эффективность алгоритмов логистики во многом и определяет само существование сервисов доставки. Сегодня я расскажу читателям Хабра о нашем новом алгоритме, который помог курьерам сократить время простоя. Вы узнаете, из чего складывается время ожидания доставки заказа и зачем мы считали скорость приготовления килограмма условной еды. Но обо всём по порядку.


    Яндекс.Еда представляет собой маркетплейс: на сервисе есть спрос и есть предложение. Спрос — это заказы пользователей. Предложение — курьеры. Разумеется, под предложением мы также понимаем рестораны, но в контексте этого поста остановимся именно на курьерах. Главная задача сервиса — поддерживать баланс: тогда будут счастливы и пользователи (они быстро получат еду), и курьерские службы (заказов хватит всем курьерам). Чтобы сохранять баланс и переживать локальный рост или падение спроса, нам необходимо повышать эффективность доставки. Под эффективностью мы понимаем оборачиваемость — среднее число заказов, которые курьер успевает доставить за час. Чем выше этот показатель, тем эффективнее работает доставка в целом.


    Анализируем данные: на что уходит время?


    Чтобы понять, как растить оборачиваемость, нужно более глубоко разобраться в том, как работает доставка. В этом нам помогут данные: мы посчитаем среднее время, которое необходимо курьеру для доставки заказа. Эту метрику — время от пользовательского клика до получения заказа — мы называем click to eat. Чем ниже CTE, тем больше заказов в час получится доставлять. Понятно, что при CTE > 30 минут больше двух заказов в час точно не доставить. Разве только если разносить несколько заказов одновременно — но об этом поговорим в следующий раз.



    В зависимости от региона и времени года средний CTE лежит в промежутке от 30 до 38 минут. Чем больше заказов и чем лучше погода, тем меньше CTE, и наоборот. Давайте разберёмся, на что у курьера уходит это время.


    Во время заказа курьеры могут пребывать в нескольких состояниях:
    — получил заказ, направляюсь в ресторан;
    — прибыл в ресторан, жду, пока еду приготовят;
    — получил еду, направляюсь к клиенту;
    — прибыл к клиенту, передаю еду.


    Чтобы понять, на что курьер тратит больше всего времени, рассмотрим график распределения времени по курьерским статусам. Ниже — пример такого графика для одного из городов присутствия Яндекс.Еды.



    Как видно, ещё осенью 2019 года около 45% времени — 15–18 минут — курьеры проводили у ресторана в ожидании, пока блюда приготовят (!), хотя могли бы потратить это время на что-то более полезное. А происходило это из-за схемы назначения: мы получали заказ от клиента, сразу же искали курьера (ближайшего к ресторану) и в тот же момент отправляли его в ресторан. В итоге курьеры приходили рано и больше 15 минут ждали, пока заведение приготовит заказ.


    Новый алгоритм назначения курьеров


    Чтобы улучшить ситуацию и снизить время, которое курьеры проводят в бесполезном ожидании, мы решили разработать и внедрить новый алгоритм назначения. Основная идея: попробовать назначать курьеров не сразу при создании заказа, а позже — так, чтобы курьер прибывал в ресторан и всего через несколько минут забирал готовые блюда. У курьеров появится больше свободного времени, которое можно потратить с пользой: на доставку других заказов. А это позитивно скажется на оборачиваемости, сделает доставку эффективнее, позволит переживать локальные всплески спроса (при эффективной доставке нужно меньше курьеров, чтобы вывезти пик спроса) и обеспечит курьеров большим числом заказов.



    Звучит классно, но почти сразу стало понятно, что для внедрения нового алгоритма нужно преодолеть много сложностей, продумать много нюансов, а также предусмотреть ряд краевых случаев.


    Определение времени приготовления


    Чтобы приводить курьеров в ресторан к концу приготовления, нужно понимать, когда ресторан, собственно, заканчивает готовить еду. Для первой версии мы взяли эвристику на основе исторических данных и веса корзины (в килограммах!) и считали, что у каждого ресторана есть своё среднее время приготовления.


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



    Видно, что модель справляется с предсказанием лучше эвристики. Мы отнормировали предсказания модели так, чтобы зафиксировать долю опозданий на 10 минут и более в рамках SLA, и выкатили её в продакшен.


    Определение времени назначения


    Окей, предположим, теперь мы знаем, когда каждый заказ будет готов. Следующий вопрос: в какой момент делать назначение?


    Можно воспользоваться какой-нибудь простой стратегией. Например, начинать искать курьера за 10 минут до конца приготовления. Но такой подход довольно рискованный. А вдруг мы не найдём курьера, который успеет добраться в ресторан за 10 минут? А что, если в этом районе вообще нет курьеров? В таком случае мы примем заказ, ресторан его приготовит — а мы не сможем доставить. Причём сообщим об этом клиенту не сразу, а через 15–20 минут, а то и больше, если заказ крупный. Пострадают в итоге все: клиент, ресторан и мы сами.


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


    Сами критерии начала поиска очень простые:
    — Либо до конца приготовления мало времени (время меньше порога t).
    — Либо в окрестностях ресторана мало курьеров (количество тех, кто успеет к концу приготовления, меньше параметра k).


    Наглядная гифка за спойлером


    Кроме того, мы смотрим на состояние сервиса при создании заказа и можем заказ не принять. Это происходит, если курьеров резко не хватает либо если успевающих (или хотя бы не сильно опаздывающих) курьеров просто нет.


    Внедрение и результат


    Внедрение нового алгоритма осложнялось тем, что поиск и назначение курьеров — это фича с сетевым эффектом, а значит, нельзя просто так взять и провести честный А/B-эксперимент. С тех пор мы научились продвинутой технике проведения таких экспериментов, которую называют switch back (и о которой, надеюсь, расскажем в будущем). Но тогда мы просто обложили все части сервиса большим количеством метрик и начали постепенно раскатывать алгоритм с очень аккуратными настройками.


    Нам было важно высвободить время курьеров, при этом не понизить качество сервиса: чтобы не выросли доля отмен и опозданий, а также среднее время, через которое мы отменяем заказ.


    Классные новости заключаются в том, что это сработало! Осенью мы начали раскатку в одном из городов присутствия — и вот так изменилось распределение среднего времени на заказ:



    Как видно из графика выше, время в ресторане сократилось — мы высвободили больше 7 минут на заказ (см. зелёную часть — «До назначения»)! Причём и это ещё не предел — сейчас курьеры ожидают приготовления меньше 10 минут. И такой эффект сохранился, когда мы выкатили новый алгоритм на все города.


    При этом доля отмен и опозданий осталась прежней, а оборачиваемость выросла. Отмечу, что эти метрики довольно высокоуровневые и на них влияет большое число факторов, поэтому без честного эксперимента оценить реальный эффект от внедрения сложно. Для того чтобы убедиться, что всё в порядке, мы внимательно изучили множество других метрик. Был риск, что так как мы начали назначать курьеров позднее, то в срезе отменённых заказов выросло время до отмены, что плохо повлияло бы на впечатления пользователей. Поэтому мы отдельно рассмотрели график медианы времени с момента заказа до отмены по причине «Не найден курьер».



    Видно, что после внедрения мы не стали позже отменять заказы, а в этом был основной риск отложенного назначения. График стал выглядеть иначе, потому что раньше мы пытались найти курьера в первые 8 минут после создания заказа, а если не получалось — отменяли заказ. Теперь же у нас работает многоуровневая схема проверок, о которой я писал выше и которая может приводить к отмене заказов, если курьеров не хватает.


    Спасибо за внимание! С удовольствием отвечу на ваши вопросы.

    Яндекс
    Как мы делаем Яндекс

    Комментарии 87

      +3
      1. CTE Сlick_To_Eat- бредовый показатель. Я заказал грузовик еды на следующий день курьер потратил 10 минут чтоб мне его привезти, CTE = 24 часа, реально 10 минут потрачено. Нормальный показатель — сколько заказов курьер развозит в смену/час.
      2. Судя по графику, раньше курьер ждал в ресторане, терь ждет назначения заказа. Какая разница? Основной показатель — простой курьера. А где он простаивает — пофигу.
      3. Сколько денег вы сэкономили? Сначала написали про CTE, потом забыли сказать, как он поменялся)))
      Короче прикрутили модно ML к доставке еды, сами не поняли зачем, сами придумали искусственные показатели, их улучшили.- профит.

        +8
        Спасибо за вопросы, отвечаю :)

        1. Мы следим за двумя показателями: курьерский CTE — это как раз 10 минут из Вашего примера и клиентский CTE – то сколько ждет клиент. И вот второй показатель мы смотрим для asap заказов, а не заказов ко времени. Основной же для нас показатель, как Вы правильно пишете, заказы в час или оборачиваемость (как я в статье называю эту метрику). Но для более детального изучения оборачиваемости нужны прокси метрики, вроде CTE.
        2. Разница в том, что он не ждет назначения, в это время он свободен и может выполнять другие заказы. Пример: если раньше курьер был заблокирован на заказе 40 минут, то теперь на заказ он тратит 35 минут. Высвобожденные минуты можно либо потратить на другие заказы, либо меньше работать в день, выполняя то же число заказов.
        3. К сожалению, не могу разглашать метрики про деньги и юнит-экономику. Из графика видно как поменялся курьерский CTE – уменьшился на 7 минут. Благодаря этому увеличилась оборачиваемость и эффективность доставки, в результате мы тем же числом курьеров смогли доставлять сильно большее число заказов.
          +1
          Курьерский CTE не показывает загруженность, потому что не учитывает время простоя в ожидании заказа. Вы «прокси» характеристику, весьма лукавую, приняли за основную и стали ее повышать.

          Если б вы сказали раньше курьер в среднем доставлял 5 заказов в час, а стал доставлять 6 заказов в час. Все было б понятно. Ваша эффективность наглядна. А так вы придумали «прокси» показатель, его улучшили на 7 минут и что? Когда нормальный показатель скрывают прикрываясь, какой-то выдуманной фиготой — это подозрительно.
            +6
            Я выбрал для этого рассказа курьерский CTE по двум причинам:
            1. Среднее число заказов в час напрямую зависит от времени, которое курьер тратит на заказ
            2. Эффект от внедрения нового алгоритма можно явно отследить по CTE, а оборачиваемость всё же довольно высокоуровневая метрика, на которую влияют почти все наши процессы: соотношение числа курьеров и заказов, корректный вывод курьеров, ценообразование, а также факторы от нас не зависящие: погода, например.
              –1
              Вы выбрали для этого рассказа CTE, потому что он улучшился)) Толку от вашей работы если оборачиваемость не улучшилась, ради нее все затевалось.

              Вы видать уронили время простоя, а оно тоже НАПРЯМУЮ влияет на оборачиваемость.

              ЗЫ скажите курьерам снаружи ресторана ждать, у вас время ожидания готовки до нуля упадет. Присобачьте машинЛернинг и хвастайтесь показателем TWC(time waiting cooking) Тоже самое.
                +3
                Проблема в том что оборачиваемость сильно флуктуирует сама по себе(пункт 2 ответа выше) и то, что она улучшилась еще не значит что именно это нововведение помогло.
                  +1
                  Т.е. эффективность введенной системы на практике невозможно посчитать, либо ее результаты в рамках статистической погрешности?

                  У меня в машине расход 6 литров на сотню.
                  Тут приходит умник, и начинает мне говорить что расход бензина на сжатие одного цилиндра в третьем такте упал на целых 25%, потому что там присобачен блокчейн и искусственный интеллект. Я спрашиваю как упал общий расход, а мне упорно талдычат, что расход фигня, но вот то что в третьем такте бла-бла-бла… И я начинаю подозревать, что мне вешают лапшу на уши.
                    0
                    Ответить а как же SMART)) Measurable, эффективность нововведения невозможно измерить?
                  0
                  Пункт 1 выдает правильное название метрики — Average Courier Time, а не Click-to-Eat. CTE это скорее название которое проще «продать» при презентации бизнесу.
                    +1
                    CTE это показатель для клиента. До введения обсуждаемой оптимизации он совпадал с курьерским.
                      0
                      То есть никто не заказывает еду на через час-два? Так или иначе вы называете эту метрику не по сути того что она из себя представляет а согласно тому как она встроена в бизнес.
                        +4
                        Автор же ответил, что это метрика для ASAP заказов. Очевидно, что для плановых доставок логистика рабоатет иначе.
                        0
                        Только если курьер автоматом назначался. Если от курьера ожидалось какое-то согласие, то у него это время меньше должно быть по идее.
                    0
                    Время простоя в ожидании заказа важно в большей степени курьеру, яндекс еде нужен именно сте — они не на курьеров работают(оставим этическую сторону вопроса). Его уменьшение позволяет увеличить вероятность того, что курьер может получить заказ. То есть растет избыточность курьеров. Учитывая неравномерность спроса и скорее всего равномерное распределение «плотности» курьеров во времени, это действительно позволяет лучше справляться с пиками. В другое время, уверен, количество курьеров избыточно. И 5 минут очень редко играют роль.
                    По идее, должны были хоть незначительно измениться метрики отказов и отмен.
                    При том низкий сте не гарантирует, что это улучшит ситуацию. Но в случае, когда курьеров не хватает, должно помочь «уплотнить» их.

                    Полезная фича, в том плане, что с ней лучше, чем без нее. Но если я все правильно понял, то ее максимальная эффективность будет на уровне cte_delta/cte_old — идеальной случай при избытке заказов. Реальная же сильно ниже и зависеть исключительно от ситуаций, когда локальный спрос на курьеров превышает предложение
                  0
                  2. но, в ресторане курьер был заблокирован.
                  то есть, Вы заказали еду, которую готовить час. курьер получил заказ, притопал в ресторан, 50 минут ждёт там, несет вам заказ.

                  как я понимаю, теперь, пока Ваша еда готовится, курьер может ещё паре человек жратвы с Мака или КФС принести…
                    +1
                    ДА я понимаю. Зелененькое — это статус «Ожидание заказа», которое в теории может быть потрачено на заказ другого. Так пусть дадут статистику нормальную. Стал ли реально курьер тратить это время на другие заказы или не стал.
                    Есть четкий показатель, количество заказов в час. Его не дают, поэтому я подозреваю, что система не дала прироста эффективности и значит время потрачено впустую.
                    +2
                    Я так понимаю, что на гистограмме весь столбик — это именно их CTE, а не время курьера. Зелёная часть не входит во время курьера, это просто время, пока заказ уже сделан, но курьер не назначен, и он занимается например другим заказом.
                      0
                      Вы всё верно понимаете :)
                    0
                    del
                      +1
                      Учитывает ли модель ситуации, когда все курьеры не будут брать заказ (причина почему они так сделаю и реализация не важна), условно у вас было 15 минут до конца готовки, 4 курьера, но заказ они не берут? И что будет в таком случае?
                        +4
                        Для случаев, когда курьер не принимает заказ у нас предусмотрено автоматическое переназначение на другого курьера. То есть мы будем последовательно предлагать выполнить заказ разным курьерам.

                        В Вашем примере, если все 4 откажутся, а других курьеров не будет рядом, мы попробуем спасти заказ с помощью саппорта и назначить его вручную, позвонив курьеру, если не получится, то будем вынуждены отменить заказ и вернуть деньги клиенту.

                        Но таких случаев у нас доли процентов.
                          +1
                          Понял, спасибо! А, если не секрет, есть ведь наверняка «проблемные» районы куда люди не хотят возить заказы или может быть даже «проблемные» курьеры которые регулярно отказываются от заказов просто так. Или, теоретически, если место попадает в зону доставки то вряд ли там регулярно будут проблемы с доставкой.
                            +5
                            Не секрет, да, если говорить, например, про Москву, то на окраинах (Химки, Красногорск, ...) стабильно качество доставки хуже, чем в центре.
                            «Проблемные» курьеры тоже встречаются, мы ведем статистику и совместными силами с курьерскими службами боремся с систематическими случаями непринятия заказов.
                              0
                              а разве это не их добрая воля как исполнителей, выбирать приемлемые для них точки доставки?
                                +2
                                Курьеры могут выбирать район в котором выходить на линию, но, конечно же, заказом курьера может утянуть в соседний район.
                                  0
                                  так тогда зачем с такими людьми бороться?
                                  Допустим, я выбрал район Н-ский, а мне заказ прилетает на Е-вский, почему меня должны наказывать, если я систематически отказываюсь ехать в район, который я не выбирал?
                                    0
                                    На самом деле, нет понятия района, есть понятие радиус назначения, который ограничен несколькими километрами.
                                    При этом как и в любом сервисе есть правила, согласно которым нужно принимать заказы когда курьер вышел на линию, если принимать заказы курьер не может, то можно просто уйти с линии.
                              +2

                              Нюанс ещё в том, что курьер не видит адреса клиента, пока не заберёт заказ из ресторана. Что же касается систематических отказов от заказов, то решается простым увольнением курьера. Потому тут особых проблем нет.

                                –1
                                И вот поэтому я не стал работать в яндекс такси. Едь туда не знамо куда.
                              0

                              Работаю курьером больше года) В компании есть штраф, за отказ от заказа — 2000₽. Если система назначила заказ, ты обязан в любом случае выполнить заказ, у нас даже не предусмотрено кнопки "отказ от заказа"))) так что не болтайте!

                                0
                                Вероятно, это штраф курьерской службы. В любом случае, у предложения заказа есть тайм-аут, если в течение этого времени заказ не будет принят курьером, то алгоритм попытается его переназначить на другого курьера.
                            +4
                            Отдохнуть/потупить/поплевать в потолок — нормальное состояние человека. С этими интенсификациями и подстегивающими КПИ только приближаетесь к модели амазона, где у работника есть пара минут в день, чтобы отлить. На Изнанке есть хорошее интервью с доставщиком еды, советую почитать.
                              +8
                              Да, смотрите, для отдыха можно взять паузу в приложении, в этот момент заказы приходить не будут. Плюс, теперь можно выполнять комфортное число заказов за меньшее число времени и просто меньше часов в день работать.
                              +3
                              А может человек отдыхает? У вас же не роботы работают, а живые люди. Что за патологическое желание выжить из человека все соки…
                              Предлагаю начать вам с самих себя, сделайте контроль и оптимизацию своей работы, а то много отдыхаете видим, и от праздной жизни в ваши головы не пойми что лезет.
                                +8
                                Ага, я вот выше ответил про отдых: для перерыва можно взять паузу в приложении, в этот момент заказы приходить не будут. Плюс, теперь можно выполнять комфортное число заказов за меньшее число времени и просто меньше часов в день работать.

                                Это внедрение высвободило время простоя в ожидании конца приготовления у ресторана, но это время уже можно потратить не только на заказы, но и на то, чтобы раньше закончить рабочий день. В этом смысле стало только лучше.
                                  +3
                                  Спасибо за содержательный ответ.
                                    +3
                                    Отдых может быть организован двумя путями: «бери больше, кидай дальше, пока летит отдыхай» и ставим на паузу. В первом случае у курьера есть какое-то время (ненормированное) за которое он может перекурить, перекинуться парой слов, сходить в туалет. В этом случае курьер знает что от него мало что зависит и он пользуется вынужденной передышкой. Во втором случае он знает что денег за свой небольшой отдых он точно не получит и будет пользоваться этой возможностью уже минимально. Причём, после выхода из паузы, курьер будет неприятно удивлён тем что следующий заказ прилетит не сразу, а опять-таки через какое-то время.
                                    Мы все понимаем что современный бизнес требует уменьшения простоев, но хвастаться тем что вы усилили потогонность системы наверное неправильно даже для имиджа компании.
                                    Сделайте тогда два типа паузы: «ушёл отдыхать, не беспокоить» и «перекур, готов для срочного заказа где-то рядом». Увидите, статистика по второй паузе вас удивит.
                                      +2
                                      достаточно посмотреть, какая потогонка и условия работы в я.такси, речи про имидж и репутацию компании может уже не идти)
                                  –3
                                  Автор молодец, но история грустная.

                                  ЯндексЕда дала нам сегодня наглядный пример, как оторваны обычно аналитики от реальных задач бизнеса. Задайте себе вопрос: какую цель преследуют бенефициары сервиса доставки еды?

                                  Наверное это прибыль, рост аудитории, инвестиционная привлекательность. Наверное, чтобы выросла прибыль можно, например, попытаться снизить операционные издержки, например, увеличить эффективность работы курьеров. И вот в результате поломанной системы мотивации внутри компании (бенифициары — сами себе злобные буратино, надо было структуру компании грамотно строить) в отдел аналитики спускается задача: «Увеличить утилизацию и эффективность курьеров, а то всех премии лишим».

                                  Смотрите, тут произошла подмена цели: «Увеличить прибыль» на «Снизить издержки». В жадном уменьшении издержек на курьерах не было бы ничего страшного, но в сложном экономическом механизме трудно изменить что-то одно, не повлияв на все остальное. Да, фирма сэкономила 20% на курьерах и даже вроде бы в первую неделю или месяц за счет этого увеличила свою прибыль. Но! Но кто-то стал получать еду не так быстро или чаще сообщения о невозможности выполнить заказ, с кем-то уставший курьер вел беседу чуть менее вежливо и тому подобное. Через месяц фирма недополучила новых клиентов, поскольку ее перестали советовать старые, к тому же часть из них ушли к конкурентам. В итоге «экономия» на курьерах даже возросла, но только вот кое-какие ценные показатели бизнеса резко упали. Что нужно было делать? — в качестве цели ставить баланс между экономией на курьерах и вносимыми ею недостатками в качество сервиса.

                                  Какой вывод? Бизнесмены, выстраивайте руководство и мотивацию в фирме правильно, по учебникам — они давно уже написаны. Аналитики, уточняйте задачи бизнеса, почаще заходите к маркетологам, при поддержке последних стройте модели потребителя и проводите предварительные измерения их отклика на вводимые изменения в вашем продукте.

                                  Желаю и тем и другим успеха в их нелегком деле.
                                    +7
                                    Если зарплата курьера пропорциональна числу заказов, то ему выгодно тратить меньше времени на каждый конкретный.

                                    Если ставку за заказ не уменьшили, то основной выгодополучатель от сабжевых изменений как раз курьер.
                                      +1
                                      Вы думаете в правильном направлении:«Зачем яндексу замарачиваться ради чужой выгоды?» Конечно цель всего этого исследования — платить за одну доставку поменьше, частично компенсируя уменьшение платы курьерам их большей загруженностью.
                                        +4
                                        Вовсе не обязательно. Навскидку альтернативные цели:
                                        — можно держать мньше курьеров и снизить организационные издержки и тд
                                        — повысить привлекательность работы курьера, что позволит нанимать более ответственных людей и тд (приличный курьер вместо джамшута повышает шанс повторного заказа)

                                        А какие ваши предложения? Повысить цену для клиентов? Так они разбегутся, и курьеры пойдут на мороз.
                                          0
                                          У вас разумные идеи. Вы пытаетесь провоцировать меня на крайности мышления, когда я говорю о балансе.

                                          Смотрите.
                                          Пусть раньше курьерам нужно было за доставку платить 100 рублей. Эта цена была выставлена так, чтобы поддерживать штат курьеров нужной численности и нужного качества. Если ее снизить, то предложений того же уровня людей станет меньше и недостаток придется покрыть нежелательными кандидатами.

                                          Предположим, курьер стал выполнять заказ на 20% быстрее. Если снизить его плату до 80 рублей — он за рабочий день той же длительности получит столько же денег, как и раньше, но, возможно, чуть больше устанет. Также с новым алгоритмом существенно возрастут отмены из-за невозможности найти курьера и число опозданий. К сожалению история показывает, что именно по этому пути пошло яндекс такси: я частенько интересовался заработком перевозивших меня таксистов и их распорядком дня.

                                          Какие альтернативы?
                                          А может, использовать другой алгоритм, который снизит время только на 10% и только 5% «забрать себе», а 5% отдать курьеру? Тогда разумный вопрос — как правильно выбрать пропорции да и сам алгоритм назначения? Ответ на него я как раз попытался дать в своем первом комментарии — нужно определится, какова здесь непосредственная цель бизнеса, потом провести исследования, сделать замеры, и только после проектировать алгоритм. Может вообще так получится, что выгоднее увеличить число курьеров и при этом еще повысить им зарплату — ценность услуги возрастет настолько, что пользователи с удовольствием покроют дополнительные издержки.
                                            +2
                                            Если за те же деньги надо больше устать, то баланс не соблюдается, курьеры ухоят, и у злобного капиталиста проблемы. Вот если вы снизите ставку на 10%, повысив продуктивность на 20%, то тогда еще можно о чем-то говорить. Но тогда опять же все в плюсе.

                                            Ваш альтернативный алгоритм ни какой не альтернативный. И он вообще про другое. Любые системы (включая курьера) стремятся к снижению издержек. При этом свободный рынок стремится к Парето Оптимуму. Но до тех пор, пока вы рассуждаете в терминах кровавого капитализма, это всё бессмысленно.
                                              +1
                                              Не совсем понял, с какими именно моими тезисами вы спорите: мои комментарии не про альтернативный алгоритм а про правильно поставленные цели. В то же время несколько ваших утверждений я нахожу несколько неправдоподобными

                                              При этом свободный рынок стремится к Парето Оптимуму


                                              А как насчет олигопольного и сильно регулируемого?

                                              Любые системы (включая курьера) стремятся к снижению издержек


                                              А меня учили, что к увеличению прибыли на некотором промежутке будущего.

                                              Но до тех пор, пока вы рассуждаете в терминах кровавого капитализма, это всё бессмысленно


                                              Да ну! И правда? То есть теперь здравый смысл и логика так теперь зовутся?
                                                +1
                                                А как насчет олигопольного и сильно регулируемого?
                                                Ни тот ни другой не свободный.
                                                А меня учили, что к увеличению прибыли на некотором промежутке будущего.
                                                Тогда почему курьеры не работают по 18 часов?

                                                Вы что-то совсем на эмоции перешли. Пора, наеврное, заканчивать разговор.
                                                  +2
                                                  Тогда почему курьеры не работают по 18 часов?


                                                  Ага, я понял. По всей видимости, вам просто еще не знакомы термины «функция полезности» и «порядок предпочтений». Думаю, любому человеку, интересующемуся экономикой, стоит когда-нибудь подружится с этими понятиями — с помощью них он сможет ответить на многие свои вопросы.
                                                    +1
                                                    То есть, вы признаете, что «единственная цель — увеличегние прибыли» — просто лозунг?

                                                    Могу вам предложить эксперимент — попробуйте придумать какую-то деятельность и обеспечить ее наемным трудом ну хотя бы пол года. Не обязательно много людей — попробуйте хотя бы 1-2 сотрудников нанять.

                                                    После этого я буду готов послушать и про угнетение рабочего класса и про что угодно. Заодно расскажете, смогли ли хотя бы в ноль выйти.
                                                      +2
                                                      У меня долгое время был свой бизнес и я неплохо ладил со своими сотрудниками (3 — 5 в разное время). Как человек с низким уровнем эмпатии, я строил с ними отношения на логике, экономике и здравом смысле. Вроде получалось.
                                                        0
                                                        Ну и как у вас со снижением издежек дела обстояли? Пили кровь пролетарскую? Нет? Тогда почему другие, по-вашему, поголовно пьют?
                                                          0
                                                          Давал людям возможность заработать и в отличие от «комуняк» не держал крестьян в деревнях без паспортов, расплачивался с работниками деньгами, а не палочками, и не выполнял пятилетку за счет заключенных в лагерях.

                                                          Я вот вижу, что вам эта область знакома только по-наслышке, давайте расскажу. Поощрения сотрудников деньгами преследует много целей: повышения качества и производительности труда, продление их удовлетворенности от своей работы на большее время. Сама по себе экономия — это совковый бесполезный термин. Я пытаюсь получить больше, больше полезности, а не денег. То есть я стремлюсь к увеличению прибыли, но также стремлюсь тратить как можно времени на решение трудовых конфликтов, поиск и обучение новых сотрудников, на контроль качества продукции и маркетинг. Таки образом, мне именно выгодно было платить моим сотрудникам хорошую зарплату и я считаю, что это признак здорового капитализма.

                                                          Как-то так.
                                                            0
                                                            Я вот вижу, что вам эта область знакома только по-наслышке
                                                            У меня три текущих работника и три бывших.

                                                            Вы не то чтобы совсем не правы, но я одно не пойму. Вот вы пишете:
                                                            Таки образом, мне именно выгодно было платить моим сотрудникам хорошую зарплату и я считаю, что это признак здорового капитализма.
                                                            Но при этом почему-то априорно предполагаете, что другим (включая обсуждаемый яндекс) выгодно обратное. Как так-то?
                                                              0
                                                              Но при этом почему-то априорно предполагаете, что другим (включая обсуждаемый яндекс) выгодно обратное. Как так-то?

                                                              Тут начинается самое интересное. Имеется большое отличие между тем, каковы цели сотрудника и каковы цели его работодателя. Утрировано, интерес работодателя в том чтобы сотрудник производил как можно больше и как можно качественнее, интерес сотрудника получать взамен как можно большее материальное и нематериальное вознаграждение. В каком-то смысле цели одного полностью противоположно целям другого. Только построив некоторую совместную экономическую игру каждый из вас может заставить другого следовать его целям.

                                                              В нашем с вами случае это довольно примитивная игра: роли бенифициара и единственного руководителя совмещены в одном человеке. У фирм размера яндекседы совсем другая история. Я уверен, что там многие руководители, то есть сотрудники, имеющие подчиненных и принимающие важные решения, не я являются бенифициарами бизнеса либо их доля в нем пренебрежимо мала.

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

                                                              Предположим, аналитики придумали алгоритм, как сэкономить время курьеров. Что будет выгодно сделать с появившимся излишком моржи руководителю повыше, будет ли он вникать в долгосрочные стратегии бизнеса или на инерции аудитории продукта покажет уже своему руководителю 20% снижение издержек? Снова все зависит от его стимулов и условий игры. Поживем — увидим.
                                                                +2
                                                                Это все, в целом, верно. Но до тех пор, пока ставка курьера за заказ не уменьшится, оптимизация их времени это вин-вин. Из ваших же выводов как будто бы неявно следует, что экономия времени курьеров это что-то априори плохое.
                                                                  0
                                                                  Но до тех пор, пока ставка курьера за заказ не уменьшится, оптимизация их времени это вин-вин


                                                                  Вопрос не к ставке, а к метрике, которую аналитик пытался оптимизировать в статье. Да, можно что-то там уменьшить, но все это имеет смысл, все это показательно, только если выражено в величинах, являющихся целевыми для бизнеса. Таких оценок в статье не приведено, о них даже не упоминается, именно это и вызвало у меня сожаление.

                                                                  Из ваших же выводов как будто бы неявно следует, что экономия времени курьеров это что-то априори плохое.


                                                                  — ложное впечатление. Из возможности увеличения эффективности работы курьеров 100% точно можно извлечь стратегическую выгоду для бизнеса. Я утверждаю лишь то, что поставив во главу угла эту самую эффективность, выгоды можно и не получить, более того можно даже нанести вред.
                                                                    0
                                                                    Ну. Статья же про техническую задачу.
                                                                      0
                                                                      Так ведь о том и речь. Посмотрите мой первый комментарий: я жалуюсь на то, что компот подается отдельно от мух. Хотя мне кажется, между вами и мной все таки возникло взаимопонимание.
                                                                        0
                                                                        Думаю, да. В целом, вы дельные вещи говорите, но почему-то вначале я принял вас за воинствующего комуниста.
                                    +1
                                    доброго времени суток! а есть ли корректировка в зависимости от погодных условий? всё-таки курьеры — это не доставка на личном транспорте, а в разных частях города могут быть совсем разные погодные условия. как в таком случае работает алгоритм?
                                    условная проблема вот в чем: допустим,
                                    количество тех, кто успеет к концу приготовления, меньше параметра k
                                    — алгоритм начинает присылать n курьерам заявки, причем считается, что они в равных условиях. но первым принял заказ курьер, который попал в грозу, а не тот, который находится чуть дальше, но чей маршрут не пролегает через сложные метеорологические условия. тогда гипотетически может возникнуть ситуация, что более оптимальный с точки зрения алгоритма курьер может не уложиться в поставленный временной промежуток. или подобный кейс в реальности невозможен?
                                      +1
                                      При выборе того, какому курьеру предложить выполнить заказ есть много нюансов, но в основе приоритизации лежит не расстояние, а время в пути до ресторана. Чем оно ниже, тем выше вероятность, что мы назначим заказ. Время рассчитывается по роутеру и учитывает, например, пробки.
                                      Что касается погодных условий, то нужно понимать, что речь идет про довольно небольшие расстояния: 1-3 км в пути и погода, как правило, не сильно отличается в таких промежутках.
                                        0
                                        спасибо за ответ!
                                        да, конечно, не по расстоянию, а по времени и хотел написать — это, как минимум, логичнее)
                                        и всё же, получается что даже если погода и будет оказывать влияние на время в пути до ресторана, то скорее всего, она уже будет учитываться при расчете по роутеру?
                                        0
                                        А то, что разные люди ходят пешком с разной скоростью, как-то учитывается?
                                          0
                                          Нет, персональная скорость не учитывается. При этом учитывается тип транспорта, то есть, если курьер на велосипеде, то время в пути будет отличаться от времени в пути пешком.
                                            +1
                                            На велосипеде можно и колесо проколоть, это 10 минут в самом лучшем случае задержка. Есть ли возможность сообщить — «я сломался»?
                                              0
                                              А если курьер заявляет себя пешим, а реально ездит на велике? Это выигрышная для него стратегия, следовательно так делают многие. В результате искусственный интеллект верит что 3км можно «пройти пешком» за 15 мин, и задает такой норматив все пешеходам.

                                              Какие у вас есть системы для недопущения таких крайностей?
                                                0
                                                Сейчас строго выгодней делать наоборот — отметить, что ты на велосипеде, если он у тебя есть, так как для курьеров-велосипедистов есть приоритет при распределении заказов.

                                                При этом Вы правы в том, что есть случаи фрода, когда пеший курьер регистрирует себя велосипедистом, чтобы получать больше заказов. Но это не ведет ни к чему хорошему, так как система считает, что курьер передвигается на велосипеде и таймеры по доставке становятся сильно меньше. Плюс у нас есть различные механики (от реальных проверок до анализа данных), нацеленные на поиск такого фрода.
                                        0
                                        Был у меня случай, в декабре 2018(вроде). Заказал в маке, который находится в 10 минутах пешком от места заказа, через Я.еду разумеется. В итоге заказ готов, и его назначают курьеру, который в 2-3км от мака. В итоге звонит курьер и говорит так и так, пересоздайте заказ плыз, ну те почему то на тот момент нельзя было переназначить курьера, саппорт в итоге тоже не смог помочь. Заказ отменил, пересоздал. В итоге на все про все час или полтора убито.
                                          +1
                                          В описанной модели, вообще не учитывается прогноз по местоположению курьеров?
                                          Если во время получения заказа, у отдельного курьера есть текущий заказ, то его местоположение можно с высокой долей вероятности определить на момент выполнения текущего заказа, где-то в интервале получаса.
                                          Если у курьера, нет заказа, то я полагаю, что его поведение, тоже вполне можно предсказать. Он с огромной вероятностью будет двигаться в сторону местных ресторанов.
                                          Еще один вопрос, Яндекс.Ровер когда в поля пойдет?
                                            +2
                                            Отвечаю по пунктам :)

                                            1. Если у курьера нет заказа, то прямо сейчас мы не пытаемся прогнозировать его местоположение в будущем. Но идея хорошая. Более того, было бы классно предлагать курьеру куда-то переместиться с целью повышения вероятности получить заказ и, соответственно, заработка. Такое есть в планах!
                                            2. Если у курьера есть заказ и он движется по маршруту, то это уже учитывается при расчете «успевания» в ресторан и к клиенту для нового заказа. И в значимом проценте случаев мы назначаем новый заказ «по цепочке».
                                            3. Про Ровер пока не могу назвать точных сроков, но могу сказать, что мы работаем над этим :)
                                              0
                                              Ровер уже трудоустроен в Сколково. =)
                                              0
                                              Какой допустимый % SLA при этом всем?
                                                +1
                                                Если под SLA подразумевать отмены по логистическим причинам и опоздания более, чем на 10 минут, то по первому это <0.5%, а по второму <10% от всех заказов.
                                                0

                                                Доброго времени суток, спасибо за статью! У меня следующий вопрос: тестируете ли вы подобные алгоритмы логистики на каких-нибудь симуляциях? Или выгоднее получить реальные результаты алгоритма, развернув его в каком-нибудь отдельном городе, как было сделано в конкретном случае?

                                                  0
                                                  Если это возможно и не требует бесконечного количества времени, то стараемся сделать офлайн модель ещё до разработки, чтобы оценить потенциальный профит при разных предпосылках.
                                                  Онлайн эксперименты тоже проводим, когда это возможно. Это отдельная наука, так как мы живем в системе с сетевыми эффектами: то есть когда изменение алгоритма назначения одного курьера может влиять на назначения других курьеров. Про это постараемся тоже рассказать, если интересно :)
                                                  0

                                                  Недавно заказывали через couriercloud, там как то рассчитывают и распределяют очень ловко.

                                                    0
                                                    Основаны ли ваши алгоритмы на предположении, что «главная цель» изрядного количества курьеров — не доставить еду или даже заработать этим денег, а гулять по москве в свободное от доставки время в форме, не привлекая внимание карантинных патрулей?
                                                      0
                                                      Нет, таких предположений в основании алгоритмов не делаем :)
                                                        0
                                                        реальность не так мрачна


                                                        +2

                                                        Спасибо за статью! Осталась нераскрытой тема ограничений при поиске курьера.
                                                        Как вы определяете что курьер успеет получить заказ вовремя, как формируются границы области по которым ведётся поиск курьеров? Возможно используете опыт коллег из Яндекс.Маршрутизации? https://habr.com/ru/company/yandex/blog/496818/

                                                          +1
                                                          На самом деле, много о чем можно было и хотелось бы рассказать, но все не уместил в один пост :) Отвечаю на Ваши вопросы:
                                                          1. «Как вы определяете что курьер успеет получить заказ вовремя?» — у нас есть delivery promise — время, в которое мы обещали клиенту доставить заказ; далее мы в некотором радиусе находим курьеров, рассчитываем время прибытия для каждого из них и выбираем тех, кто успевает к клиенту (или не сильно опаздывает, не больше X минут) и уже из этих кандидатов выбираем «победителя». Есть ряд нюансов, связанных с тем, что у нас есть приоритизация среди курьеров в зависимости от того на каком слоте они работают, но это уже не столь важно.
                                                          2. «Как формируются границы области по которым ведётся поиск курьеров?» — это отдельная оптимизационная задача, в двух словах про неё не рассказать. Думаю, что сможем осветить это в отдельном посте.
                                                          0

                                                          Несовсем понятно, что подразумевается под термином "оборачиваемость". Это количество заказов на курьера? В час или в день? Или в принципе?

                                                            0
                                                            Ага, вот определение из статьи: «Под эффективностью мы понимаем оборачиваемость — среднее число заказов, которые курьер успевает доставить за час.»
                                                            +1

                                                            Роман доброго дня! Любопытная у Вас статья и с удовольствием её прочитал. Так сложилось, что в далёком прошлом я программист, а теперь владелец ресторана и давно ищу того самого таинственного из Яндекс.Еда, чтобы дать Вам обратную связь о работе ваших алгоритмов. Мой коммента скорее не вопрос или уточнение алгоритма, а обратная связь как он работает. Мне очень нравится, что Ваша цель поиска баланса счастья у курьеров, ресторанов и их гостей, но увы не все так гладко в алгоритме. Если с логистикой я могу подтвердить, что в целом ваши размышления верны и алгоритм работает на отлично, то обратная сторона медали это проблема количества заказов для ресторанов. В итоге Ваши курьеры сидят на лавочках как воробушки и играют в телефон. Причина банальна, мой опыт говорит, что в среднем я свой заказ отдаю от 5 до 10 минут быстрее, чем Вы делаете свой прогноз. А далее получается интересная история, я в своём районе, как и мои коллеги, по какой-то причине оказываемся в хвосте за ресторанами которые находятся даже далее нашей зоны доставки вашими курьерами. А результат работы алгоритма отсутствие заказов и простой ваших курьеров. Мне кажется где-то с показателем прогноза приготовления и позицонированием ресторана на вашем сайте у вас явно есть ошибка, так как от вашего ближайшего конкурента мы в итоге получаем заказов в десятки раз больше, ещё раз обращаю внимание в десятки раз больше. Хотя и у них есть проблемы с алгоритмами, но это уже другая история.

                                                              0
                                                              Доброго дня! Спасибо за позитивный фидбек.

                                                              А далее получается интересная история, я в своём районе, как и мои коллеги, по какой-то причине оказываемся в хвосте за ресторанами которые находятся даже далее нашей зоны доставки вашими курьерами.

                                                              Если я правильно Вас понял, то речь про позицию в выдаче ресторанов. Если это так, то на эту самую позицию влияет не только время приготовления и доставки, но и другие факторы, такие как рейтинг, количество отмен и т.п. Впрочем, вероятно, Вы имеете ввиду, что время приготовления + доставки определяется нами неверно.

                                                              Мне кажется где-то с показателем прогноза приготовления и позицонированием ресторана на вашем сайте у вас явно есть ошибка, так как от вашего ближайшего конкурента мы в итоге получаем заказов в десятки раз больше, ещё раз обращаю внимание в десятки раз больше.

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

                                                              Мы правда стараемся сделать так, чтобы приводить курьера как можно точнее к концу приготовления и в наших интересах уметь определять это время как можно точнее. Вы очень поможете.

                                                              Ещё раз спасибо!
                                                                0

                                                                Доброго дня!


                                                                То, что позиция на сайте зависит от многих факторов это прозрачно и понятро, но когда по выдаче очевидно, что вне зоны нашего района выше нас оказываются рестораны с более длинным плечом логистики с српоставимым или меньшим временем приготовления, это выглядит странным. Я даже вижу с такими условиями с рестораны с более низким рейтингом чем мы. Конечно я с удовольствием могу дать Вам в личку название ресторана, но мне даже не верится что кто-то может как-то вменяемо дать обратную связь и совместно подумать над самым главным вопросом и собственно основной целью нашего сотрудничества — взаимный бизнес. Наш менеджер от Вас уже месяц пообещал и пропал, что всех проинформировал, а обратной связи нет до сих пор и разводит руками. Возможно Вам интересен показатель в деньгах по нашей ситуации, то для примера на одной из недель мы с вами получили выручку в размере смешных около 800р против около 40 тысяч у вашего основного конкурента. Если есть мотивация как поменяться к лучшему, готов оказать содействие в обратной связи.

                                                              0
                                                              А штрафы курьеров за превышение заниженного рассчётного времени доставки и прочий каждый чих уже убрали?

                                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                              Самое читаемое