Рекомендация товарных категорий продавцам на основе их существующего поведения.
По мере того как популярность онлайн-бизнеса и электронной коммерции становится все более популярной, серьезной проблемой является помощь клиентам, рекомендуя широкий спектр категорий продуктов, чтобы эффективно найти ту, которая им больше всего понравится. Один из методов решения вышеуказанной проблемы - это система рекомендаций. Самая распространенная задача системы рекомендаций - улучшить качество обслуживания клиентов за счет наиболее релевантных рекомендаций по товарам / товарам на основе их предыдущего поведения, такого как модель покупки потенциальных клиентов и история сопоставления продуктов. В этой статье мы сосредоточимся на теоретическом подходе, некоторой математике, реализации вышеуказанного подхода с использованием Python, а также на сохранении модели и ее загрузке для использования для развертывания.
Прежде чем двигаться дальше, давайте разберемся, что такое Покупка потенциальных клиентов и Категории продуктов в контексте Индиамарт. Предложение о покупке - это в основном требование покупателей, размещенное на нашей платформе, тогда как продукт добавляется в каталог продавцов. И продукты, и потенциальные покупатели сопоставлены с определенными категориями продуктов, также известными как MCAT (микрокатегории). В Indiamart более 110 тысяч MCAT и более 140 тысяч платных подписчиков. Для более детального понимания продуктов в контексте Indiamart обратитесь к этой статье.
О совместной фильтрации и ALS:
Совместная фильтрация - это процесс выработки рекомендаций или прогнозов относительно интереса пользователя на основе предпочтений и вкусов многих других пользователей. Прогнозы, сделанные с использованием метода совместной работы, специфичны для пользователя, но используют информацию, полученную от множества разных пользователей.
ALS (альтернативный метод наименьших квадратов) - это алгоритм неявных рекомендаций, позволяющий рекомендовать пользователям продукты и категории продуктов. ALS - это итеративный процесс оптимизации, при котором на каждой итерации он пытается приблизиться к факторизованному представлению исходных данных.
Путем случайного присвоения значений в пользовательской матрице (U), которая является матрицей (nxp), и в матрице элементов (V), которая является (pxm) матрица, а затем с помощью итеративного использования наименьших квадратов мы можем получить веса, которые дают наилучшее приближение к R , который будет матрицей (nxm). Подход наименьших квадратов в его основных формах означает подгонку некоторой линии к данным, измерение суммы квадратов расстояний от всех точек до линии и попытку получить оптимальное соответствие, минимизируя это значение.
При альтернативном подходе наименьших квадратов мы используем аналогичный метод, но итеративно чередуем оптимизацию U (матрица пользователя) и исправление V (матрица элементов) и наоборот. Мы делаем это для каждой итерации, чтобы приблизиться к R = U x V, где R - матрица рейтингов, U - матрица пользователей, а V - матрица элементов. В нашем случае, товар - это категория продукта (MCAT). Полный подход основан на исследованиях Ифань Ху, Иегуды Корена, Криса Волински в их статье.
Вычислительным узким местом в этом методе является вычисление матрицы пользователя (U) и матрицы элементов (V). Сначала мы использовали простой математический подход, который занимает много времени, но позже мы использовали неявный метод в cython для решения вычислительных проблем. В ALS мы итеративно вычисляем пользовательские векторы (U_i) и векторы элементов (Y_i), используя следующую формулу:
X_u = ((Y.T*Y + Y.T*(Cu — I) * Y) + λ*I)^-1 * (X.T * Cu * p(u))
Y_m = ((X.T*X + X.T*(Cm — I) * X) + λ*I)^-1 * (Y.T * Cm * p(m))
Где:
- X и Y: X - это пользовательские матрицы, а Y - это матрица элементов. В ALS эти матрицы будут обновляться поочередно.
- Cu и Cm: доверительные значения для пользователей и mcats.
- Лямбда (λ): значение регуляризатора. Обычно используется для уменьшения переобучения в модели машинного обучения (мы используем 0,1).
- p (u) и p (m): предпочтение элемента (двоичный). Если известно, предпочтение равно 1, а если неизвестно - ноль.
- I (Identity /np.eye): единичная матрица. Квадратная матрица с единицами на диагональных элементах и нулями во всем остальном
Рекомендации:
- Для расчета оценки рекомендации мы рассчитали скалярные произведения между вектором пользователя (Ui) и транспонированием векторов элементов (VT). i; e Оценка рекомендации = Ui.VT. Более высокое значение скалярного произведения означает большую уверенность в предсказании элемента для конкретного пользователя.
- После вычисления вышеуказанной оценки мы отсортировали ее в порядке убывания, чтобы получить 10 наиболее подходящих рекомендаций для каждого пользователя.
- Мы также можем использовать этот подход для вычисления сходства между mcats / items, взяв скалярное произведение вектора элемента (Vi) на его транспонирование (ViT). Оценка сходства = V.ViT. Эту оценку можно использовать для получения сходства элемент-элемент на основе косинусного расстояния между одним вектором элемента и другим. Более высокое значение cosθ между двумя элементами указывает на большее сходство между ними.
Этапы реализации:
Подготовка и очистка данных: первым шагом в каждом проекте машинного обучения является подготовка данных, которая включает в себя (извлечение данных, очистку (удаление ненужных данных и обработку недостающих значений ). Мы подготовили данные для User_ID (в нашем случае продавец), MCAT (категории продуктов), в которых был отображен их продукт, и количество BL, которые они покупают у mcats (включая те mcats, товары которых не были доступны в каталоге продавцов, но в нем они покупают потенциальных клиентов). Пример набора данных:
* Приведенные выше данные представляют собой просто случайно сгенерированную выборку, не содержащую никакой исходной информации о данных. Количество приобретенных лидов может неявно варьироваться от 0 до n.
Создание разреженной матрицы (Пользователь x Элемент / MCAT): После подготовки вышеуказанных данных мы создали разреженную матрицу (R), которая представляет собой комбинацию данных пользователя и MCAT. . Это большая матрица, охватывающая все функции пользователя и MCAT. Код Python для обработки данных и создания разреженной матрицы
Вычисление пользовательских векторов и MCAT-векторов: Пользовательские векторы и MCAT-векторы были рассчитаны с использованием той же формулы, которую мы обсуждали ранее, мы использовали ту же формулу в python (spsolve в пакете scipy linear algebra ) для вычисления этих векторов признаков.
Рекомендация mcats пользователям: После того, как мы создали векторы наших пользователей и MCAT (категории продуктов), мы готовы рекомендовать mcats против пользователя, взяв скалярные произведения векторов пользователей, транспонировав вектор элементов и отсортировав их в порядке убывания оценки рекомендации.
Ускорение процесса и сокращение времени вычислений. Поскольку эти шаги занимают много времени при создании очень многомерной матрицы и файла обучающей модели. Мы использовали Cython-реализацию того же подхода, созданного Беном Фредериксоном. Подробная библиотека этой реализации доступна здесь.
Сохранение файла модели. После того, как мы создали модель, используя подход, нам нужно сохранить модель, чтобы не было необходимости повторно обучать во время тестирования или развертывания. Существует несколько способов, таких как joblib из sklearn.external, pickle и т. Д., для выполнения аналогичных задач. Мы использовали pickle dump для сохранения файла модели и pickle load для дальнейшей загрузки обученной модели в любую систему.
Образцы результатов
Мы запустили эту модель, чтобы получить прогнозируемые mcats относительно пользователя и оценку рекомендации относительно того же самого.
например, продавец, который в настоящее время имеет дело с mcats, такими как счетчик валюты, спотовый биллинговый аппарат, переносные принтеры штрих-кодов, портативный биллинговый аппарат и т. д. Давайте посмотрим, какая модель рекомендует.
Резюме
В этой статье мы обсудили, как построить систему рекомендаций с использованием метода альтернативных наименьших квадратов неявной совместной фильтрации. Мы рассмотрели оптимизацию модели для экономии времени вычислений и использования системы, а также обсудили, как сохранить и перезагрузить нашу модель с помощью pickle.