Использование скоринга для поиска клиентов

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

Как я думаю, каждому тегу будет присвоен какой-то уникальный номер. Когда я выполняю операцию подсчета очков, она отображает число, которое можно получить только путем объединения определенного набора тегов.

Я мог бы периодически обновлять «оценку» клиента, чтобы она оставалась актуальной.

Я на правильном пути? Любые идеи?


person Ward    schedule 19.05.2017    source источник
comment
Что вы имеете в виду под счетом?   -  person Umar Farooq    schedule 19.05.2017
comment
Вот пример того, что я имею в виду, но так не получится: если у меня красный = 1, синий = 2, зеленый = 3 и желтый = 4, я могу посмотреть на сумму любой комбинации. Проблема в том, что он не будет уникальным. Красному и синему будет 3, что также является зеленым. Если я могу получить в результате 1 уникальное число (оценку), то я могу сравнивать оценки вместо каждого отдельного тега.   -  person Ward    schedule 19.05.2017
comment
Почему сумма, а не просто список?   -  person Umar Farooq    schedule 19.05.2017
comment
Я определенно не могу использовать сумму (я просто привел простой пример), но мне нужна какая-то операция, когда вы вводите в нее список чисел, результатом является число, которое может быть получено только с использованием одной комбинации входных данных. числа. В конечном счете, цель состоит в том, чтобы сравнить результаты. Так что, если у клиента А есть 324, а у клиента Б — 324, я знаю, что они купили товары с одинаковыми тегами.   -  person Ward    schedule 19.05.2017
comment
Соединить и отсортировать? Красный+Синий = 12, Желтый+Синий+Зеленый = 423 и т. д. Конкатенация будет уникальной, сортировка будет означать не слишком уникальную Красный+Синий = Синий+Красный. Единственное, что вам нужно убедиться, это то, что каждый тег уникален. Таким образом, Magenta не может быть как 12, так как это Red + Blue.   -  person Umar Farooq    schedule 19.05.2017
comment
Я думал о конкатенации, но, используя ваш пример, у меня может быть тег = 12, поэтому он будет ограничен. В системе тысячи тегов. Это моя проблема.   -  person Ward    schedule 19.05.2017
comment
Объединение в виде списка, а не числа, будет (1,2) против 12, что делает это уникальным.   -  person Umar Farooq    schedule 19.05.2017
comment
@UmarFarooq, возможно, ты что-то понял. Это может сработать.   -  person Ward    schedule 19.05.2017


Ответы (2)


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

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

Что бы я предложил вам:

Вы можете хранить теги для каждого пользователя. Когда какой-либо пользователь покупает новый товар, вы добавляете теги этого товара в теги пользователя. Периодически вы будете обновлять профили пользователей. Допустим, у нас есть пользователи A и B. Если во время обновления сходство между A и B превышает некоторый порог, вы добавите отношение между пользователями, которое будет указывать на то, что два пользователя похожи. Если ниже, вы удалите связь (если ранее они были связаны). Сходством может быть либо количество общих тегов, либо num_common_tags / num_of_tags_assigned_either_in_A_or_B.

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

person giliev    schedule 19.05.2017

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

red = 1
green = 2
blue = 4
yellow = 8

Например, только клиенты, у которых есть набор { red, blue }, будут иметь значение 5.

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

Еще одна проблема с этим подходом заключается в том, что он не поможет вам собрать элементы кластера, которые похожи, но не идентичны.

person Adrian McCarthy    schedule 19.05.2017