Привет! Меня зовут Андрей Васильченко, я аналитик в команде Авито Доставки. Несколько лет назад мы запустили это направление, чтобы дать возможность покупателям и продавцам из разных регионов отправлять товар друг другу. Мы доставляем товары в пункты выдачи, постаматы и курьером до двери.
В этой статье я расскажу, почему мы считаем, что нужно работать над улучшением прогнозов сроков доставки для покупателей, как мы предсказывали их раньше, что изменили сейчас и что хотим учесть в будущем.

Доставка или самовывоз: как покупатели принимают решение
При выборе между доставкой и личной встречей с продавцом покупатели ориентируются не только на срок доставки. На их решение также влияют:
-
цена доставки;
-
близость пункта выдачи;
-
бренд пункта выдачи;
-
прошлый опыт заказов.
Идеальная доставка для покупателя — бесплатная, в пункт выдачи рядом с домом, за 1–2 дня.
Срок, в который покупатель получит заказ, зависит от способа доставки, расстояния от продавца до покупателя, скорости обработки заказов на складах и других факторов. Мы анализируем эти данные и показываем предполагаемое время доставки при оформлении заказа.
Почему срок доставки важен для покупателей
Мы проанализировали исторические данные о заказах с доставкой и выделили две причины, по которым стоит работать со сроками:
-
Срок доставки влияет на конверсию в заказ. Пользователи чаще выбирают доставку, если знают, что заказ приедет быстро. Чем больше срок, тем ниже конверсия в покупку. На скрине приведена разница в конверсии на одном из шагов воронки.
-
Опоздание доставки снижает retention покупателей в следующую покупку. Пользователи, которые получили заказ с опозданием, реже возвращаются за новой покупкой.
Мы предположили, что если уменьшить сроки и не допускать опозданий, то заказов будет больше и покупатели будут выбирать доставку, а не встречу с продавцом. В задаче улучшения сроков есть простор для оптимизации: у нас более 100 000 направлений, 10 служб доставки, 50 000 пунктов выдачи.
Сложности в оценке сроков доставки
На момент запуска Авито Доставки в расчете сроков для покупателя мы учитывали несколько факторов:
-
как быстро продавец отправит товар;
-
как быстро служба доставки довезет товар до покупателя
-
нерабочие дни / праздники
Сложность в том, что Авито может учитывать эти факторы, но не может на них влиять. Например, мы не знаем, как быстро продавец отнесёт заказ в пункт приёма. Поэтому на этом этапе нужно учитывать возможные задержки.
Другой фактор, на который мы не можем повлиять — как быстро служба доставки довезет товар до покупателя. Cлужбы доставки предоставляют сроки, в которые они обещают доставить товар по данному направлению. Но они часто завышают их, чтобы не портить свою статистику возможными опозданиями. По факту доставка часто происходит быстрее заявленных сроков, и мы хотим показывать это покупателям.
Как мы оценивали качество сроков на запуске доставки
В мире логистики есть стандартная метрика — PSDD (promise shipment delivery date), которая помогает оценить качество прогнозирования сроков. Предсказание считается хорошим, если заказ доставлен за 1–2 дня до окончания срока. Если за 3 дня и раньше — то это плохое предсказание, и в этом недостаток метрики.
Например, мы показали пользователю срок доставки от 2 до 5 дней. Чтобы заказ попал в категорию правильно предсказанных сроков, его должны доставить за 3, 4 или 5 дней.
По этой метрике мы получали всего 55% хороших заказов при небольшой разнице между минимальной и максимальной датой доставки. Для направлений, где разброс сроков доставки больше, она становится еще неинформативнее. Допустим, у нас есть данные о реальных сроках доставки в конкретном направлении:

