У нас есть данные по 10716 уникальным заказам. Данные в табличном формате. Первые строки:
Дополнительно есть таблица с предложениями водителей, которая содержит всего две переменных: номер заказа (повторяются) и номера предложений водителей (уникальные). Пример:
Видим, что отсутсвие водителя - основная причина для отмены заказа как клиентом, так и системой (42 и 32% соотвественно). Система отменила всего 3 заказаза (0,02%), на которые было принято предложение от водителя. 26% заказов были отменены клиентом, несмотря на наличие водителей, готовых их выполнить. О причинах в следующих разделах.
За исключением ранних утренних часов, клиенты отменяют заказы чаще системы. Иначе дела обстоят лишь с двух до шести утра. Гипотеза - нехватка водителей, подходящих для совершения поездки, о чём в следующем разделе.
В 10 и 11 утра наблюдаем повышенную долю отменнённых поездок, которым был успешно назначен водитель. Гипотеза - пользователи не заинтерсованы в длительном ожидании подачи авто в те часы, когда есть альтернативы (прошёл час-пик в общественном транспорте, можно пройтись и т.п.).
Ниже три графика: количество отменных заказов за час и два с одной и той же информацией в разных разрезах. На одном картина видна целиком, а с помощью дрегого проще понять распределение решений системы и клиентов в разных ситуациях.
На отмену некоторых заказов ушло в 40 и более раз больше времени, чем медианное значение. Случаи, когда на отказ от поездки ушло час и более, - это, скорее, случаи, когда пользователь Гетт забыл про заказ и воспользовался альтернативой. Поскольку крайности изменяют среднее значение в 1,9 раз, а медианное на 40%, то принято решение в дальнейшем анализировать без выбросов (исключены значения, превышающие верхний предел межквартильного диапазона + полтора межквартильных диапазона).
В среднем за сутки до отмены зказа проходит 88 секунд. В большинстве случаев, пользователи проявляют немного больше терпения, когда водитель подобран, и поездка должна состояться.
На почасовой разбивке ниже видим, что в 6 из 24 часов в сутках пользователи отменяют заказ быстрее, когда водитель назначен. Эти промежутки продолжительностью по два часа пришлись на ранее утро, обеденный перерыв и поздний вечер, когда час-пик уже прошёл. Гипотеза: причина кроется в длительности ожидания подачи.
В среднем за сутки, 50% клиентов ожидают подачу машины через 6 минут 15 секунд и быстрее. Значительно выделяется период утреннего час-пик (7-9), когда оценочное время до подачи - 9 минут 35 секунд. Гипотеза о влиянии длительности подачи авто на скорость отмены заказа пользователями не подтвердилась.
На графике ниже видим, что ни пиковые часы отмен, ни топовые по скорости отмены промежутки времени не отличаются по количеству предложений. Просматривается тренд “больще отмен = больше предложений”. Наиболее вероятно, мы видим влияние общего числа поездок: больше поездок в час создаёт и большее предложение от водителей, и большее абсолютное число отменённых поездок.
Скорее всего, речь о путающем факторе, не учтённом в имеющихся данных, например общем числе заказов. Мы видим корреляцию: меньше отмённённых заказов совпадает с меньшим числом предложений на заказ. Если бы корреляция была отрицательная, то можно было бы предположить каузацию, так как это логично: меньше предложений = они дороже и дольше, поэтому отмена. В нашем случае обоснованно предположить наличие третьего фактора, влияющего на обе переменные: долю и абсолютное число отменённых заказов и количество предложений водителей на отменённые и неотменённые заказы.
Решение - запросить больше данных и провести дополнительный анализ.
Чтобы понять, на какие зоны приходится больше или меньше отмен, все отменённые заказы сгруппировала по координатной сетке в гексагоны 8 размера (это общепринятая система районирования данных на карте. Документация здесь). В итоге получаем, что 80% всех отмен произошли в 16% гексов.
80% всех отменённых заказов произошли в ближайших к железнодорожной станции гексах. Самое их больше число (почти 14% всех отмен) пришлось на зону самого вокзала и прилегающей к нему парковки официальных такси. Смотри на карте ниже: вокзал находится в жёлтом гексагоне. На втором месте гексагон с пересечением Аддингтон роуд и Александра стрит, где велико скопление автобусных остановок, а вокзал в пешей доступности.
Таким образом подтвердилась гипотеза о влиянии герграфии на количество отказов от поездки. Возможные факторы здесь - наличие альтернативы поездке на Gett или больший пассажиропоток.
Больше всего заказов отменяют в зонах города с хорошей транспортной доступностью - там, где есть альтернативы сервису Gett.
Чтобы сделать окончательный вывод, необходимы дополнительные данные - об общем количестве заказов на каждый гекс. Если доля отказов от общего числа заказов в выявленных зонах выше, то дело в альтернативах. Если же она окажется такой же как везде, то влияния геграфии нет, просто, скопление пассажиров общественного транспорта создаёт больше и поездок, и отказов.
Не подтвердились гипотезы о влиянии на отказы времени ожидания и количества предожений водителей.
Данные предоставлены в двух .csv файлах: data_orders и data_offers.
data_orders содержит следующие данные о заказах:
| Переменная | Что там? |
|---|---|
| order_datetime | Время заказа в формате ЧЧ:ММ:СС |
| origin_longitude | Долгота заказа |
| origin_latitude | Широта заказа |
| m_order_eta | Время подачи машины |
| order_gk | Номер заказа |
| order_status_key | Статус заказа. Имеет два значения: |
| 4 | отменён клиентом |
| 9 | отменён системой |
| is_driver_assigned_key | Назначен ли водитель? Логическая переменная |
| cancellation_time_in_seconds | Сколько секунд прошло до омены заказа? |
Итого 8 столбцов, 10716 строк. Не требует чистки. При импорте назначены подходящие типы данных: order_datetime - дейттайм, is_driver_assigned_key - логическая переменная, order_status_key - категорийный вектор с двумя уровнями.
data_offers содержит следующие данные о заказах:
order_gk - номер заказа, совпадающий с номером из таблицы заказов;
offer_id - ID предложения от водителя.
Итого две колонки. 334363 строки. Не требует чистки и дополнения.
Gett, previously known as GetTaxi, is an Israeli-developed technology platform solely focused on corporate Ground Transportation Management (GTM). They have an application where clients can order taxis, and drivers can accept their rides (offers). At the moment, when the client clicks the Order button in the application, the matching system searches for the most relevant drivers and offers them the order. In this task, we would like to investigate some matching metrics for orders that did not completed successfully, i.e., the customer didn’t end up getting a car. Assignment Please complete the following tasks.
Build up distribution of orders according to reasons for failure: cancellations before and after driver assignment, and reasons for order rejection. Analyse the resulting plot. Which category has the highest number of orders?
Plot the distribution of failed orders by hours. Is there a trend that certain hours have an abnormally high proportion of one category or another? What hours are the biggest fails? How can this be explained?
Plot the average time to cancellation with and without driver, by the hour. If there are any outliers in the data, it would be better to remove them. Can we draw any conclusions from this plot?
Plot the distribution of average ETA by hours. How can this plot be explained?
BONUS Hexagons. Using the h3 and folium packages, calculate how many sizes 8 hexes contain 80% of all orders from the original data sets and visualise the hexes, colouring them by the number of fails on the map.
Gett, ранее известная как GetTaxi, - это разработанная в Израиле технологическая платформа, ориентированная на корпоративное управление наземным транспортом (GTM). У них есть приложение, где клиенты могут заказать такси, а водители принимают задания на поездки. На данный момент, когда клиент нажимает кнопку «Заказать» в приложении, система сопоставления ищет наиболее подходящих водителей и предлагает им заказ. В этой задаче мы хотели бы исследовать некоторые метрики для заказов, которые не были успешно выполнены, то есть клиенту не подали автомобиль.
Пожалуйста, выполните следующие задачи.
Постройте распределение заказов в соответствии с причинами отказа: отмены до и после назначения водителя, а также причины отклонения заказа. Проанализируйте полученный график. Какая категория имеет наибольшее количество заказов?
График распределения невыполненных заказов по часам. Существует ли тенденция к тому, что определенные часы имеют аномально высокую долю той или иной категории? В какие часы больше всего отказов? Как это объяснить?
График среднего времени до отмены с водителем и без него, по часам. Если в данных есть выбросы, было бы лучше их удалить. Можем ли мы сделать какие-либо выводы из этой визуализации?
График распределения среднего времени подачи машины (ETA) по часам. Чем можно объяснить эту визуализацию?
БОНУС Hex’ы. Используя пакеты h3 и folium, подсчитайте, сколько хексов размера 8 содержат 80% всех заказов из исходных наборов данных и визуализируйте хексы, окрашивая их по количеству неудач на карте.
Для обработки и визуализации данных использованы следующие библиотеки:
| Package | Описание |
|---|---|
| tidyverse | Использованы функции из входящих в состав dplyr, forcats, ggplot2 для обработки и визуализации данных |
| readr | Для загрузки данных из файлов в среду |
| sf | Для создания векторных объектов (гексов по точкам) |
| lubridate | Для обработки времени |
| h3jsr | Чтобы конвертировать координаты в Uber Hex (H3). Это ближайшая альтернатива h3-py, который предлагают в задании, рассчитаном на выполненине на питоне |
| mapview | Для отрисоки векторных объектов на карте |
| viridis | Дополнительные цветовые палитры для карты |
| patchwork | Для компоновки графики на странице |