自动检测平均值的突然变化

机器算法验证 时间序列 Python 变化点
2022-03-31 14:47:31

看看这张照片:

数据

它描绘了连续i的一系列相同运行的箱线图。(AFAIK 是标准的最小值/最大值和第 1、第 2、第 3 个四分位数。)所以 1 的 x 轴代表 1000 次运行,其中 i=1;第二个图显示了 i=2 的 1000 次运行;等等。

很容易观察到 i=1,2 和 i=3-19 之间存在分裂。i=2 的值“平均”大一点。

我的目标是给定生成此图的输入,以编程方式找到发生突然一致变化的分割(在 2 和 3 之间)。(第 1 步)如果有某种置信度分数与之相伴,那就太棒了——仅用于用户反馈。变化可能是向上或向下的,但我知道在分割的两侧,值将是一致的(就像 i > 2 箱形图保持相当均匀并且不会返回到 i<2 值)。

然后,在那之后,我想对一个未知的 i 进行测量并决定它落在分裂的哪一侧。现在我知道我永远无法通过一次测量得出结论性的答案,所以我计划对这个未知但不变的 i 值进行几次(5?50?100?)测量。然后使用这些测量值知道 i 落在分割的哪一侧(步骤 2)。同样,如果有与此决定相关的置信度值,那就太棒了。

我在 python 中工作,所以如果有一个很棒的库,但是我自己实现一个算法/方程很酷。我应该阅读哪些技术/方程式/论文来学习如何做到这一点?

2个回答

如果我对您的理解正确,您可能需要了解多重比较:

http://en.wikipedia.org/wiki/Multiple_comparisons

特定程序的选择是一个不同的问题,例如,Scheffe vs. Tukey vs. Bonferroni。

至少在这个框架中,有一种清晰而直接的方法来进行假设检验和置信区间估计。

您的问题的答案可以在http://www.unc.edu/~jbhill/tsay.pdf中找到并且很容易从 AUTOBOX(我帮助开发)等软件和其他地方获得。您所拥有的是从 1 到 19 的中位数序列,您想要做的是以某种方式区分这些中位数的前 k 个和剩余的 19-k 个中位数。搜索断点是一个迭代过程,有时需要预过滤来处理 ARIMA 结构。为了确定类的数量,必须预先指定一个类中的最小数量。如果您指定“3”,则无法得出关于政权转变何时发生的结论。另一方面,如果您指定了“1”,那么人们可能会得出结论,发现了许多断点 (2,3,4,9,10,11,12,19) 。鉴于您指定了 "2" ,这对您的眼睛和 AUTOBOX 以及 R. Tsay 来说都是相当明显的