非平稳时间序列突变检测 -- Bernaola Galvan分割算法

  • 引言
  • 原理
  • 实现
  • 结果

引言

非平稳序列是指包含趋势、季节性或周期性的序列,它可能只含有其中的一种成分, 也可能是几种成分的组合,例如温度、降雨等数据。在一些研究中,如气候突变检测中,经常需要对气候数据进行突变检测。常用的突变检测方法有滑动t-检验、Cramer’s方法、Yamamoto方法、M-K突变检测方法、Pettitt方法、Bernaola Galvan分割算法等。今天主要介绍一种比较适用于非平稳时间序列的启发式突变检测方法–Bernaola Galvan分割算法(简称BG分割算法)。下图是BG算法在检测到的4个突变点。

去看原文

原理

对于包含N个样本的一时间序列数据X,通过第i(2≤i≤N−1)i(2 \leq i \leq N-1)i(2≤i≤N−1)个数据将X分割为左右两个子序列X1(包含N1个样本)和X2(包含N2个样本),分别计算两个子序列的均值mi1m_{i1}mi1​、mi2m_{i2}mi2​和标准差stdi1std_{i1}stdi1​、stdi2std_{i2}stdi2​,以及t-检验统计值T(i)T(i)T(i),其计算公式为
T(i)=abs(mi1−mi2)/SD(i)T(i)=abs(m_{i1}-m_{i2})/SD(i)T(i)=abs(mi1​−mi2​)/SD(i)
其中SD(i)SD(i)SD(i)第iii个点的合并偏差,
SD(i)=sqrt(((N1−1)∗stdi12+(N2−1)∗stdi22)/(N1+N2−2))∗sqrt(1N1+1N2)SD(i)=sqrt(((N1-1)*std_{i1}^2 + (N2-1)*std_{i2}^2)/(N1+N2-2))*sqrt(\frac{1}{N1}+\frac{1}{N2})SD(i)=sqrt(((N1−1)∗stdi12​+(N2−1)∗stdi22​)/(N1+N2−2))∗sqrt(N11​+N21​)。
这样从左到右依次计算每个数据的t-检验统计值T(i)T(i)T(i),可以得到一个T序列,从中找到最大值TmaxT_{max}Tmax​及其所对应的索引jjj,如果TmaxT_{max}Tmax​的统计显著性P(Tmax)>=P0P(T_{max})>=P0P(Tmax​)>=P0(P0为给定的参数),那么便可对序列X在第jjj个样本处进行分割,也就是突变点。P(Tmax)P(T_{max})P(Tmax​)的计算可近似为

同样的,当分割完后,可以对分割后的两个子序列重复进行上述操作,直到不可分割为止,便可以得到所有的突变点。

实现

在这里,采用Python实现上述原理,并通过测试用例数据(用例数据随机生成)进行验证,具体如下:

# -*- coding: utf-8 -*-
# @Author: 武辛
# @Email: geo_data_analysis@163.com
# @Note: 如有疑问,可加微信"wxid-3ccc"
# @All Rights Reserved!
​
import pandas as pd
import numpy as np
import scipy.special
import math, sys
import random
import matplotlib.pyplot as plt
np.random.seed(0)
​
def main():
​data = pd.read_csv("data.csv")X = list(data["X"])
​P0 = 0.95MIN_SUB_LENGTH = 100N = len(X)flag = [0] * Nresults = {}
​T, Tmax, Tmax_idx, PTmax = FindTmax(X)print(PTmax)if PTmax < P0:print("No find!")sys.exit()
​flag[Tmax_idx] = 1break_idx = [0, Tmax_idx, len(X)-1]results[Tmax_idx] = {"Tmax":Tmax, "T":T, "PTmax":PTmax, "start_idx":0, "end_idx":len(X)-1, "break_order":1}...

结果


第一栏为原始序列数据,可以看出,存在4个比较明显的突变。第2-5栏为BG算法计算t-检验统计值T的结果,在第2栏图中,红色线部分找到最大Tmax,即在第799个样本数据处存在第一个突变点,第3-5栏图中分别在7000、4999、2799处找到突变点。

原文有源码,更多内容,请关注地学分析与算法。

