gpt4 book ai didi

php - 人气,如何让新点击率高于旧点击率?

转载 作者:可可西里 更新时间:2023-11-01 07:36:08 28 4
gpt4 key购买 nike

每个产品都有一个 product_date_added,它是一个包含添加日期的 Date 字段。他们还有一个 product_views,这是一个 int 字段,其中包含查看产品的次数。

为了按受欢迎程度显示产品,我使用了一种算法来计算产品每天有多少次点击。

SELECT 
AVG(product_views / DATEDIFF(NOW(), product_date_added)) as avg_hits
, product_table.*
FROM product_table
WHERE product_available = "yes"
GROUP BY product_id
ORDER BY avg_hits DESC

这行得通,但老板注意到很多旧产品首先出现。所以他基本上希望新的观点比旧的观点有更多的权重。

他的建议是任何超过一岁的观看次数都不算数。我想我必须保留每个 View 的日期才能做到这一点,我认为这会降低性能。

创建像我老板所要求的受欢迎程度算法的最佳方法是什么?

理想情况下,我希望能够想出一些不会改变表结构的东西。如果那不可能,我至少想提出一个可以使用现有数据的解决方案,这样我们就不会从 0 开始。如果那也不可能,那么任何可行的方法都行不通。

最佳答案

您不必(因此)保留每个 View 的日期。您可以改为在包含以下列的表中为每个项目保留最多 366 行:product_id、day_of_year、count。每天运行一项任务,将一年前的所有计数归零。如果您不介意非规范化数据,该任务还可以更新项目本身的“计数”字段以进行快速检索,这样您的查询就不需要更改。 product_views 刚变成 product_views_in_the_last_year。 1 天的时间段是任意的——我怀疑你是否关心流行度是基于恰好 1 年的窗口,所以我希望它也可能是一个小时、一周或两周,具体取决于你有多少桶我们愿意处理。

另一种方案可能是使用指数衰减。把计数字段变成十进制类型。每天一次,将每个项目的计数减少一个固定的百分比(小于 1%,大于 0.1%),这样越近的命中,它的“权重”就越大。如此古老的流行永远不会完全消失,但一年前的热门歌曲不会有太大贡献。顺便说一句,与此方案等效的是保留代码原样,但确保您的网站作为一个整体随着时间的推移变得更受欢迎 ;-)

至于避免从零开始 - 可以一次性减少每件元素的数量,减少比例取决于元素的使用年限。总的来说,您会期望较旧的对象具有较旧的 View ,因此被当前方案高估了。这不是万无一失的,因为也许一些较旧的项目最近获得了很多点击。通过查看最近的 Web 服务器日志,或者在进行一次性减少之前花一周或一个月的时间计算点击率,您也许能够识别这些项目。即使不这样做,如果他们的受欢迎程度有一个根本原因(不仅仅是因为他们目前在您的排名中排名很高,因此从查看您的“最受欢迎”图表的人那里获得流量),那么希望他们会在一段时间内恢复.

关于php - 人气,如何让新点击率高于旧点击率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3753493/

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