Привет! Меня зовут Андрей Васильченко, я аналитик в команде Авито Доставки. Несколько лет назад мы запустили это направление, чтобы дать возможность покупателям и продавцам из разных регионов отправлять товар друг другу. Мы доставляем товары в пункты выдачи, постаматы и курьером до двери.
В этой статье я расскажу, почему мы считаем, что нужно работать над улучшением прогнозов сроков доставки для покупателей, как мы предсказывали их раньше, что изменили сейчас и что хотим учесть в будущем.
Доставка или самовывоз: как покупатели принимают решение
При выборе между доставкой и личной встречей с продавцом покупатели ориентируются не только на срок доставки. На их решение также влияют:
цена доставки;
близость пункта выдачи;
бренд пункта выдачи;
прошлый опыт заказов.
Идеальная доставка для покупателя — бесплатная, в пункт выдачи рядом с домом, за 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%;
с помощью АБ-теста с искусственным уменьшением сроков убедиться, что дальнейшая оптимизация сроков приведет к росту заказов
Таким образом, в дальнейшем у нас есть все возможности, чтобы показывать покупателям сроки, которые будут ещё короче и точнее. Так мы будем наращивать количество заказов через Авито Доставку и делать пользователей Авито счастливее.
Предыдущая статья: Как осознать себя в роли руководителя тимлидов