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

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

Зачем нужно создавать классификационную модель для поездок на работу?

Lime регулярно опрашивает райдеров и не-райдеров о том, почему они используют (или нет) наш сервис. Некоторые из этих опросов проводятся нашей группой по исследованию пользователей, некоторые - третьими сторонами, а некоторые встроены непосредственно в наш продукт. Фактически, мы просим большинство гонщиков в конце поездки рассказать нам, почему они использовали лайм (см. Ниже).

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

Для этого нам нужен подход, который может распространить наши знания на все поездки, учитывая, что у нас есть информация о нескольких поездках.

Enter, машинное обучение.

Построение модели - выбор элемента и модели

Мы решили моделировать проблему как двоичную классификацию. Каждая поездка классифицируется как «до работы» или «без работы».

Шаг 1 - Создание признаков

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

Характеристики уровня поездки (примеры)

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

Особенности географического контекста (примеры)

  • Регион путешествия: разные города и районы имеют разную базовую стоимость поездок.
  • Достопримечательности OpenStreetMap: простой подсчет различных категорий достопримечательностей (например, туристические достопримечательности, общественный транспорт и т. д.) может закодировать информацию о происхождении или пункте назначения поездки, которая может коррелировать с поездкой на работу или без -комфортные поездки.

Особенности контекста райдера¹ (примеры)

  • Подсчет прошлых поездок: наличие большого количества прошлых поездок за длительный период повышает вероятность того, что поездка является поездкой на работу; наличие большого количества поездок в один и тот же день или за последние несколько часов снижает вероятность того, что поездка является поездкой на работу.
  • Повторные поездки. Скорее всего, они повторят прошлые поездки. Мы можем измерить это, посмотрев на места начала и окончания прошлой поездки.

Шаг 2 - Выбор функции

Мы используем значения Shapley в качестве метрики важности функций .² Мы начали с ~ 100 функций и итеративно обучили, настроили, оценили производительность и отбросили функции до тех пор, пока производительность модели значительно не ухудшилась.

Превосходный пакет SHAP реализует эффективные в вычислительном отношении способы вычисления значений Шепли и позволяет нам визуально сообщать о важности функций. Каждая точка ниже - это поездка. Цвет точки указывает на высокое (красное) или низкое (синее) значения для этой функции. Расположение слева от 0 снижает вероятность того, что вы едете на работу, а справа - увеличивает. Используя функцию дня недели в качестве примера, мы видим, что самые светлые красные значения (которые представляют собой кодировки для субботы и воскресенья) хорошо предсказывают поездки без работы.

Шаг 3 - Выбор модели

Мы оцениваем различные модели, используя кривые ROC. Кривая ROC иллюстрирует компромисс между истинным положительным результатом (обозначение истинного коммутируемого как коммутируют) и ложным положительным показателем (обозначение истинного не -коммутирующего как коммутирующего). Лучшие модели расположены в верхнем левом углу диаграммы, потому что они точно маркируют много истинных поездок (высокая частота истинных положительных результатов), избегая при этом маркировки некоммутирующих (низкая частота ложных положительных результатов). На графике ниже показано, как сравниваются разные модели и простые практические правила. Мы рассмотрели и другие показатели, но предпочли построить график ROC, например, для точного отзыва, потому что нет крайнего дисбаланса между долей поездок на работу и без работы.

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

  • классифицируя все поездки в будние дни с 7:00 до 10:00 и с 16:00 до 19:00 как общественные
  • маркировка всех повторных поездок как коммутирующих
  • подбрасывание монеты (случайная классификация)

Многие модели и наборы функций были оценены в ходе этого упражнения - и мы должны подчеркнуть итеративную часть этого процесса - но только некоторые из них показаны ниже. На графике мы отображаем производительность L1-регуляризованной логистической регрессии (реализация scikit-learn, голубой), модели повышения градиента (реализация LightGBM, темно-синий) и ансамблевой модели, которая объединяет эти две модели. в одну метамодель (реализация mlxtend, розовый).

Обобщение модели на все лаймовые поездки

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

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

Например, медицинские работники - которых, вероятно, слишком много в нашем наборе данных, поскольку они были собраны во время блокировки Covid, - обычно отправляются на работу очень рано утром. Тогда наша модель узнает, что поездки на работу обычно совершаются рано утром. Когда блокировка закончится и остальные пассажиры вернутся, наша модель может не обнаружить поездок на работу, которые происходят позже в тот же день.

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

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

