Создание долгосрочных прогнозов на основе когорт в Lyft

Авторы: Хамед Хашеминиа, Арман Джаббари и Варун Маддури

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

Когортное прогнозирование

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

Целью нашей когортной модели является:

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

Разработка простой модели спроса и предложения каждой когорты

Чтобы построить простейшую модель для каждой когорты, предположим, что пользователи каждой когорты однородны. Другими словами, давайте предположим, что каждый пользователь, который начинает использовать наше приложение в определенном регионе, r, и в определенное время T, в среднем занимает R (r, Т) едет неделю. A (r, T) - количество пользователей, принадлежащих к этой когорте. y (0, r, T) = A (r, T) R (r, T) - общее количество поездок, которые совершают все гонщики на начальной неделе их когорты. Отброшенные (или неактивные) пользователи - это категория пользователей, которые не ездят в течение определенной недели. На момент создания когорты у нас не было ни одного уволенного пользователя. Это просто потому, что мы не засчитали бы пользователя в конкретной когорте, если бы он не совершил свою первую поездку в первую неделю.

Кроме того, мы предполагаем, что с течением времени активные пользователи отталкивают нашу платформу со скоростью λ в неделю, а отталкиваемые пользователи воскрешаются (т. Е. Возобновляют использование приложения) со скоростью μ в неделю. Отброшенные пользователи, которые остаются в своем оттянутом состоянии, никуда не уезжают. Мы также предполагаем, что активные пользователи будут совершать в среднем R (r, T) поездок в неделю, если они остаются в активном пользовательском состоянии. Без ограничения общности предположим, что R (r, T) = 1.

Теперь давайте зафиксируем время на t периодах после создания когорты. Если предположить, что R (r, T) = 1, в момент времени t общее количество активных пользователей и, следовательно, общее количество поездок будет Yt . Активные пользователи покидают свое активное пользовательское состояние со скоростью λ. В момент времени t общее количество уволенных пользователей составляет Y0-Yt, которые будут воскрешены со скоростью μ. Общее количество активных пользователей при Δ t период после t можно рассчитать как:

Относительно просто показать, что

Мы называем это уравнение кривой удержания. Где:

Поскольку и коэффициент оттока, и коэффициент воскрешения положительные, поэтому:

Вот некоторые выводы из этой установки:

1. Когда коэффициент воскрешения равен нулю, μ = 0 и коэффициент оттока λ положительный, устойчивое состояние равно нулю. Следовательно, в устойчивом состоянии, когда система достигает своего равновесия, мы ожидаем, что общее количество поездок, совершенных пользователями определенной когорты, в конечном итоге достигнет нуля.

2. Когда коэффициент оттока и частота повторения одинаковы, т. Е. Λ = μ, в устойчивом состоянии количество поездок составляет половину от начального числа поездок, Y0.

3. Когда синергия системы высока, т.е. λ + μ высока, система достигает устойчивого состояния быстрее, чем в случае, когда синергия системы низкая.

Вот взаимосвязь между скоростью воскрешения и параметрами кривой удержания:

Оценка поездок / активации и часов водителя / активация

Если мы решим поделиться информацией, т. Е. Использовать любую статистику из старой когорты (пользователи, которые впервые использовали свое приложение в момент T и в регионе r) до молодые люди (пользователи, которые впервые использовали свое приложение во время T '›› T и в регионе r'), наши данные должны быть в одном масштабе.

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

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

Оценка параметров экспоненциальной функции

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

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

Как показано на рисунке 3-a, остаточная сумма квадратов (RSS) в режиме B меньше, чем в режиме RSS A. Рисунок 3-b увеличен в области A, а рисунок 3-c увеличен в области B. Рисунок 3-b показывает, что минимизация RSS не является выпуклой, поскольку существует несколько локальных оптимальных точек. Рисунок 3-c показывает, что наличие примерно хорошей начальной точки может привести к эффективному поиску глобального оптимального решения.

Эффективность использования заданной кривой удержания на практике

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

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

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

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

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

Оценка кривых удерживания с помощью модели типа сплайна

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

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

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

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

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

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

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

Сложность, связанная с каждым типом когорт

Оказывается, наше решение отойти от моделей с фиксированным эффектом и сосредоточиться на оценках на уровне когорты значительно усложнило нашу методологию оценки. Некоторые сложности, связанные с этим типом моделирования, легче объяснить на примере. Представьте, что вас интересует оценка параметров когортной кривой, которая была начата всего 2 недели назад. Как мы можем использовать две точки данных для оценки 5 параметров? Ниже мы объясним, как мы решаем эту проблему.

