gpt4 book ai didi

mysql - 使用喜欢/不喜欢和每天平均观看次数的排名算法

转载 作者:可可西里 更新时间:2023-11-01 06:27:53 25 4
gpt4 key购买 nike

我目前正在使用贝叶斯排名算法对网站上的视频进行排名,每个视频都有:

  • 喜欢
  • 不喜欢
  • View
  • 上传日期

任何人都可以喜欢不喜欢视频,观看视频时总是views + 1并且所有视频都有唯一的上传日期


数据结构

数据格式如下:

|  id  |  title    |  likes  |  dislikes  |  views  |  upload_date  |
|------|-----------|---------|------------|---------|---------------|
| 1 | Funny Cat | 9 | 2 | 18 | 2014-04-01 |
| 2 | Silly Dog | 9 | 2 | 500 | 2014-04-06 |
| 3 | Epic Fail | 100 | 0 | 200 | 2014-04-07 |
| 4 | Duck Song | 0 | 10000 | 10000 | 2014-04-08 |
| 5 | Trololool | 25 | 30 | 5000 | 2014-04-09 |


当前加权排名

以下加权比率算法用于对视频进行排名和排序,以便首先显示评分最高的视频。

此算法考虑了 bayesian average以提供更好的整体排名。

Weighted Rating (WR) = ((AV * AR) + (V * R))) / (AV + V)

AV = Average number of total votes
AR = Average rating
V = This items number of combined (likes + dislikes)
R = This items current rating (likes - dislikes)


当前 MySQL 查询示例

SELECT id, title, (((avg_vote * avg_rating) + ((likes + dislikes) * (likes / dislikes)) ) / (avg_vote + (likes + dislikes))) AS score 
FROM video
INNER JOIN (SELECT ((SUM(likes) + SUM(dislikes)) / COUNT(id)) AS avg_vote FROM video) AS t1
INNER JOIN (SELECT ((SUM(likes) - SUM(dislikes)) / COUNT(id)) AS avg_rating FROM video) AS t2
ORDER BY score DESC
LIMIT 10

注意:viewsupload_date 未考虑在内。


问题

排名目前运行良好,但我们似乎没有充分利用我们掌握的所有数据。

拥有likesdislikesviewsupload_date 但只使用两个似乎是一种浪费,因为 viewsupload_date 没有考虑到每个 like/dislike 应该有多少权重。

例如在上面的数据结构表中,项目12都有相同数量的likes/不喜欢 但是项目 2 是最近上传的,所以它的平均每日浏览量更高。

既然项目 2 在更短的时间内比那些 likes/dislikes 有更多的喜欢和不喜欢,肯定应该加权更强?


新算法结果

理想情况下,考虑了 viewsupload_date 的新算法会将数据排序为以下结果:

注意:avg_views 等于(views/days_since_upload)

|  id  |  title    |  likes  |  dislikes  |  views  |  upload_date  |  avg_views  |
|------|-----------|---------|------------|---------|---------------|-------------|
| 3 | Epic Fail | 100 | 0 | 200 | 2014-04-07 | 67 |
| 2 | Silly Dog | 9 | 2 | 500 | 2014-04-06 | 125 |
| 1 | Funny Cat | 9 | 2 | 18 | 2014-04-01 | 2 |
| 5 | Trololool | 25 | 30 | 5000 | 2014-04-09 | 5000 |
| 4 | Duck Song | 0 | 10000 | 10000 | 2014-04-08 | 5000 |

上面是一个简单的表示,数据越多,它就会变得越复杂。


问题

总而言之,我的问题是如何将 viewsupload_date 纳入我当前的排名算法以改进视频排名方式?

我认为上面的示例通过计算 avg_views 是一个很好的方法,但是我应该把它添加到我拥有的排名算法中的什么位置呢?

可能存在更好的排名算法,如果是这种情况,请提供一个我可以使用的不同算法的示例,并说明使用它的好处。

最佳答案

直接采用观看百分比也不能准确表示项目的受欢迎程度。虽然 18 个中有 9 个赞比 500 个中有 9 个赞“强”,但一个视频获得 500 次观看而另一个视频只有 18 次的事实更能说明该视频的受欢迎程度。

获得大量观看次数的视频通常意味着它在广泛的观看者中非常受欢迎。它只获得一小部分喜欢或不喜欢通常是次要考虑因素。获得少量观看次数和大量点赞的视频通常表明该视频的定位非常狭窄。

如果您想在等式中加入观看次数,我建议您将从喜欢和不喜欢中得到的贝叶斯平均值乘以观看次数的对数。这应该能很好地解决问题。

除非您想使用多因素排名,否则喜欢、不喜欢和观看次数都会单独计算并赋予单独的权重。数学涉及更多,需要进行一些调整,但往往会给出更好的结果。例如,考虑一下人们通常会“喜欢”他们觉得有点有趣的视频,但只有在他们觉得令人反感时才会“不喜欢”。不喜欢比喜欢更强烈。

关于mysql - 使用喜欢/不喜欢和每天平均观看次数的排名算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22949258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com