Прогнозирование доступности продуктов

Feature Engineering в Ibotta является частью более крупной команды Data Science. Это наша миссия:

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

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

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

  • Прогнозируемые поведенческие сегменты покупателей - используются отделом маркетинга для персонализации сообщений для нашей пользовательской базы.
  • Фреймворк для генерации метаданных продукта - используется в Analytics и Data Science для получения более подробной информации о том, что покупают пользователи Ibotta.
  • Оценки предрасположенности к бренду - используются системой рекомендаций, чтобы рекомендовать релевантный контент пользователям в приложении.

Остальная часть этой статьи будет посвящена более тонким деталям, в частности, одному проекту Feature Engineering; прогнозирование наличия товаров в магазинах.

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

В приложении Ibotta существуют некоторые предложения, представленные в модулях розничных продавцов, в которых рекламируемый продукт не продается в этом розничном магазине или в этом розничном продавце вообще; Одним из примеров является предложение «Моторное масло Mobile 1», которое было представлено в модуле Whole Foods, другим классическим примером являются предложения алкоголя, представленные в продуктовых магазинах Колорадо, которые не продают алкоголь.

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

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

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

  • Есть сто тысяч магазинов и сотни тысяч товаров, что позволяет делать много прогнозов.
  • Ландшафт покупок продукта / магазина редок для всех комбинаций продукта / магазина.

Источниками данных, используемыми в этом проекте, являются clean_txns и customer_offer_not_founds, обе таблицы в озере данных.

  • clean_txns: очищенная запись всех отправленных покупок товаров наших клиентов с добавленными метаданными, такими как марка и категории продукта, почтовый индекс магазина, dma и т. Д.
  • customer_offer_not_founds: совокупность всех продуктов, которые, по словам пользователей, недоступны в определенных магазинах.

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

  • «Характеристика»: индивидуальное измеримое свойство / характеристика наблюдаемого явления.
  • «Разработка функций»: процесс создания функций, которые позволяют алгоритмам машинного обучения работать на практике (отсюда и название нашей команды).

Для модели, которая прогнозирует наличие продуктов в магазинах, примерами простых функций являются category_1 продукта (например, category_1 для галлона молока будет «молочным»), brand продукта, zipcode магазина, retailer магазин и т. д. Примером спроектированной функции является оценка, представляющая вероятность brand продукта, доступного в конкретном retailer.

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

Мы построили двадцать пять из этих моделей, каждая из которых обучена предсказанию доступности «вещи» в «месте», где «вещи» - это атрибуты уровня продукта (глобальный продукт, бренд, категория 1, категория 2, категория 3) и «места». ”Являются атрибутами уровня магазина (магазин, почтовый индекс, DMA, розничный продавец, DMA / вложенный розничный продавец). Мы храним прогнозы доступности для всех возможных комбинаций «вещь» / «место» для каждой из двадцати пяти моделей в таблицах, на которые будут ссылаться при построении полного пространства функций для конечной модели продукта / магазина.

Ниже приведен пример того, как может выглядеть таблица оценки бренда / продавца:

Когда мы применяем окончательную модель продукта / магазина для прогнозирования вероятности того, что «Ванильное мороженое Ben & Jerry's, 16 унций» (продукт) будет доступно в «King Soopers 1950 Chestnut Pl Denver CO» (магазин), функция оценки бренда / продавца будет быть 0,9486 согласно приведенному выше примеру.

Ниже приведен список, содержащий другие функции ввода при прогнозировании доступности приведенного выше примера:

  • Наблюдали # покупки
  • Дней с момента последней покупки
  • Наблюдено # отчетов о не найденных предложениях
  • Дней с момента последнего отчета о не найденных предложениях
  • % наблюдений, которые являются покупками (в отличие от неоснованных)
  • (Дней с момента последней покупки) - (Дней с момента последнего не найденного)
  • Вероятность (замороженные продукты (категория 1) доступны в Денвере, штат Колорадо (DMA))
  • Prob. (Замороженные новинки (cat2) доступны в 80202 (zip))
  • Prob. (Ben & Jerry’s (бренд) доступен в King Soopers (розничный продавец))

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

На следующей диаграмме показан дизайн и взаимодействие моделей в составном ансамбле.

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

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