Всё, везде и сразу
1 Постановка задачи
Предположим, вы заказали некоторый товар в интернете и хотите, чтобы его привезли прямо вам в руки. Или решили сами порадовать когонибудь посылкой — и чтобы адресату не пришлось для её получения покидать пределы квартиры. В обоих случаях вас, конечно, интересует, когда будет доставлена посылка; причём желательно, чтобы это время определялось точнее, чем «где-то в течение двух-трёх часов». И вы не одиноки в своём желании: компаниям, клиенты которых ожидают прибытия посылки, тоже важно знать максимально детальное время доставки. В последнее время задачи прогнозирования времени доставки стали часто встречаться на различных соревновательных платформах, вроде Kaggle, где их ставят компании от гигантов типа DHL до совсем небольших стартапов. Любой человек может принять участие в конкурсе и попытаться решить задачу: достаточно располагать данными о предыдущих доставках (которые предоставляет сама компания) и выбрать один из алгоритмов машинного обучения, будь то классический XGBoost, или его конкурент LightGBM, или что-либо другое на ваш вкус. Подкрутив параметры и насобирав фич, вы получите решение, которое наверняка окажется в десятке лидеров – при этом вам даже не обязательно разбираться в том, что именно происходит внутри алгоритма. Пойдём дальше и представим, что именно ваше решение выиграло конкурс и компания-организатор внедряет его в работу. Теперь, заказав доставку, вы получаете сообщение наподобие «Ваш товар прибудет через 45 минут». Но что делать, если прошёл уже час, а курьера всё нет? Стоит подождать ещё чуть-чуть или пора составлять жалобу в отдел поддержки клиентов? Вот если бы вы могли знать не просто наиболее вероятное время доставки, а некоторый временной интервал, в течение которого доставка произойдёт с вероятностью 95, 90 или 85 процентов! Увы, ваше решение выдаёт лишь одно конкретное значение. По различным соображениям, логистическим компаниям тоже полезнее оказывается иметь ответ не в виде какого-то одного фиксированного числа, а знать распределение времени доставки. О том, что же такое распределение времени доставки и в чём преимущества вероятностного решения перед решением машинного обучения, мы подробнее расскажем далее. В качестве примера наша команда взяла задачу прогнозирования, которую поставила на соревновательной платформе Zindi кенийская логистическая компания Sendy. Её интересует время доставки посылки в городе Найроби в случае, когда курьеры передвигаются на мопедах. Sendy поделилась довольно подробными данными: например, мы знаем координаты пунктов приёма и доставки посылки, день недели и время, когда были забрана и доставлена посылка, а также id курьеров и длину пути. Более того, в нашем распоряжении имеется база данных компании Uber, в которой есть сведения о скоростях передвижения на разных участках дорог в течение дня и недели. Наконец, мы смогли воспользоваться некоторой информацией, полученной из открытого вебкартографического проекта OpenStreetMap.