我有一个包含访问者编号的数据集,该数据集在过去30天内访问了我网站的页面,看起来像这样:
Page 1: [1,2,66,2,2,7,8]
Page 2: [3,5,8,3,7,11,45]
页面总数巨大。我想应用一种算法来检测在此期间突然增长,峰值或下降的网页。有没有一种算法可以让我做到这一点?
答案 0 :(得分:0)
int Q = 20; //Q should be the difference
//between two pages that should be
//considered a spike
for (int i = 0; i < pages.length; i++){
page p = pages[i];
for (int j = 0; j < p.visitors.length - 1; j++){
if(p.visitors[j] >= p.visitors[j+1] + Q){
print("Page " + i + " has spike in day " + j);
}
else if(p.visitors[j] + Q <= p.visitors[j+1] + Q){
print("Page " + i + " has spike in day " + (j+1));
}
}
}
答案 1 :(得分:0)
您可以检查Z-score,因此根据均值和标准差可以估算派克。
例如
在page 1
中:
12.571428571429
23.719592062661
对于page 1
的值的Z分数(与数据点均值的标准偏差数):
[-0.4878,-0.44568,2.2525,-0.44568,-0.44568,-0.23489,-0.19273]
因此,您可以注意到,第三个值是与平均值的2.2525
标准偏差,这可能是派克(突然增长,因为为正)。其他值似乎是预期的。
答案 2 :(得分:0)
从统计意义上讲,当数据集中的值与Q1
或Q3
的距离大于1.5 * (Q3 - Q1)
的距离(其中Q1
和{{1} }分别代表第一个和第三个四分位数。
您可以使用一种算法来实现此目的,该算法根据最近Q3
天(例如30天)计算Q1
和Q3
,然后从那里开始。
n
和Q1
Q3
1.5 * (Q3 - Q1)
。如果为真:离群值page[i] <= Q1 - IQR
。如果为真:离群值到目前为止,太好了。但是。
page[i] >= Q3 + IQR
和Q1
有点棘手。 您可以A)
以简便的方式计算它们,即技术上不正确
Q3
Q1
添加到平均值。这是Q1
或B)
找到其他计算四分位数的方法。访问this以供参考。