Сначала мы разделили когорты на три сегмента:

  1. Зрелые: когорты, у которых достаточно наблюдений, чтобы мы могли надежно оценить их кривые удерживания с их собственными наблюдаемыми данными. Расчетные параметры этих когорт достаточно надежны, чтобы при необходимости их можно было использовать для генерации вспомогательных данных.
  2. Молодые: когорты, у которых есть количество наблюдений, но недостаточно наблюдений, чтобы надежно доверять их оценочным параметрам. Для очень молодых когорт - молодых когорт моложе определенного возраста - мы значительно повышаем точность прогнозов, добавляя вспомогательные (или условные) наблюдения, полученные от зрелых когорт. Мы добавляем такое наблюдение к этим очень молодым когортам и оцениваем параметры их кривых удерживания, аппроксимируя кривую удерживания на их реальных и вспомогательных данных. Это примерно то, что примерно происходит, когда мы имеем дело с моделями с фиксированными эффектами, а в классе есть только несколько наблюдений. В этом случае все параметры такой модели оцениваются другими классами, и наблюдения в этом классе лишь бесконечно мало влияют на оценки основных параметров. Они влияют только на свои собственные параметры, зависящие от класса.
  3. Незаметно: когорты без наблюдений.

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

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

Мы решили рассматривать такие наблюдения, т. Е. X, выделенные красным, как пропущенные значения и решили вменять значения каждого из них. В литературе существует ряд различных методов вменения, наиболее многообещающими из которых являются методы множественного вменения, когда пользователь вменяет несколько значений для каждого случая для эффективного создания m различных наборов данных, а затем запускает модели машинного обучения для каждого из них. набор данных и, наконец, объединить результаты. Мы заметили, что этот метод может значительно увеличить время вычислений, настолько, что мы можем потерять возможность эффективно проводить долгосрочные бэктесты за разумное время. Из-за вычислительной нагрузки этого метода и того факта, что у нас было более 1000 таких когорт, мы решили использовать метод вменения стохастической регрессии. По сути, в этом методе мы используем оценочное значение параметров зрелых когорт и добавляем член ошибки к прогнозируемым значениям для вменения отсутствующих значений. Например, чтобы вменять ценность одного наблюдения, отмеченного красным в 12-недельной когорте, мы оцениваем параметры средних значений недавних зрелых когорт и используем их для оценки значения пропущенного значения для 12-недельной когорты. -старшая когорта. Наконец, мы добавляем случайную ошибку к таким сгенерированным наблюдениям.

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

Теперь нам нужно настроить три важных гиперпараметра:

  1. Первый гиперпараметр - это граница между зрелыми и молодыми когортами. Это используется для создания наблюдений за очень молодыми когортами. Таким образом, чем выше это число, тем выше смещение и меньше дисперсия. Этот гиперпараметр обозначен как «зрелость» на следующем рисунке.
  2. Второй гиперпараметр - это точка отсечения для категории очень молодых когорт, для которой мы генерируем данные. Например, модель может решить генерировать данные только для молодых когорт младше 20 недель. Чем выше точка отсечения, тем больше смещение и меньше дисперсия. Этот гиперпараметр помечен как «расширение» на рисунке 8.
  3. Последний гиперпараметр - это ошибка, которую мы добавляем к сгенерированным значениям. Обычно в литературе по вменению учитывается тот же коэффициент ошибок, что и ошибка регрессионной модели. Однако эта практика может не подходить для наших целей моделирования из-за того, что, несмотря на сходство нашей модели с литературой по вменению, наша структура имеет свои особенности. Опять же, настройка количества ошибок уравновешивает смещение и дисперсию. Добавление низкого уровня ошибки к оценочным значениям приведет к аналогичным формам, то есть к меньшей дисперсии и более высокому смещению.

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

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

Резюме

В этом посте мы обсудили один из методов прогнозирования, который мы используем в Lyft. Модель на основе когорты используется для составления долгосрочных прогнозов продолжительностью до 52 недель и используется в нашем планировании. Мы поделились моделью типа сплайна, которую мы используем для оценки кривых удержания, и объяснили, как мы разделяем когорты на разные категории, и обсудили методы, которые мы используем для оценки кривых удержания каждого типа когорты. Наш метод настраивается по 3 гиперпараметрам. После настройки гиперпараметров предлагаемой нами модели мы оцениваем каждую кривую удержания и делаем долгосрочные прогнозы за несколько минут. Кривые удержания используются не только в нашем долгосрочном прогнозе, но и в оценке LTV.

Мы нанимаем!

Как всегда, Lyft нанимает! Если вы увлечены разработкой современных моделей машинного обучения или созданием инфраструктуры, которая их поддерживает, узнайте больше о наших ролях в Исследовательской науке и Инжиниринге и свяжитесь с нами!