Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 检测我的数字异常增长/下降的算法_Algorithm_Statistics - Fatal编程技术网

Algorithm 检测我的数字异常增长/下降的算法

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

我有一个数据集,其中包含在过去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 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包,尽管这可能有些过分