为了找到热门话题,我使用标准分数与移动平均值相结合:
z-score = ([current trend] - [average historic trends]) / [standard deviation of historic trends]
到目前为止,我是这样做的:
无论什么时候,对于历史趋势,我只需返回24小时。假设我们现在是1月12日下午3:45:
current_trend =命中1月11日3:45 -1月12日3:45
historic_trends =点击Jan 10,3:45 - Jan 11,3:45 +点击Jan 9,3:45 - Jan 10,3:45 +点击Jan 8,3:45 - Jan 9,3:45 + ...
但这真的足够了吗?如果我总是在00:00开始不是更好吗?例如,对于相同的数据(下午3:45),这样做:
current_trend =命中1月11日0:00 -1月12日0:00
historic_trends =命中1月10日0:00 -1月11日0:00 +命中1月9日0:00 -1月10日0:00 +命中1月9日0:00 -1月9日0:0 + ...
我相信结果会有所不同。但是哪种方法会给你带来更好的结果呢?
我希望你已经理解了我的问题,并能帮助我。:)提前谢谢!
发布于 2009-06-16 12:10:19
我认为,你目前的实现可能会遇到的问题是,23小时前热门的话题正在影响你现在的排名。我看到你的新提议的实现的问题是,你在午夜抹去了所有的石板,所以昨天深夜热门的话题第二天早上就不会看起来热门了(但它们应该是)。
我建议你考虑实现一个Digg风格的算法,在这种算法中,主题的热度会随着年龄的增长而衰减。您可以通过计算过去24小时内每个时段的点击数/小时,然后将每个时段的得分除以该时段发生的小时数来实现这一点。将24个阶段相加,得到分数。
热度= (score24 / 24) + (score23 / 23) + ... + (score2 / 2) + score1
其中,score24是一个主题在24小时前的一小时内获得的“点击”次数(可能不是确切的点击次数,而是该小时的归一化分数)。
这样,24小时前热门的话题仍然会被计入你的算法中,但不会像一个小时前热门的话题那样严重。
https://stackoverflow.com/questions/1003162
复制