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

时间:2018-07-19 14:36:17

标签: algorithm statistics

我有一个包含访问者编号的数据集,该数据集在过去30天内访问了我网站的页面,看起来像这样:

Page 1: [1,2,66,2,2,7,8]
Page 2: [3,5,8,3,7,11,45]

页面总数巨大。我想应用一种算法来检测在此期间突然增长,峰值或下降的网页。有没有一种算法可以让我做到这一点?

3 个答案:

答案 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
  • 标准DV:23.719592062661

对于page 1的值的Z分数(与数据点均值的标准偏差数):

  • [-0.4878,-0.44568,2.2525,-0.44568,-0.44568,-0.23489,-0.19273]

因此,您可以注意到,第三个值是与平均值的2.2525标准偏差,这可能是派克(突然增长,因为为正)。其他值似乎是预期的。

答案 2 :(得分:0)

从统计意义上讲,当数据集中的值与Q1Q3的距离大于1.5 * (Q3 - Q1)的距离(其中Q1和{{1} }分别代表第一个和第三个四分位数。

您可以使用一种算法来实现此目的,该算法根据最近Q3天(例如30天)计算Q1Q3,然后从那里开始。

  1. 找到nQ1
  2. IQR = Q3
  3. 遍历数组
  4. 选中1.5 * (Q3 - Q1)。如果为真:离群值
  5. 选中page[i] <= Q1 - IQR。如果为真:离群值

到目前为止,太好了。但是。

查找page[i] >= Q3 + IQRQ1有点棘手。

您可以A)

以简便的方式计算它们,即技术上不正确

  1. 查找平均值
  2. 除以2。这是Q3
  3. Q1添加到平均值。这是Q1

或B)

找到其他计算四分位数的方法。访问this以供参考。