В этом разделе мы обсудим три потенциальных источника предвзятости и способы их устранения:

  • Covid может нарушить схему поездок на работу
  • Данные обследования конечных поездок (то есть наша обучающая выборка) собираются только в поездках с рейтингом 4 и 5 звезд.
  • Доля ответов на опросы в конце поездки варьируется в зависимости от региона.

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

Смещение, вызванное Covid или сезонностью

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

Мы не видим значительной потери производительности при хронологическом разбиении (по сравнению с рандомизированным разбиением). Таким образом, мы считаем, что модель на данный момент достаточно хорошо обобщает. Мы постоянно следим за этим по мере того, как все больше наших гонщиков проходят вакцинацию, и мы собираем новые данные.

Смещение рейтинга поездки

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

Предвзятость регионального распределения

Уровень ответов на опросы различается в зависимости от региона, и у нас нет достаточного количества маркированных данных для обучения региональным моделям для всех регионов. Чтобы быть уверенным, что модель «заботится» или фокусируется на оптимизации для правильных данных, нам нужен способ сообщить модели, какие регионы встречаются в наборе данных обследования чаще, чем в наборе данных всех поездок, и наоборот.

Для этого мы вычисляем процент всех поездок и процент проверенных поездок в каждом регионе и передаем это соотношение как вес в функции потерь модели. Это дополнительно наказывает плохие прогнозы в регионах, недопредставленных в опросе, и в меньшей степени наказывает плохие прогнозы в регионах, представленных чрезмерно.

Псевдо-маркировка и активное обучение как методы увеличения данных

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

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

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

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

Сюжет ниже иллюстрирует интуицию, лежащую в основе псевдо-маркировки. Обратите внимание, что отображаются только помеченные данные: маршруты поездок на работу синим цветом, без поездок на работу - оранжевым. Псевдо-метки используют кластеры, существующие в данных. Если немаркированная точка данных (опять же, немаркированные данные не представлены на графике ниже) находится близко ко многим коммутируемым точкам данных, мы можем псевдонимом пометить ее как поездку на работу и использовать ее в качестве данных для обучения. В качестве дополнительного примечания, чтобы обеспечить этот тип визуальной интуиции, мы сначала уменьшаем многомерное пространство признаков, используемое моделью, до 3-х измерений с помощью t-распределенного стохастического соседнего встраивания (t-SNE). t-SNE - это метод уменьшения размерности, который пытается поддерживать относительные расстояния между точками данных, которые существуют в исходном пространстве в пространстве более низкой размерности.

Наконец, мы также рассматриваем возможность активного обучения, чтобы улучшить обобщение модели на все поездки Lime. Активное обучение фокусируется на эффективном использовании ресурсов ручной маркировки. Цель состоит в том, чтобы определить, для каких точек данных без меток было бы наиболее информативно иметь метки. Затем мы могли бы вручную вывести метки для этих точек данных и тем самым улучшить производительность и обобщаемость модели при относительно низких затратах.

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

Резюме

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

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

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

Спасибо за чтение и следите за новостями о том, как мы используем методы моделирования и машинного обучения, чтобы расширить наши представления о поведении гонщиков!

Спасибо Дунану Тангу, Джастину Бозонье, Тристану Тару, Рубену Когелю, Джех Лоханде и остальным членам команды Data Science and Analytics за их ценные комментарии и предложения.

Спасибо Майклу Кронталу и Заку Кану за их исследования пользователей.

Наконец, спасибо Цзяньфэну Ху и Арне Хуангу за помощь в устранении непредвиденных сложностей при запуске этой модели в производство.

[1]: решение об использовании функций контекста гонщика требует рассмотрения. Ниже по течению мы планируем использовать поездки на работу, чтобы классифицировать пассажиров как пассажиров, поэтому в идеале каждая поездка должна рассматриваться независимо от контекста водителя. К сожалению (и неудивительно), трудно добиться хорошей производительности без учета условий райдера, поэтому в конечном итоге мы решили включить эти функции.

[2]: Ценности Шепли - это способ присвоить рейтинг совместной задаче группы участников, которая удовлетворяет определенному набору важных свойств. Применительно к прогнозным моделям функции являются участниками, прогнозирование - это задача, а оценки Шепли - это признание, которого заслуживает каждая функция. Этот метод уменьшает непоследовательность и произвольность, которые преследуют некоторые другие меры важности функций, за счет учета всех возможных перестановок функций при вычислении значений.