Разброс времени доставки от 1 до 10 дней, честным прогнозом для покупателя тут будет срок от 2 до 8 дней (потому что 90+% заказов приедет в этот срок). При этом для максимизации метрики PSDD нужно сдвинуть 3ех дневное окно так, чтобы в него попала наибольшая доля заказов. В данном кейсе вряд ли удастся найти такое положение, где число хороших заказов будет больше 50%. А если мы начнем подгонять прогноз так, чтобы увеличить число хороших заказов, это не сделает пользователей счастливее тк много заказов приедет не в заявленный слот.
Как мы меняли метрику и выбрали подходящую
Стандартная метрика нам не подошла. Прежде чем выбирать другую, мы в команде определили, что идеальная для нас метрика:
-
Легко объяснима коллегам и руководству.
-
Связана со счастьем пользователя и помогает нам делать продукт лучше.
-
Покрывает функциональность продукта: если метрика достигает целевых значений, то продукт не может быть плохим для пользователей.
-
Чувствительна к изменениям в продукте.
С учётом этих идей мы выбрали две простые метрики, для которых рассчитали нужные нам значения:
-
Мы считаем заказ хорошим, если попали в спрогнозированный интервал. Таких заказов должно быть не меньше 90%.
-
Предполагаемый интервал доставки должен быть как можно короче. Идеально — не больше 3 дней.
Мы сравнили результаты старого и нового подходов к оценке предсказанных сроков. Новые метрики показали, что на самом деле в срок приезжают 60% заказов, и ещё 37% доставляются раньше.
В результате новая метрика дала прирост заказов с верной оценкой срока — с 55 до 60%. Это всё ещё далеко от желаемых 90%. Но то, что 37% покупателей получают заказ раньше срока, помогло нам увидеть потенциал для оптимизации и прироста конверсии в заказ.
Оптимизация предсказания сроков доставки с помощью ML
Срок доставки товара может зависеть от направления, конкретной службы доставки, дня недели и времени отправки заказа, графика работы пункта приема и выдачи товаров, сезона и других факторов. Мы решили собрать данные по каждому фактору за несколько месяцев и обучить на них ML-модель.
Задача модели — предсказать минимальный и максимальный срок доставки для покупателя так, чтобы 90% заказов приезжали в срок, при этом максимизируя точность сроков (то есть минимизируя разницу между максимальным и минимальным сроком). Таргеты модели — 5 и 95 перцентили распределения реального срока доставки.
В качестве модели использовался Quantile Random Forest. Стандартная модель Random Forest вычисляет среднее значение целевой переменной в каждом листе дерева и затем усредняет по всем деревьям. Quantile Random Forest же вместо усреднения по всем деревьям получает распределение целевой переменной и вычисляет необходимые перцентили.
В качестве датасета для обучения одной модели использовали все заказы по одному направлению (пары городов). Были обучены модели для топ 1000 направлений доставки за 2 месяца. Следующий месяц использовался в качестве теста.
Модель показала хорошие результаты по метрикам: 92% заказов в тесте приезжает в срок, а средний интервал доставки сократился до 3 дней. Оба значения совпали с целевыми, поэтому можно было внедрять модель в продакшен.
Кроме того, мы увидели что если в исходном датасете присутствуют час отправки заказа и график работы ПВЗ приема/выдачи, то итоговая модель имеет на 2пп (90% -> 92%) больше заказов в срок, чем без этих фичей (при том же среднем интервале в 3 дня). То есть теперь у нас есть количественная оценка того, насколько мы можем улучшить качество сроков, если учтем дополнительные параметры.
Однако в итоге мы отказались от идеи внедрять ML в прод.

