我有一个网站,客户可以在其中购买标有各种分类术语的商品。我想通过考虑与他们进行的购买相关的标签来创建一组可能对相同商品感兴趣的客户。而不是每次我想建立组时比较每个客户的标签列表,我想知道是否可以使用某种类型的评分来解决问题。
我的想法是,每个标签都会分配一个唯一的编号。当我执行评分操作时,它会呈现一个只能通过组合一组特定标签才能实现的数字。
我可以定期更新客户的“分数”,使其保持相关性。
我在正确的轨道上吗?有任何想法吗?
您对问题的描述看起来更像是聚类或推荐问题。我不确定这些标签是否足以提供使用聚类或推荐的信息。
你对分数的想法在我看来并不乐观,因为如果这些数字选择得不够仔细,可以通过多种方式获得相同的总和。
我会建议你:
您可以为每个用户存储标签。当某些用户购买新商品时,您会将商品的标签添加到用户的标签中。您将定期更新用户资料。假设我们有用户 A 和 B。如果在更新时 A 和 B 之间的相似度大于某个阈值,您将在用户之间添加一个关系,这将表明两个用户相似。如果它较低,您将删除该关系(如果以前它们是相关的)。相似性可以是一些常见的标签,也可以是num_common_tags / num_of_tags_assigned_either_in_A_or_B
.
稍后,当您想要获取具有特定标签集的用户时,您只需进行查询以检查哪些用户具有该标签集。您还可以通过查找哪些用户与相关用户链接来检查给定用户的相似用户。
如果您为每个标签分配唯一的 2 次幂,那么您可以将与标签对应的值相加,并且具有完全相同标签集的用户将获得相同的值。
red = 1
green = 2
blue = 4
yellow = 8
例如,只有拥有集合的客户{ red, blue }
才会有 5 的值。
这本质上是使用位图来表示一个集合。缺点是如果你有很多标签,你很快就会用完整数。例如,如果您的(无符号)整数类型是四个字节,那么您将被限制为 32 个标签。有一些库和类可以让您表示更大的位集,但是,在这一点上,可能值得考虑其他方法。
这种方法的另一个问题是它不能帮助您将相似但不相同的成员聚集在一起。