Skip to content

sokolcom/mts-teta-nbr

Repository files navigation

MTS.Teta ML Project
Next Basket Recommendation

Сервис для предсказания следующей покупки пользователя

1. Цель

Бизнес-цель - повышение дохода интернет/магазинов и маркетплейсов за счет увеличения числа покупок старыми пользователями. Цель сервиса - по историческим данным о покупках пользователей наиболее точно предсказывать товары, из которых будет состоять следующая покупка каждого пользователя. Это может как увеличить разнообразие в его корзине и следовательно повысить ее стоимость, порекомендовав товары, о которых он не знал ранее, так и напомнить о забытых товарах, а также повысить лояльность пользователя к сервису за счет упрощения сбора корзины. Такие предсказания могут быть использованы:

  • 🖼 Для контекстной рекламы
  • 📧 Для составления персонализированных рассылок и акций
  • 🛍 Для предложения конкретного набора товаров пользователю с целью ускорить процесс совершения покупки
  • 🛒 Для указания возможных для добавления в корзину товаров перед оплатой

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

2. Математическая постановка задачи

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

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

В качестве метрики качества была выбрана F1-score. Она учитывает в себе как точность (Precision), так и полноту (Recall) предсказаний, являясь их средним гармоническим, что позволяет не делать выбор в пользу одной из них.

При этом заметим, что, несмотря на использование в алгоритме параметров top_k и подобных, использование метрик Precision@k и/или Recall@k не приминимо к задаче, так как размер корзин пользователей разный, и применение подобных метрик свело бы текущую задачу к "обычным рекомендациям".

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

3. Данные

Датасет был взят из Kaggle соревнования. Он представляет из себя таблицу с тремя колонками - user_id, order_completed_at и cart.

user_id order_completed_at cart
0 2 2015-03-22 09:25:46 399
1 2 2015-03-22 09:25:46 14
2 2 2015-03-22 09:25:46 198
3 2 2015-03-22 09:25:46 88
4 2 2015-03-22 09:25:46 157

Здесь cart - id небольшой категории товаров, но модель может работать и с данными, где последняя колонка содержит id конкретных товаров.

Всего в датасете 3123064 записей о покупках 20000 пользователей. Временной диапазон данных: с марта 2015 года по сентябрь 2020 года.

4. Варианты решения задачи

  • Базовые модели - 1. Typical baselines.ipynb
    • Рекомендовать топ популярных товаров
    • Рекомендовать топ популярный товаров лично каждого пользователя
    • Рекомендовать такие же товары, как пользователь купил в последний раз
  • Продвинутая агрегация исторических данных (лучший результат) - 3. TIFU KNN.ipynb
  • Решение на основе классификации при помощи random forest - 4. ML Solution.ipynb

Подробнее о каждом варианте решения можно узнать в соответствующем ноутбуке.

Из не рассмотренных вариантов также стоит отметить нейросетевой подход DREAM, который требует гораздо больших вычислительных и временных ресурсов, но по результатам публичных исследований выдает результаты меньше, чем подход TIFU KNN.

5. Итоговая модель и результат

Лучшим решением оказалась вариация алгоритма TIFU KNN.

  1. Максимальный (средний по трем последним покупкам) результат F1: bestScore = 0.39744
  2. Прирост по сравнению с baseline моделями:
    • User last cart: +0.069 (0.32841)
    • Top personal recs: +0.073 (0.32415)
    • Top global recs: +0.022 (0.37593)
  3. Валидация модели производилась при помощи проверки алгоритма на последних, предпоследних и предпредпоследних покупках пользователей из датасета.
    Среднеквадратичное (стандартное) отклонение по трем последним покупкам σ = 0.013
    Была замечена тендеция уменьшения значения метрики при проверке алгоритма на более ранних данных: с увеличением level (см. 3. TIFU KNN.ipynb) происходило уменьшение метрики.
    Это может быть связано с:
    • Уменьшением данных для "обучения" - чем более ранние покупки берем для проверки, тем больше данных отрезаем.
    • Уменьшением количества задействованных товаров - часть товаров была использована впервые лишь в последних покупках.
    • Уменьшением количества пользователей, так как алгоритм использует поиск ближайших соседей для каждого пользователя
  4. Строго говоря, итоговое решение представляет из себя алгоритм агрегации данных о покупках пользователей. В связи с этим нельзя выделить важность признаков.
  5. Слабым сегментом модели являются новые пользователи, которые совершили очень мало покупок или не совершали совсем. В таких случаях можно рассматривать использование baseline моделей для рекомендации подобным пользователям просто популярных товаров.
  6. Вероятно, сильным сегментом модели являются пользователи с большой историей схожих между собой покупок.
  7. О деградации модели:
    В среднем модель, чтобы не падать в качестве ниже значения метрики bestScore - σ, требует переобучения после 2-х покупок большинства пользователей.
    Cредний интервал между покупками всех пользователей в датасете составляет 2 дня и 5 часов.
    Таким образом, максимальный срок использования одной модели, после которого она начинает падать в качестве больше, чем на σ, составляет около 4.5 дней. При наличии возможностей переобучать модель следует примерно раз в 2 дня.

6. Оценка экономического эффекта

Произвести офлайн оценку экономического эффекта данной задачи достаточно трудно, т.к. доп.прибыль будет только от тех товаров, которые пользователь сам не купил бы (и не увидел/вспомнил), а с данной рекомендательной системой - купит. А мы располагаем историческими данными только о, конечно реальных покупках.

Таким образом, необходимо А/B тестирование в каждом из направлений, где может быть использован этот сервис. В ходе теста могут оцениваться такие экономические показатели, как:

  • доход с пользовательской сессии
  • средний чек
  • клики и т.д.

В качестве совершенствования модели для повышения экономического эффекта можно при принятии решения о включении товара в рекомендации учитывать его маржинальность.

7. Демо

Запуск

git clone https://github.com/sokolcom/mts-teta-nbr.git
cd mts-teta-nbr/demo
streamlit run main.py

Использование

  1. Выбираем модель и параметры
  2. Вводим id пользователя (1-19999)
  3. Можем сами собрать этому пользователю ещё одну корзину для уточнения рекомендаций
  4. Получаем рекомендации

About

MTS.Teta Summer School ML Project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •