Оглавление

  • Введение
  • Бизнес-проблема
  • Проблема машинного обучения
  • Объяснение данных
  • Исследовательский анализ данных
  • Функциональная инженерия
  • Модели машинного обучения
  • использованная литература

Введение

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

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

Бизнес-проблема

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

Цель insta-cart в этой постановке задачи заключалась в том, чтобы упростить покупателю покупку предмета, который он / она часто заказывает в определенный период времени, что действительно экономит время покупателя на поиск соответствующего продукта и заказать его заново.

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

Проблема машинного обучения

Команда специалистов по анализу данных из Insta-cart хочет, чтобы инженеры по машинному обучению
или исследователи предложили новые методы,
которые позволили бы определить,
вероятность продукта, который пользователь, скорее всего, «купит снова».

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

Набор данных разделен на 3 части: предварительная, обучающая и тестовая.

Предыдущий заказ содержит информацию о предыдущих заказах от пользователей, а последний заказ от пользователя добавляется либо в обучающий, либо в тестовый набор. Количество заказов от пользователя колеблется от 4 до 100, товаров почти 50К, а заказов от пользователей 3 млн.

Набор данных не сбалансирован с точки зрения «переупорядоченности»,
количество заказов на один продукт не совпадает с другими. Здесь также есть
вероятность того, что покупатель не сможет ничего заказать из своих
ранее заказанных товаров. Таким образом, «Нет» также может быть ответом на следующую
покупку пользователя. Таким образом, мы также должны рассматривать None как
продукт, отличный от других.

Объяснение данных

Здесь нам предоставлено 6 столов

  • Проходы
  • отделение
  • Предыдущие заказы
  • Заказы на поезд
  • Заказы
  • Продукты

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

Разъяснение нескольких терминов:
add_to_cart_order: во время покупок, какой порядок при добавлении товара.
переупорядочен: был ли товар повторно заказан или нет.
order_dow: день недели, когда был сделан заказ.
order_hour_of_day: час дня, когда был сделан заказ.
days_since_prior_order: через сколько дней пользователь пришел в магазин с момента последнего заказа.

Данные содержат около 50 тыс. Продуктов и историю покупок 206209 пользователей.
Как упоминалось выше, набор данных разделен на 3 части.
Количество предварительных заказов составляет 3214874, которые будут использоваться для создания функций. Количество заказов на поезд - 131209 и тестовых заказов - 75000.

Заказы, сделанные пользователем, варьируются от 4 до 100.

Исследовательский анализ данных

Давайте станем Дорой и исследуем данные.

В какое время суток люди предпочитают делать покупки в основном?
Ответ: с 10 до 16 часов.

Через сколько дней большинство пользователей возвращаются за покупками?
Ответ: В основном через 7 или 30 дней.

В каком подразделении продается больше всего продуктов?
Ответ: "Молочные яйца, продукты".

Каков размер корзины при оформлении заказа?
Ответ: 4–6

Проверьте, является ли товар, который чаще всего переупорядочивается, первым, который пользователь сохраняет в корзине.

На какой товар чаще всего меняют заказ каждый час?
Ответ: Банан

Заказ какого товара обновляется каждый день?
Ответ: Банан

Функциональная инженерия

Я создал 4 типа функций.

  1. Функции пользователя. Что такое пользователь?
  2. Характеристики продукта. На что похож продукт?
  3. Характеристики продукта для пользователя x. Что пользователь думает о продукте?
  4. Функции даты и времени: день и время покупки товара пользователем.

Возможности пользователя

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

Особенности продукта

  • Сколько пользователей приобрели этот товар.
  • Как часто происходит повторный заказ товара.
  • Средняя позиция в корзине.
  • Какова полоса заказанного продукта.
  • Коэффициент повторного заказа продукта в ряду.
  • Коэффициент повторного заказа продукта в отделе.

Пользователь x Характеристики продукта

  • Как часто пользователь делал повторный заказ определенного продукта.
  • Через сколько дней пользователь купит конкретный продукт.
  • Средний день недели для приобретенного товара.
  • Средняя позиция товара в корзине пользователем jmk.
  • Средний час продукта, приобретенного пользователем.

В итоге у меня было 78 функций для каждого заказанного продукта.

Чтобы объяснить некоторые главные особенности:

  • user_reorder_ratio: как часто пользователь переупорядочивает продукты из всех продуктов, купленных до настоящего момента.
  • user_mean_days_prior_order: среднее значение того, через сколько дней пользователь приходит в магазин.
  • user_average_basket: размер корзины при оформлении заказа пользователем.
  • user_distinct_products: сколько различных продуктов было куплено пользователем до настоящего момента.
  • prod_user_uniq_reordered: сколько пользователей повторно заказали конкретный продукт.
  • user_order_starts_at: Как долго пользователь был покупателем insta-cart.
  • dep_reordered_ratio: В каком отделе чаще всего повторно заказываются товары.
  • up_order_rate: Какова цена продукта, купленного пользователем. то есть как часто пользователь покупает продукт.

Модели машинного обучения

Для обучения модели у нас уже был набор поездов и набор тестов, предоставленных insta-cart.

Сначала у меня было 92 функции. Первоначально, когда я загружал все 92 в XGBoost, мой F1Score на основе порога составлял 0,28, что было очень низким. Чтобы улучшить его, я решил получить важность функции, которая может помочь мне уменьшить размерность точек данных. Чтобы вычислить это, я выполнил перекрестную проверку с использованием моделей LightGBM и XGBoost. Я добился лучших результатов с LightGBM.

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

Для моего первого подхода к сокращению я попробовал модель XGBoost, с помощью которой я достиг 20% лучших результатов таблицы лидеров на kaggle.

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

Итак, я сложил те модели, для которых я написал собственный ансамбль наложения, как показано ниже:

Блок-схема того, как работает метод Fit

Объяснение метода прогнозирования

Тестовые данные проходят через все обученные модели. и производится сложение всех вероятностей. Наконец, он делится на self.loop, чтобы получить средний балл вероятности.

Это помогло мне набрать 0,40377 в общедоступной таблице лидеров, что дает мне рейтинг 144 из 2622, таким образом, я попал в первые 6% таблицы лидеров.

использованная литература

[1] https://www.kaggle.com/c/instacart-market-basket-analysis/discussion/37016

[2] https://medium.com/kaggle-blog/instacart-market-basket-analysis-feda2700cded

[3] https://www.kaggle.com/mmueller/f1-score-expectation-maximization-in-o-n

[4] https://www.kaggle.com/c/instacart-market-basket-analysis/discussion/38100

[5] https://www.appliedaicourse.com