产品排行

发布于 2024-07-26 19:47:51 字数 985 浏览 4 评论 0原文

我需要根据用户评分对一些产品进行排序。

假设我们有 3 个产品 {a,b,c} 并且我们有关于该产品的用户反馈。 哪个用户向我们提供反馈并不重要(如果您熟悉的话,这个问题与相关过滤无关 - 用户兴趣不是这里的情况)

下面的每一行都是用户在尝试比较 3 个产品时的反馈:

a 150 分 - b 0 分(该用户刚刚告诉我们他对 2 个产品 a 和 b 的看法,并且比较 a 和 b,他认为如果他给 a 150 分,那么 b 值得 0 分)

a 150 分 - c 20 分

c 200 分 - a 10 分(尽管前一个用户认为 c 比 a 更好)

a 200 分 - b 40 分 - c 100 分

a 150 分 - b 50 分

a 150 分 - b 20 分

(这些评级只是一个样本,现实世界中产品和评级的数量比这要大得多)

现在我需要一种算法来根据用户投票查找产品的排名。 在我看来,最好的方法是用相关图来描述这个问题,并将所有产品相互连接起来。

任何形式的帮助或提示都值得赞赏。

/******************************************************** *****************************/**

你不能只添加点数并计算乘积点数的平均值 因为重要的是如何计算假设a对b得到了800分 - 那么c对a得到10分,如下所示:

a 200 - b 0

a 200 - b 0

a 200 - b 0

a 200 - b 0

c 10 - a 0 (这意味着c 比 a 好,

所以 a 肯定比 b 好,但 c 的得分只有 10 分,但 a 比 c 获得了更好的排名

/********************* ****************************************************** ****/

I need to sort some products base on user ratings.

Suppose we have 3 products {a,b,c} and we have user's feed backs about this products. It's not important which user give us feed back (this question is not about correlative filtering if you are familiar with it - user interests is not the case here)

Each of these below lines are feed backs from users when they tried to compare the 3 products:

a 150 points - b 0 points (this user just told us what he thinks of 2 products a and b and in comparison of a and b he though that if he gives a 150 point then b worth 0 point)

a 150 points - c 20 points

c 200 points - a 10 points (despite the previous one this user thinks that c is better that a)

a 200 points - b 40 points - c 100 points

a 150 points - b 50 points

a 150 points - b 20 points

(These ratings are just a sample and in the real world number of products and ratings are much bigger than this)

Now I need an algorithm to find product's rankings based on user votes. In my point of view the best way is to describe this problem with a correlation graph and connect all products to each other.

Any kind of help or tips is appreciated.

/******************************************************************************/**

you cannot just add the points and calculate the mean of product's points Cause it's important how it got his points suppose a has got 800 points against b - then c get 10 points against a like this:

a 200 - b 0

a 200 - b 0

a 200 - b 0

a 200 - b 0

c 10 - a 0 (this means that c is better than a)

so definitely a is better than b but with a small 10 points c got a better rank from a

/****************************************************************************/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

空城缀染半城烟沙 2024-08-02 19:47:51

查看 http://msdn.microsoft.com/ en-gb/magazine/dd148646.aspx?pr=blog。 它描述了五个“排名”系统。 上下文是关于测试的,但我认为基本概念足以很好地适用于您的问题领域。

Take a look at http://msdn.microsoft.com/en-gb/magazine/dd148646.aspx?pr=blog. It describe five 'ranking' systems. The context is about testing but I think the underlying concepts apply well enough to your problem domain.

情仇皆在手 2024-08-02 19:47:51

多么奇怪的排名方式。 我建议,对于每个用户,您需要为他们排名第一的所有产品创建一个排名。 例如,如果用户这样做:

a 200 - b 0
c 10 - a 0

那么您可能希望将其转换为该用户的完整集合,如下所示:

c 210 - a 200 - b 0

然后您需要标准化(假设所有用户具有相同的权重):

c 100 - a (200/210) - b 0

那么如果用户具有不同的权重(在换句话说,一个用户比另一个用户具有更高的可信度),然后您可以执行此操作(假设该用户的可信度为 5):

c 100*5 - a (200/210)*5 - b 0

完成此操作后,您可以总结每个产品相对于所有用户的所有结果。

What an odd way of ranking. I suggest that for each user, you need to create a ranking for all products they've ranked first. For instance, if a user does this:

a 200 - b 0
c 10 - a 0

Then you might want to convert that into a complete set for the user like this:

c 210 - a 200 - b 0

Then you need to normalize (assuming all users have the same weight):

c 100 - a (200/210) - b 0

Then if users have a different weight (in other words, one user has more credibility than another), then you can do this (assume this user has credibility of 5):

c 100*5 - a (200/210)*5 - b 0

Once you've done that, you could sum up all the results for each product over all users.

墨落成白 2024-08-02 19:47:51

听起来很复杂。 我的方法是定期重新评估排名并将排序顺序存储到数据库中。 从你的描述来看,这听起来像是一个巨大的代数系统。 我不知道是否可以在数据库中解决这个问题,但即使可以,也可能需要 O(n^holy crap) 很长的时间才能解决,所以我觉得缓存将是你的朋友。

至于排序顺序的实际发现,我会建立一个方程列表,例如:

a = b + 400
c = a + 10

一旦你构建了整个列表,解决整个问题并缓存排名

Sounds pretty complicated. The way I'd approach it is to periodically reevaulate the rankings and store the sort order to the database. From what you've described it sounds like a gigantic algebraic system. I don't know if that can be solved in the DB but even if it could, it might take O(n^holy crap) long to solve, so I feel that caching will be your friend here.

As for the actual finding of the sort order, I'd build a list of equations, like:

a = b + 400
c = a + 10

And once you have the whole list build, solve the whole thing and cache the rankings

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文