非平稳时间序列突变检测 -- Bernaola Galvan分割算法相关推荐

  1. python处理时间序列非平稳_手把手教你用Python处理非平稳时间序列

    简介 预测一个家庭未来三个月的用电量,估计特定时期道路上的交通流量,预测一只股票在纽约证券交易所交易的价格--这些问题都有什么共同点? 它们都属于时间序列数据的范畴!如果没有"时间" ...

  2. 数据挖掘算法之时间序列算法(平稳时间序列模型,AR(p),MA(q),(平稳时间序列模型,AR(p),MA(q),ARMA(p,q)模型和非平稳时间序列模型,ARIMA(p,d,q)模型)学习笔记梳理

    时间序列算法 一.时间序列的预处理 二.平稳时间序列模型 (一).自回归模型AR( p ) (二).移动平均模型MA(q) (三).自回归移动平均模型ARMA(p,q) 三.非平稳时间序列模型 四.确 ...

  3. CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)

    CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020) 目标检测:FCOS(CVPR 2019) 目标检测算法FCOS(FCOS: ...

  4. 手把手教你用Python处理非平稳时间序列(附代码)

    作者:AISHWARYA SINGH 翻译:陈之炎 校对:丁楠雅 本文约3600字,建议阅读10分钟. 本文将重点介绍时间序列数据的平稳性检验方法. 简介 预测一个家庭未来三个月的用电量,估计特定时期 ...

  5. python时间序列预测不连续怎么办_手把手教你用Python处理非平稳时间序列(附代码)...

    本文约3600字,建议阅读10分钟. 本文将重点介绍时间序列数据的平稳性检验方法. 简介 预测一个家庭未来三个月的用电量,估计特定时期道路上的交通流量,预测一只股票在纽约证券交易所交易的价格--这些问 ...

  6. 手把手教你用Python处理非平稳时间序列

    简介 预测一个家庭未来三个月的用电量,估计特定时期道路上的交通流量,预测一只股票在纽约证券交易所交易的价格--这些问题都有什么共同点? 它们都属于时间序列数据的范畴!如果没有"时间" ...

  7. python 时间序列突变检测_Python 百度指数突变点检测

    百度指数是一款非常好用的工具,通过它我们能知道某些关键词在过去的一些日子里的热度变化趋势并能够对这些数据进行分析.如果能用得好百度指数,我们将能产出巨大的价值.你可以通过关注文章下方的Python实用 ...

  8. 【阅读论文】基于统计特征的无监督时间序列异常检测方法

    文章目录 摘要 1.介绍 2.相关工作 3.问题描述 4.方法 4.1 统计特征 4.2提取特征总结 4.3 学习阶段算法 4.4测试阶段算法 5.结果 5.1 YOB评价:单变量 5.3对合成数据集 ...

  9. python平稳性检验_Python中非平稳时间序列的处理

    以下应用有什么共同点:预测未来三个月的一个家庭的电力消耗:估计在一定时期内道路的交通量:以及预测一个股票在纽约证券交易所上交易的价格. 以上都涉及时间序列数据的概念!如果没有"时间" ...

  10. 为什么序列存在单位根是非平稳时间序列?

    作者:五雷 链接:https://www.zhihu.com/question/22385598/answer/21221607 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

最新文章

  1. Python 语法小知识
  2. CentOS安装ElasticSearch及其问题解决
  3. 【通知】有三AI GPU平台上线新功能,GPU/CPU可灵活选择
  4. JCO连接SAP例子
  5. 动漫的python语言代码大全_下载动漫壁纸-Python代码
  6. (计算机组成原理)第五章中央处理器-第四节3:微指令的设计
  7. Netty ChannelOption 解释
  8. Redis Sentinel 源码:Redis的高可用模型分析
  9. autocomplete触发事件_修改jQuery.autocomplete中遇到的键盘事件
  10. 平面设计师必备素材|中国/国潮风格
  11. 可靠消息服务在支付领域的应用
  12. asp cms管理系统
  13. Layui文件上传样式在ng-dialog不显示的问题处理
  14. 王欣的哲学逻辑与产品猜想
  15. javascript中获取非行间样式的方法
  16. 《大数据原理与应用》林子雨:一. 大数据基础
  17. 学习opengl之为立方体六个面贴上不同的纹理图片
  18. 在Ubuntu 18.04上用源码安装GVM 20.08
  19. STM32之ADC的学习心得(std+HAL)
  20. 为美术质量,如何建立RD团队

热门文章

  1. 【终于等到你】微信转发语音的方法 - 语音信息转发
  2. idea+java+selenium自动化测试环境搭建
  3. Tabular学习笔记
  4. idea mac 常用快捷键
  5. 《简明python教程》沈洁元
  6. 图像处理与机器学习-第一章(概述)
  7. Taro使用wxParse富文本组件
  8. cad导出pdf_CAD如何导出高分辨率图片
  9. 探索储电式太阳能充电器,太阳能充电到底有没有必要有储电功能
  10. 【小程序demo】带你玩转支付宝小程序之小程序二维码