Algorithm 检测我的数字异常增长/下降的算法
我有一个数据集,其中包含在过去30天内访问过我的站点页面的访问者编号,它看起来像这样:Algorithm 检测我的数字异常增长/下降的算法,algorithm,statistics,Algorithm,Statistics,我有一个数据集,其中包含在过去30天内访问过我的站点页面的访问者编号,它看起来像这样: Page 1: [1,2,66,2,2,7,8] Page 2: [3,5,8,3,7,11,45] 总页数是巨大的。我想应用一种算法来检测在此期间出现突然增长、峰值或下降的页面。有没有一种算法可以让我这么做 intq=20//Q应该是区别 int Q = 20; //Q should be the difference //between two pages th
Page 1: [1,2,66,2,2,7,8]
Page 2: [3,5,8,3,7,11,45]
总页数是巨大的。我想应用一种算法来检测在此期间出现突然增长、峰值或下降的页面。有没有一种算法可以让我这么做 intq=20//Q应该是区别
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));
}
}
}
//在两页之间应该是
//被认为是钉子
对于(int i=0;i=p.visitors[j+1]+Q){
打印(“第“+i+”页在第“+j”天出现峰值);
}
否则,如果(p.visitors[j]+Q你可以检查,那么根据平均值和标准偏差你可以估计派克
例如
在第1页:
- 平均值:
12.571428571429
- 标准Dv:
23.719592062661
第1页<代码>值的Z分数(与平均值a数据点的标准偏差数):
[-0.4878,-0.44568,2.2525,-0.44568,-0.44568,-0.23489,-0.19273]
因此,您可以注意到第三个值是平均值的标准偏差2.2525
,这可能是一个派克(突然增长,因为是正的)。其他值似乎是预期值。从统计学上讲,当数据集中的值与Q1
或Q3
的距离大于1.5*(Q3-Q1)
时,数据集中的值被视为异常值,Q1
和Q3
分别代表第一和第三个四分位数
您可以使用一种算法来实现这一点,该算法根据最近的n
天(例如30天)计算Q1
和Q3
,并从那里开始计算
查找Q1
和Q3
IQR=1.5*(第三季度至第一季度)
循环阵列
检查[i]=Q3+IQR
。如果为真:异常值
到目前为止,一切都很好
查找Q1
和Q3
有点棘手。
您可以选择A)
用简单的方法计算它们,即技术上不正确
求平均值
除以2。这是Q1
将Q1
添加到平均值。这是Q3
或B)
找到其他四分位数的计算方法。访问参考文献。
我想你需要更精确地看待你认为的“出乎意料”的页面访问的演变。一个基本的测试是<代码>数学。ABS(Xyt(t+1)-xyt)>阈值
。根据您进行分析的环境,您可能可以访问矩阵操作来模拟处理许多页面(无论如何,从程序员的角度来看)。我可能会选择stats包,尽管这可能有些过分