如何检测数据的重大变化?

数据挖掘 分类 r 时间序列
2022-02-26 11:46:21

我有一个这样的数据集:

> df1
                      date               count
1                  2012-07-01          11.749347
2                  2012-08-01           3.492433
3                  2012-09-01           4.539559
4                  2012-10-01          14.429109
5                  2012-11-01           6.203474
6                  2012-12-01          11.570248
7                  2013-01-01           7.952286
8                  2013-02-01          16.265912
9                  2013-03-01          21.481481
10                 2013-04-01          16.643551
11                 2013-05-01          18.849206
12                 2013-06-01           7.188498
13                 2013-07-01          25.343643
14                 2013-08-01          22.260274
15                 2013-09-01          27.531957
16                 2013-10-01          27.838428
17                 2013-11-01          31.343284
18                 2013-12-01          55.105348

正如您在图中看到的那样,我有增加和减少的部分。

在此处输入图像描述

我现在的问题是:1)如何检测数据中的显着水平变化?

我已经运行了一个 MinMax 函数,它为我提供了本地最小值和最大值,但是您还有其他想法如何将我的数据分组为人眼可以看到的重要区间吗?我正在寻找多种方法来做到这一点。

2个回答

寻找“异常值”不会给你适当的答案,因为你有一个趋势。此外,趋势不是线性的,因此答案将取决于趋势模型。

你应该做的是:

(1)顺应潮流。我选择了一个具有 MAD 的逻辑函数,但 LSE 增长的指数会导致相同的结果

(2) 将残差计算为观测数据减去模型。e(t)

(3) 在残差上寻找异常值。工具 Tuckey 的栅栏 大于四分位数的 1.5 倍。|e(t)|

附图显示,显然您应该选择具有乘法误差的指数增长,从而最小化 MAPE 并以百分比计算误差。

在此处输入图像描述

我赞同 AlainD 的回答。我会为您的听众提供两个图表,一个没有线条的散点图和一个趋势图。我喜欢黄土的方法。这是 ggplot 的外观

> library(ggplot2)
> p <- ggplot(data = df1, aes(x=date,y=count)) + geom_point() + geom_smooth()
> p

在此处输入图像描述