Три причины, по которым мы отказались от реализации модели:
-
Запустить в продакшене ML-модель, которая работает в реальном времени для всех пользователей — это долго и сложно для разработки. Нам хотелось быстрого результата.
-
Модель требует много ресурсов на поддержку аналитиками. Придётся постоянно следить, не сломалось ли что-то в данных.
-
Предсказывающую модель сложно интерпретировать. Если руководство спросит, почему мы устанавливаем именно этот срок доставки по этому направлению, объяснить это можно будет только коэффициентами у модели.
Но всё-таки ML-модель наглядно показала, что качество предсказаний можно улучшить, поэтому мы начали искать другой подход к оптимизации.
Использование простых эвристик для уточнения сроков доставки
Есть несколько популярных направлений, по которым накопилось много исторических данных. Одно из них — Москва–Санкт-Петербург.
Мы можем показывать пользователю срок с разбросом в 4 дня, но хочется сделать предсказание более точным. Чтобы сузить диапазон до 3 дней, нужен дополнительный разрез данных. Мы решили проверить, как на срок доставки влияет день отправления заказа. Данные разбили по дням недели.
Новые разрезы показали, что если покупатель смотрит товар в рабочий день, ему можно показать интервал 2–4 дня, а если в выходной — 3–5 дней.
Но этот подход сложно применить к направлениям, где нет достаточного объема исторических данных.
Для таких направлений мы решили смотреть разрез не по городам, а по регионам: вместо направления Тамбов–Анапа анализируем сроки доставки из Тамбовской области в Краснодарский край.
В прогнозе мы также учитываем, что продавцы используют разные службы доставки. У каждой из них есть своя специфика, которая влияет на скорость. Например, одна возит товары на машинах, а другая — отправляет самолётом.
В итоге мы получили алгоритм на основе нескольких простых эвристик, который можно использовать для всех направлений:
-
Берём направление в разрезах по дню отправки и службе доставки.
-
Если заказов по этому направлению больше N, то прогнозный срок рассчитывается по паре городов.
-
Если заказов по направлению меньше N, то прогнозный срок рассчитывается по паре регионов.
-
Минимальный срок соответствует 5-му перцентилю от всех заказов, а максимальный — 95-му.
-
учитываем праздничные дни на исторических данных.
После реализации алгоритма мы сравнили результат его работы с предсказанием ML-модели. Оказалось, что он делает предсказание немного хуже.
Стоит ли продолжать улучшать предсказание сроков
Когда стало понятно, что эвристики работают, мы решили проверить, есть ли смысл ещё больше погружаться в оптимизацию сроков. Мы запустили эксперимент, в котором проверили три гипотезы:
1. Снижение срока доставки увеличит количество заказов
Мы предположили, что сокращение срока доставки на 1 день (например там где было 2–3 дня показать 1–2 дня) значимо увеличит конверсию покупателей в заказ.
Эта гипотеза подтвердилась: число заказов в некоторых направлениях выросло более чем на 5%. Это значит, что действительно имеет смысл искать способы снизить срок доставки.
2. Увеличение сроков доставки сократит долю опозданий и предотвратит падение retention
Если показать пользователю заведомо больший срок доставки, то товар скорее всего приедет в этот срок. Значит, пользователь не будет огорчен задержкой и снова воспользуется доставкой.
Гипотеза также подтвердилась: retention в тестовой группе был выше на 5%. Но при этом количество заказов уменьшилось. Это значит, что просто снижать сроки доставки нельзя т.к. мы увеличим заказы в моменте, но потеряем в будущем.
3. Больший срок доставки снизит количество обращений в техническую поддержку
Пользователи не будут обращаться в поддержку, если заказы приезжают вовремя.
Эта гипотеза не подтвердилась: сроки доставки никак не повлияли на количество обращений в поддержку. Мы выяснили что пользователи обращаются не из-за опозданий заказов, а из-за того что не могут найти прогнозный срок в интерфейсе.
Что мы планируем делать дальше
Работа по проекту ещё не закончилась. Для более точных прогнозов имеет смысл учесть ещё два разреза данных т.к. благодаря ML-модели мы знаем, что они улучшают качество прогноза:
-
График работы пунктов выдачи в городах продавца и покупателя. Например, если мы знаем что пункт выдачи не работает в выходные, то это можно заложить в срок доставки.
-
Время суток, в которое отправлен заказ. Если продавец передал товары в доставку утром, то они окажутся в дороге раньше, чем если бы их передали вечером.
Ещё один способ сократить время доставки — мотивировать продавцов быстрее отправлять товары, тогда и покупателю они придут быстрее. Мы знаем, что многие предпочитают накапливать заказы за 1–2 дня и потом передавать их в доставку разом. Сейчас мы ищем способ сделать быструю отправку более выгодной.
Также мы знаем, что сроки имеют сезонность: зимой заказы доставляется дольше, чем летом. Мы планируем автоматизировать учёт этой сезонности в продакшене.
Итоги
Сроки доставки — это важный фактор для покупателя при принятии решения воспользоваться Авито Доставкой. Мы проанализировали исторические данные и убедились в том, что более точные и короткие сроки положительно влияют на retention и конверсию в покупку.
Нам удалось сделать то, что мы запланировали:
-
выбрать подходящую метрику для оценки качества прогнозирования сроков доставки: понятную, чувствительную к изменениям, коррелирующую со счастьем пользователей;
-
выбрать подходящий метод прогнозирования сроков: мы попробовали ML, но пока остановились на простых эвристиках т.к. они позволили достичь целевых значений по метрике и оказались проще в реализации
-
увеличить количество заказов с качественными сроками до 90%;
-
с помощью АБ-теста с искусственным уменьшением сроков убедиться, что дальнейшая оптимизация сроков приведет к росту заказов
Таким образом, в дальнейшем у нас есть все возможности, чтобы показывать покупателям сроки, которые будут ещё короче и точнее. Так мы будем наращивать количество заказов через Авито Доставку и делать пользователей Авито счастливее.
Предыдущая статья: Как осознать себя в роли руководителя тимлидов
ссылка на оригинал статьи https://habr.com/ru/company/avito/blog/719710/
Добавить комментарий