语境:
我有一组网站,每天记录访问次数:
W0 = { 30, 34, 28, 30, 16, 13, 8, 4, 0, 5, 2, 2, 1, 2, .. }
W1 = { 1, 3, 21, 12, 10, 20, 15, 43, 22, 25, .. }
W2 = { 0, 0, 4, 2, 2, 5, 3, 30, 50, 30, 30, 25, 40, .. }
...
Wn
一般问题:
- 如何确定哪些网站最活跃?
我的意思是在过去几天内接受更多访问或访问量突然增加。出于说明目的,在上面的小例子中,W0 最初很受欢迎,但开始表现出放弃,W1 显示出稳定的受欢迎程度(有一些孤立的高峰),而 W3 在安静的开始之后是一个重要的提升)。
初步想法:
我在 SO 上找到了这个线程,其中描述了一个简单的公式:
// pageviews for most recent day
y2 = pageviews[-1]
// pageviews for previous day
y1 = pageviews[-2]
// Simple baseline trend algorithm
slope = y2 - y1
trend = slope * log(1.0 +int(total_pageviews))
error = 1.0/sqrt(int(total_pageviews))
return trend, error
这看起来很好也很容易,但我遇到了问题。
计算基于斜率。这很好,是我感兴趣的功能之一,但恕我直言,它对于非单调系列有问题。想象一下,在某些日子里,我们的访问次数是恒定的(所以斜率 = 0),那么上述趋势将为零。
问题:
- 如何处理这两种情况(单调增加/减少)和大量点击?
- 我应该使用单独的公式吗?